国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 關鍵字專題

Dogee / 2693人閱讀

摘要:和也許看起來像是關鍵字,但是他們專門用于表示布爾類型的字面量。值得注意的是,在中整形值和布爾值之間不能相互轉換至少在語言層面。相關的操作等于不等于取反位與異或或條件與條件或三目運算符在控制流程中使用一個布爾值可且僅可被轉型為,類型。

總覽

Java 語言中有 50 個關鍵字,這些關鍵字不能用作標識符,如下圖所示(來自 jls8)

其中關鍵字 const 和 goto 是預留的,現在無法使用,并且在程序中出現會是編譯器產生錯誤信息。

true 和 false 也許看起來像是關鍵字,但是他們專門用于表示布爾類型的字面量。類似的, null 專門用于表示 Null 類型的字面量。

其中 strictfp 始于 1.2,assert 始于 1.4, enum 始于 1.5, 這里說的都是 JDK 的版本。

下面我們先開始將關鍵詞分類,無法的分類的關鍵詞將分開講解。

歸類 基本類型

char

boolean

double float

byte int long short

共計 8 中類型的基本類型,占據了 Java 的 8 的關鍵字。
下面簡單介紹一下,從最簡單的開始。

boolean

很簡單,非真即假,有兩個字面量,true 和 false。 值得注意的是,在 Java 中整形值和布爾值之間不能相互轉換,至少在語言層面。網上有關 boolean 在內存中占用多大空間,這涉及到一個設計與實現的問題,Java 語言的規范和 Java 虛擬機的規范和最終實現的 Java 虛擬機的實現總會有實現上的語意偏離,而 Java 虛擬機的規范的原則也是在保證正確性的情況下盡量讓虛擬機的實現提升效率。

相關的操作:

== != 等于 不等于

! 取反

& ^ | 位與 異或 或

&& || 條件與 條件或

? : 三目運算符

在控制流程中使用(if, while, do, for)

一個布爾值可且僅可被轉型為 boolean, Boolean, Object 類型。

char

char 類型用于表示單個字符。
而關于 char 的長度是個非常有趣的問題,我們首先需要了解編碼的相關知識。
可以看一下吳秦的博客,總結的很好。

在 Java 語言中字符編碼是基于 Unicode 編碼規范中的 UTF-16 實現的,UTF-16 具體定義了 Unicode 字符在計算機中的存取方法,UTF-16 使用定長的兩個字節來表示 Unicode 的轉換格式,也是16位長度,理論上可以表示
65536 個字符,然后在當時足夠長的 char 類型在加入大量東亞體系的表意文字后, 16 位的 char 類型已經不能描述所有的 Unicode 字符了。

對此 Java 的對應策略可以參照 魏照哲的專欄 進行理解,學習完上面兩篇博客和 Java 既有的字符表現形式,對于 char 長度這個問題大家應該要慎重對待。

byte short int long (Java 整型)

Java 的整型的范圍是與機器無關的(這與 C,C++ 正好相反),因為 Java 程序時運行在 Java 虛擬機之上的,各個平臺的上的 Java 虛擬機遵循同樣的 Java 虛擬機規范。

這里再講一些關于整型字面量表示的內容:

// 注意 "0" 是零 不是 字母 o 或 O
int a = 077;   // 前面加 "0" 表示八進制數, 十進制 63
int b = 0xee;  // 前面加 "0x" 或 "0X",后面的 ee 也可以表示成 EE、Ee、eE 表示十六進制,十進制238
int c = 0b00000001; // 前面加 "0b" 或 "0B",表示十六進制,十進制 1 ,JDK 1.7 增加的

另外順便說下在整形字面量和浮點數中使用下劃線的特性(也是JDK 1.7 增加的)

int a = 1_500_000; // 方便閱讀
float b = 5_6.3_4;
// 需要注意的是不能以 "_" 開頭,只能出現在數字中間,包括不能出現在進制標示的后面 "0x_EF" 這樣不合法
float double

怎么說呢,它們無法精確的表示所有數,對于很多數而言,是存在誤差的。
大家先看篇博客,我去喝杯咖啡

流程控制

if else switch case

while do for

break 用于退出 switch 和 當前循環,另外支持標簽跳出多重循環

continue 用于結束本輪循環,從下輪循環開始執行

共計 9 個關鍵字。

關于流程控制關鍵字這里只講一下 switch :
case: 標簽可以是:

char, byte, short, int, Character, Byte, Short, Integer

enum 枚舉類型

String 字符串字面量 (JDK 1.7 增加),實際上是利用 hash 算法轉化為 int 類型的語法糖

訪問控制符

包括 public protected private

訪問控制符決定了其他類是否可以使用特定的域或調用特定的方法。訪問控制分為兩個層次:

頂層,可以修飾類,public, package-private (不需要顯式修飾).

成員層面,public, private, protected 或者 package-private (不需要顯式修飾).

被聲明為 public 的類對所有類可見,沒有顯式修飾的類只在包內可見。
關于成員的可見性,給出下圖以供理解:

包相關

package

import

包是我們用來分類相同功能模塊的類、接口文件的一個集合,就像我們電腦中文件夾一樣。聲明在類或接口文件的頭部,如下所示:
package packageName
關于包我們需要牢記的一點是,相同前綴的包除了可以在組織上在一起,但是實際上他們沒有任何關系:
例如 com.sun.a 和 com.sun 作為兩個包沒有任何關系,屬于獨立的類集合。

既然包已經將我們類組織起來,那么我們如何來使用包中個類的?
我們可以像下面一樣使用類的全限定名:

java.util.Date date = new java.util.Date(); 
// 假如你一直這么干,那么恭喜你,你對 JDK 中常用類分布一定非常熟悉
// 假如你一直這么干,并且使用黑軸的機械鍵盤,那么很不幸,你手指一定非常酸痛

