Java常见关键字解析
Java常見關(guān)鍵字解析
Java
關(guān)鍵字
Java關(guān)鍵字與保留字
1,Java 關(guān)鍵字列表 (依字母排序 共50組):
abstract, assert, boolean, break, byte, case, catch, char, class, const(保留關(guān)鍵字), continue, default, do, double, else, enum, extends, final, finally, float, for, goto(保留關(guān)鍵字), if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while
2,保留字列表 (依字母排序 共14組),Java保留字是指現(xiàn)有Java版本尚未使用,但以后版本可能會(huì)作為關(guān)鍵字使用:true,false,null,byValue, cast, future, generic, inner, operator, outer, rest,var, goto (保留關(guān)鍵字) , const (保留關(guān)鍵字)
3、goto和const是保留字也是關(guān)鍵字。
java標(biāo)識(shí)符
標(biāo)識(shí)符就是用于Java程序中變量,類,方法等命名的符號(hào),
1Java標(biāo)識(shí)符只能由數(shù)字、字母、下劃線_或$符號(hào)以及Unicode字符集組成
[2]Java標(biāo)識(shí)符必須以字母、下劃線“_”或“$”符號(hào)以及Unicode字符集開頭
[3]Java標(biāo)識(shí)符不可以是Java關(guān)鍵字、保留字(const、goto)和字面量(true、false、null)
[4]Java標(biāo)識(shí)符區(qū)分大小寫,是大小寫敏感的
1、 構(gòu)造器
1、 this關(guān)鍵字
this關(guān)鍵字只能在方法內(nèi)部使用,表示對(duì)“調(diào)用方法的那個(gè)對(duì)象”的引用。
類方法不能用this調(diào)用。
2、 static關(guān)鍵字
static方法就是沒有this的方法。
在static方法內(nèi)部不能調(diào)用非靜態(tài)方法;而在非靜態(tài)方法中是可以調(diào)用靜態(tài)方法的,且可以在沒有創(chuàng)建任何對(duì)象的前提下。
static不能修飾成員變量,即static修飾字段的語句行不能出現(xiàn)在main方法及其它方法中。Java中靜態(tài)變量只能在類主體中定義,不能在方法中定義。 靜態(tài)變量屬于類所有而不屬于方法。
2、 訪問控制權(quán)限
2.1、 private:你無法訪問的
只能當(dāng)前類能夠訪問private修飾的變量或方法
2.2、 default:包訪問權(quán)限(默認(rèn)default)
同一個(gè)包內(nèi)的所有類都可以訪問沒有修飾符(即默認(rèn))的變量或方法。即當(dāng)前的包中的所有其他類對(duì)那個(gè)成員都有訪問權(quán)限,但對(duì)于包之外的類,卻是不能訪問該成員的。
取得對(duì)某成員訪問權(quán)的途徑有如下方式:
1. 用public修飾成員,任何人在任何地方都有訪問權(quán)限
2. 不加訪問權(quán)限修飾詞,并將其他類放在同一包內(nèi)
3. 繼承,繼承來的類可以訪問父類的public成員和protected成員
4. 提供get和set方法,以讀取和改變數(shù)值(JavaBeans的基本原理)
2.3、 protected:繼承訪問權(quán)限
基類的protected成員只有派生類能夠訪問(同一包內(nèi)的其他類也可以訪問)
2.4、 public:接口訪問權(quán)限
所有的類都可以訪問。對(duì)于接口來說只能使用public修飾。
2.5、 類的訪問權(quán)限
為了控制某個(gè)類的訪問權(quán)限
修飾詞必須出現(xiàn)于class之前(默認(rèn)修飾(去掉public)為包訪問控制權(quán)限)
每個(gè)編譯單元(文件)都只能有一個(gè)public類。
public類的名稱必須與含有該編譯單元的文件名相同(包括大小寫)
編譯單元內(nèi)完全不帶public修飾也有可能。在這種情況下可以隨便對(duì)文件命名。
注意
類不可以是private,及protected的。只能是public或默認(rèn)包訪問權(quán)限。(實(shí)際上內(nèi)部類可以使private或protected,但這是一個(gè)特例)
如果不希望其他任何人對(duì)該類有訪問權(quán)限,可以把所有的構(gòu)造器都指定為private,從而阻止任何人創(chuàng)建該類的對(duì)象。
在這種情況下可以在該類的static成員內(nèi)部創(chuàng)建,例如:
//第一種方式
class Soup1{
private Soup1(){
}
public static Soup1 makeSoup(){
return new Soup1(); //通過靜態(tài)成員創(chuàng)建該類的對(duì)象
}
}
//第二種方式(用到了設(shè)計(jì)模式-單例模式)
class Soup2{
private Soup2(){
}
private static Soup2 ps1 = new Soup2();
public static Soup2 acess(){
return new Soup1(); //通過靜態(tài)成員創(chuàng)建該類的對(duì)象
}
pubblic void f(){
}
}
3、 final關(guān)鍵字
3.1、 final數(shù)據(jù)
1、 final關(guān)鍵字可以用于成員變量、本地變量、方法以及類。
2、 final成員變量必須在聲明的時(shí)候初始化或者在構(gòu)造器中初始化,否則就會(huì)報(bào)編譯錯(cuò)誤。
3、 你不能夠?qū)inal變量再次賦值。
4、 本地變量必須在聲明時(shí)賦值。
5、 在匿名類中所有變量都必須是final變量。
6、 final方法不能被重寫。
7、 final類不能被繼承。
8、 沒有在聲明時(shí)初始化final變量的稱為空白final變量(blank final variable),它們必須在構(gòu)造器中初始化,或者調(diào)用this()初始化。不這么做的話,編譯器會(huì)報(bào)錯(cuò)“final變量(變量名)需要進(jìn)行初始化”。
final+基本數(shù)據(jù)類型:在Java中對(duì)基本數(shù)據(jù)類型用final修飾表示這類變量可在編譯時(shí)執(zhí)行計(jì)算式,減輕運(yùn)行負(fù)擔(dān),但在定義時(shí)必須對(duì)其進(jìn)行賦值。
final+static+基本類型數(shù)據(jù):即編譯期常量,只占據(jù)一段不能改變的存儲(chǔ)空間。將用大寫表示,并使下劃線分隔各個(gè)單詞。
final+對(duì)象或數(shù)組(數(shù)組也是一個(gè)對(duì)象):final使引用恒定不變。一旦引用被初始化指向一個(gè)對(duì)象,就無法把它改為指向另一個(gè)對(duì)象。但對(duì)象自身是可變的。
注意:不能因?yàn)槟硞€(gè)數(shù)據(jù)是final的就認(rèn)為它在程序編譯完成時(shí)就知道他的值了,也可能實(shí)在程序執(zhí)行運(yùn)行時(shí)才知道他的值的。例如private final value = rand.nextInt(20),在編譯完成時(shí)并不知道value的值,在程序執(zhí)行運(yùn)行后才知道它的值的。
空白final:例如private final int num;
final在使用時(shí)一般在定義處賦值,而對(duì)于這種空白final定義類型沒有在定義處賦值就必須在構(gòu)造器中賦值。
final參數(shù):當(dāng)final用來修飾參數(shù)時(shí),
若修飾的參數(shù)為基本類型參數(shù)(final int i),則基本類型的值不能被改變,即只能讀不能執(zhí)行i++,i--等改變i的值的操作。否則不能編譯。
若修飾的參數(shù)為對(duì)象(final Car car)時(shí),不能更改指向的對(duì)象的參數(shù)引用;如car = new Car()就是錯(cuò)誤的用法。
3.2、 final方法
final修飾的方法,無法被覆蓋。
注意:其實(shí)類中的所有private方法都隱式地指定為final的。所以private final void f() 這種寫法編譯器不會(huì)不報(bào)錯(cuò)的。 由于private修飾的方法子類是訪問不到的,子類更加不可能去覆蓋了,所以與final修飾的方法無法被覆蓋并不沖突。
3.3、 final類
final修飾的類不能被繼承。
final修飾的類中的類成員跟普通的類的類成員沒有區(qū)別;但是final類中的方法都是隱式指定為final類型的。
String
String str1 = "hello";
String str2 = "he" + new String("llo");
System.err.println(str1 == str2);
String str1 = "hello";這里的str1指的是方法區(qū)的字符串常量池中的“hello”,編譯時(shí)期就知道的; String str2 = "he" + new String("llo");這里的str2必須在運(yùn)行時(shí)才知道str2是什么,所以它是指向的是堆里定義的字符串“hello”,所以這兩個(gè)引用是不一樣的。
如果用str1.equal(str2),那么返回的是True;因?yàn)閮蓚€(gè)字符串的內(nèi)容一樣。
instanceof
o instanceof Class 若instanceof左邊的參數(shù)為null,則返回FALSE。
transient
Java的Serializable提供了一種序列化對(duì)象實(shí)例的機(jī)制。當(dāng)序列化對(duì)象時(shí),可能有一個(gè)特殊的對(duì)象數(shù)據(jù)成員,我們不想用Serializable機(jī)制來保存它。為了在一個(gè)特定對(duì)象的一個(gè)域上關(guān)閉Serializable,可以在這個(gè)域前加上關(guān)鍵字transient。
transient是Java語言的關(guān)鍵字,用來表示一個(gè)域不是該對(duì)象序列化的一部分。當(dāng)一個(gè)對(duì)象被序列化的時(shí)候,transient型變量的值不包括在序列化的表示中,然而非transient型的變量是被包括進(jìn)去的。
總結(jié)
以上是生活随笔為你收集整理的Java常见关键字解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机8×8点阵显示简单汉字的程序_LE
- 下一篇: 网抑云时间到表情包