這時 import 關鍵字就登場了,我們可以這樣:

import java.util.Date;
...
Date date = new Date();

實際上在這里我必須要提前講到 static 關鍵字,JDK 1.5 起支持靜態導入:

// 讓我們可以不同導入 Math 類再使用 PI 靜態變量
import static java.lang.Math.PI;   
public  class MathUtils{   
    //計算圓面積   
    public static double calCircleArea(double r){   
        return PI * r * r;   
    }   
    //計算球面積   
    public static double calBallArea(double r){   
        return 4 * PI * r * r;   
    }   
}   
面向對象

對于各種編程范式,沒有本質上的優劣,都是為了更好的解決問題而存在的,我們需要權衡利弊,簡單就是一種美。
下面有幾篇文章是關于面向對象一些內容,大家可以看看:
Wiki的詞條 ------ 如何理解面向對象
代碼重構的一個例子 -------- 各種流行的編程方式
有時候走得太遠,我們都忘了我們為何出發,不忘初心,不僅對于夢想,對程序設計也是如此。

開始將涉及的關鍵字再次分類:

class interface

extends implements

abstract static native

new

instanceof

this super

return

void
這部分內容涉及面太廣,大家自己看看書吧,哈哈。

異常處理

五連發
try catch finally throw throws

并發與同步

三連發
final volatile sychronized
final 基礎用法
內存模型系列文章 建議大家看完這一系列文章

什么鬼的其他

五連發
enum default assert strictfp transient

enum

先看用法----》源碼解析---》一篇e文

default 在 switch 語句的的使用:
int i=3;
switch(i)
{
   case 1:
       System.out.println(1);
       break;
   case 2:
       System.out.println(2);
       break;
   case 3:
       System.out.println(3);
       break;
   default:
       System.out.println("default");
       break;
} 
在注解中的使用

不了解注解的朋友可以先看幾篇文章Java 注解指導手冊-----注解的實現-曹旭東的回答

關于 default 在注解中的使用
來自 Java Language Specification 8 9.6.2 章節
An annotation type element may have a default value, specified by following the
element"s (empty) parameter list with the keyword default and an ElementValue

Default values are not compiled into annotations, but rather applied
dynamically at the time annotations are read. Thus, changing a default
value affects annotations even in classes that were compiled before
the change was made (presuming these annotations lack an explicit
value for the defaulted element)

public @interface RequestForEnhancementDefault {
    int id(); // No default - must be specified in each annotation
    String synopsis(); // No default - must be specified in each annotation
    String engineer() default "[unassigned]";
    String date() default "[unimplemented]";
}
interface default method (JDK 1.8)

我就不瞎比比了,大家看下幾篇介紹文章:
天馬流星拳------圓月彎刀

assert

在各種測試框架大行其道的背景,這個關鍵字的使用,應該僅限于簡單的程序測試,需要注意的是斷言機制是否生效需要的顯式地指定 JVM 運行參數。參考 Programming With Assertions

strictfp

引用 stackoverflow 上的一個回答來終結這個關鍵字

It all began with a story,

When java was being developed by James Gosling, Herbert and rest of
his team. They had this crazy thing in mind called platform independency.
They wanted to make oak(Java) so much better that it
would run exactly same on any machine having different instruction
set, even running different operating systems. But, there was a
problem with decimal point numbers also known as floating point and
double in programming languages. Some machines were built targeting
efficiency while rest were targeting accuracy. So, the later(more
accurate) machines had size of floating point as 80 bits while the
former(more efficient/faster) machines had 64 bit doubles. But, this
was against there core idea of building a platform independent

Also, this might lead to loss of precision/data when a code

built on some machine(having double of 64 bit size) and run on

another kind of machine(having double of 80 bit size).

Up-Sizing can be tolerated but Down-Sizing can"t be. So, they came
across a concept of strictfp i.e. strict floating point. If you use
this keyword with a class/function then its floating point and doubles
have a consistent size over any machine. i.e. 32/64 -bit respectively.

transient

給出幾篇文章來循序漸進地解決這個關鍵字
序列化用法--->深入分析序列化--->多帶帶說下transient關鍵字---》序列化高級認知---》序列化中那些你不知道的5件事---》使用SealedObject & SignedObject對序列化加密解密(只需要關注SealedObject & SignedObject 加解密這部分)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65705.html

相關文章

  • 手撕面試官系列(十一):BAT面試必備之常問85題

    摘要:什么是線程餓死,什么是活鎖多線程中的忙循環是什么變量是什么變量和變量有什么不同類型變量提供什么保證能使得一個非原子操作變成原子操作嗎 JVM專題 showImg(https://segmentfault.com/img/remote/1460000019943435); (面試題+答案領取方式見個人主頁) Java 類加載過程? 描述一下 JVM 加載 Class 文件的原理機制? ...

    CatalpaFlat 評論0 收藏0
  • 4月10日云棲精選夜讀 | 阿里巴巴小程序繁星計劃專題上線,匯集最優扶持資源與最新資訊!

    摘要:為了幫助大家更快更多的了解阿里巴巴小程序繁星計劃的動態,我們上線了專題頁面,匯集最新資訊,小程序云產品策略扶持計劃,一云多端架構,開發者互動區,專家團和實踐案例。【點擊訂閱云棲夜讀周刊】 阿里巴巴小程序繁星計劃公布后,得到開發者們的熱切關注,大家積極參與小程序開發者問卷調研,加入小程序開發者群中交流討論,開通小程序云應用資源體驗實踐。為了幫助大家更快更多的了解阿里巴巴小程序繁星計劃的動態,...

    BWrong 評論0 收藏0

發表評論

0條評論

Dogee

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<