摘要:構(gòu)造器沒(méi)有返回值一個(gè)對(duì)象變量并沒(méi)有實(shí)際包含一個(gè)對(duì)象,而僅僅引用一個(gè)對(duì)象,如有兩個(gè)部分。子類(lèi)重寫(xiě)方法的返回值范圍必須小于等于父類(lèi)方法的返回值。枚舉類(lèi)型中可以添加一些構(gòu)造器方法和域。
第三章
Java是一種強(qiáng)類(lèi)型語(yǔ)言。
https://blog.csdn.net/qq_3619...
在Java中,整型的范圍與機(jī)器無(wú)關(guān)。
int 4字節(jié)
short 2字節(jié)
long 8字節(jié)
byte 1字節(jié)
子串:Substring
拼接:String.join
String類(lèi)對(duì)象是不可變字符,可通過(guò)substring+”” 改變字符串變量
不能用==來(lái)比較字符串,應(yīng)該用equals。一個(gè)常量和一個(gè)變量比較,推薦把常量寫(xiě)在前面
任何一個(gè)Java對(duì)象都可以轉(zhuǎn)換成字符串
輸入輸出
首先要構(gòu)造一個(gè)Scanner對(duì)象。
Scanner類(lèi)有各種方法,nextLine()讀取一行,next()讀取一個(gè)單詞,nextInt()讀取一個(gè)整數(shù),nextDouble()讀取一個(gè)浮點(diǎn)數(shù)。
Java提供了一種帶標(biāo)簽的break語(yǔ)句。只能跳出語(yǔ)句塊,而不能跳入語(yǔ)句塊。
大數(shù)值BigInteger類(lèi)
for each循環(huán)(增強(qiáng)for)
for(int element:a) System.out.println(element); public class Main { public static void main(String[] args) { System.out.println("Hello World"); } }
底層使用的是迭代器,所以在遍歷的過(guò)程中,不能對(duì)集合中的元素進(jìn)行增刪。目標(biāo)只能是Collection或者是數(shù)組。
Arrays.copyOf可以拷貝數(shù)組,如果直接b=a,拷貝的是數(shù)組地址值,改變b會(huì)改變a
第四章、對(duì)象和類(lèi)類(lèi)之間最常見(jiàn)的關(guān)系有
依賴(lài)(uses-a):一個(gè)類(lèi)的方法操縱另一個(gè)類(lèi)的對(duì)象。盡可能的將相互依賴(lài)的類(lèi)減至最小。
聚合(has-a):以為著類(lèi)A的對(duì)象包含類(lèi)B的對(duì)象
繼承(is-a):
構(gòu)造器(構(gòu)造方法)用來(lái)構(gòu)造并初始化對(duì)象。通過(guò)new關(guān)鍵字構(gòu)造一個(gè)新對(duì)象。構(gòu)造器與其他方法有一個(gè)重要的不同,構(gòu)造器總是伴隨new操作符的執(zhí)行被調(diào)用,而不能對(duì)一個(gè)已經(jīng)存在的對(duì)象調(diào)用構(gòu)造器來(lái)打到重新設(shè)置實(shí)例域的目的。構(gòu)造器沒(méi)有返回值
一個(gè)對(duì)象變量并沒(méi)有實(shí)際包含一個(gè)對(duì)象,而僅僅引用一個(gè)對(duì)象,如:
Date deadline = new Date();
有兩個(gè)部分。New Date()構(gòu)造了一個(gè)Date類(lèi)型的對(duì)象,它的值是新創(chuàng)建的對(duì)象的引用。這個(gè)引用儲(chǔ)存在deadline中。
靜態(tài)域、靜態(tài)方法(用static修飾)伴隨著類(lèi)一直存在。靜態(tài)方法通過(guò)類(lèi)名調(diào)用。調(diào)用靜態(tài)方法不需要?jiǎng)?chuàng)建實(shí)例(這也是main是靜態(tài)方法的原因)。
https://www.cnblogs.com/LZL-s...
靜態(tài)方法只能訪問(wèn)靜態(tài)域。
在下面兩種情況下使用靜態(tài)方法:
一個(gè)方法不需要訪問(wèn)對(duì)象狀態(tài),其所需參數(shù)都是通過(guò)顯示參數(shù)提供(如:Math.pow)
一個(gè)方法只需要訪問(wèn)類(lèi)的靜態(tài)域
Java中方法參數(shù)的總結(jié)(Java中都是值傳遞,而不是引用傳遞):
https://segmentfault.com/a/11...
一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類(lèi)型的參數(shù)(數(shù)值型或布爾型)
一個(gè)方法可以改變一個(gè)對(duì)象參數(shù)的狀態(tài)
一個(gè)方法不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象(Java中值傳遞的體現(xiàn))
當(dāng)且僅當(dāng)類(lèi)沒(méi)有提供任何構(gòu)造器時(shí),系統(tǒng)才會(huì)提供一個(gè)默認(rèn)的構(gòu)造器。
類(lèi)設(shè)計(jì)技巧:P144
第五章、繼承this的兩個(gè)主要用途:一是引用隱式參數(shù),二是調(diào)用該類(lèi)其他的構(gòu)造器;
super的兩個(gè)主要用途:一是調(diào)用超類(lèi)的方法,二是調(diào)用超類(lèi)的構(gòu)造器。
調(diào)用構(gòu)造器時(shí),兩者很相似,調(diào)用構(gòu)造器的語(yǔ)句只能作為另一個(gè)構(gòu)造器的第一條語(yǔ)句出現(xiàn)。
Java不支持多繼承。Java中多繼承可通過(guò)接口實(shí)現(xiàn)。
多態(tài)、向上轉(zhuǎn)型和向下轉(zhuǎn)型:
https://segmentfault.com/a/11...
父子類(lèi)構(gòu)造方法:子類(lèi)構(gòu)造方法必須調(diào)用父類(lèi)構(gòu)造方法。不寫(xiě)則有一個(gè)默認(rèn)super()自動(dòng)調(diào)用父類(lèi)無(wú)參構(gòu)造方法,如果父類(lèi)沒(méi)有無(wú)參構(gòu)造方法,會(huì)報(bào)錯(cuò),這時(shí)需在子類(lèi)重載父類(lèi)已有的有參數(shù)的構(gòu)造方法即可。而且super重載必須是子類(lèi)構(gòu)造方法的第一句。
子類(lèi)重寫(xiě)方法的返回值范圍必須【小于等于】父類(lèi)方法的返回值。例如父類(lèi)返回值是void,子類(lèi)是int,報(bào)錯(cuò);父類(lèi)返回值是Object,子類(lèi)是String,不報(bào)錯(cuò)。
子類(lèi)方法的權(quán)限必須【大于等于】父類(lèi)方法的權(quán)限修飾符
關(guān)于靜態(tài)綁定和動(dòng)態(tài)綁定:
https://www.cnblogs.com/bette...
final:一個(gè)方法被聲明為final,子類(lèi)不能覆蓋重寫(xiě)這個(gè)方法。一個(gè)域被聲明為final,構(gòu)造對(duì)象之后不能改變值。一個(gè)類(lèi)聲明為final,只是其中的方法自動(dòng)成為final,不包括類(lèi)中的域。
內(nèi)聯(lián):如果一個(gè)方法沒(méi)有被覆蓋并且很短,編譯器就能夠?qū)λM(jìn)行優(yōu)化處理,這個(gè)過(guò)程稱(chēng)為內(nèi)聯(lián)。(挖個(gè)坑,以后學(xué)到JVM時(shí)來(lái)填)
抽象方法必須在抽象類(lèi)中
抽象類(lèi)除了抽象方法,還可以包含具體數(shù)據(jù)和具體方法。例如Person類(lèi)可以保存姓名和一個(gè)返回姓名的具體方法
public abstract class Person { private String name; public Person(String name) { this.name = name; } public abstract String getDescription(); public String getNmame(); { return name; } }
盡量將通用的域和方法(不管是否是抽象的)放在超類(lèi)(不管是否是抽象類(lèi))中。
類(lèi)即使不含抽象方法,也可以將類(lèi)聲明為抽象類(lèi)。
抽象類(lèi)不能被實(shí)例化,如果將一個(gè)類(lèi)聲明為abstract,就不能創(chuàng)建這個(gè)類(lèi)的對(duì)象
注意:可以定義一個(gè)抽象類(lèi)的對(duì)象變量,但是它只能引用非抽象子類(lèi)的對(duì)象。例如
Person p = new Student("Vince Vu", "Economics"); //p是一個(gè)抽象類(lèi)Person的變量,Person引用了一個(gè)非抽象子類(lèi)Student的實(shí)例
可以理解為多態(tài)/向上轉(zhuǎn)型
只有基本類(lèi)型不是對(duì)象,例如:數(shù)值、字符、布爾類(lèi)型的值。
Object中的equals方法,如果是基本類(lèi)型比較的是值,如果是對(duì)象比較的是地址值。String重寫(xiě)了equals方法,比較的是兩字符串的內(nèi)容是否相等。
https://www.cnblogs.com/dolph...
數(shù)組可以使用靜態(tài)的Arrays.equals檢測(cè)相應(yīng)的數(shù)組元素是否相等。重寫(xiě)equals來(lái)比較兩個(gè)對(duì)象的建議:P169。IDEA直接可以自動(dòng)生成重寫(xiě)的equals和toString方法。。。
重寫(xiě)equals,記得參數(shù)列表為(Object other)。(重寫(xiě):在繼承中,方法的名稱(chēng)一樣,參數(shù)列表也一樣;重載:方法名稱(chēng)一樣,參數(shù)列表不一樣)
getClass()是使用反射技術(shù)來(lái)判斷對(duì)象所屬的類(lèi)。
不同的兩個(gè)對(duì)象可能會(huì)有相同的散列碼,所以重寫(xiě)equals就必須重寫(xiě)hashCode方法。P170。
https://www.cnblogs.com/dolph...
toString是一種很好的調(diào)試工具。數(shù)組可通過(guò)Arrays.toString。建議每一個(gè)類(lèi)都添加toString方法。
Object類(lèi)中的toString方法返回的是地址值,所以需要重寫(xiě)toString方法。
ArrayList:
https://segmentfault.com/a/11...
自動(dòng)裝箱和拆箱:
有一個(gè)很有用的特性,便于添加int的元素到ArrayList
list.add(3);
將自動(dòng)變換成
list.add(Integer.valueOf(3));
這種變化稱(chēng)為自動(dòng)裝箱(autoboxing)(基本類(lèi)型的數(shù)據(jù)->包裝類(lèi))
相反地,當(dāng)一個(gè)Integer對(duì)象賦給一個(gè)int值時(shí),將會(huì)自動(dòng)的拆箱(包裝類(lèi)->基本類(lèi)型的數(shù)據(jù)),包裝類(lèi)無(wú)法直接參與運(yùn)算
int n = list.get(i);
自動(dòng)變成
int n = list.get(i).intValue();
在算數(shù)表達(dá)式中也能夠自動(dòng)的裝箱和拆箱
Integer n = 3; n++;
編譯器將自動(dòng)地插入一條對(duì)象拆箱的指令,然后進(jìn)行自增計(jì)算,最后再將結(jié)果裝箱。
比較兩個(gè)包裝器對(duì)象時(shí)要調(diào)用equals,如果用==可能會(huì)出錯(cuò)。
包裝器中包含了一些基本方法,如一個(gè)整數(shù)字符串轉(zhuǎn)換成數(shù)值
int x = Integer.parseInt(s);
這里與Integer對(duì)象沒(méi)有任何關(guān)系,parseInt是一個(gè)靜態(tài)方法,Interger類(lèi)只是放置這個(gè)方法的地方。
Integer.toString()可以把一個(gè)整數(shù)轉(zhuǎn)換成字符串
Integer對(duì)象是不可變的:包含在包裝器中的內(nèi)容不會(huì)改變。所以
public static void triple(Integer x) // won"t work { ... }
不會(huì)改變參數(shù)值。
org.omg.CORBA包中定義持有者(holder)類(lèi)型,可以訪問(wèn)儲(chǔ)存在其中的值,進(jìn)而改變參數(shù)值。
參數(shù)數(shù)量可變的方法
// 一個(gè)方法只能有一個(gè)可變參數(shù); // 如果方法的參數(shù)有多個(gè),那么可變參數(shù)要寫(xiě)在參數(shù)的末尾 public static int max(int... values){ int lagest=0; for (int i = 0; i < values.length ; i++) { if(values[i]>lagest) lagest=values[i]; } return lagest; } //可變參數(shù)的特殊(終極)寫(xiě)法 public static void method(Object...obj){ }
枚舉類(lèi)型實(shí)際上是一個(gè)類(lèi),例如
public enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE };
這個(gè)聲明定義的類(lèi)型是一個(gè)類(lèi),它剛好有4個(gè)實(shí)例。
比較兩個(gè)枚舉類(lèi)型的值,永遠(yuǎn)不要用equals,用==。
枚舉類(lèi)型中可以添加一些構(gòu)造器、方法和域。
反射(之后再回來(lái)看)
Class類(lèi):Object中的getClass()方法可以返回一個(gè)Class類(lèi)型的實(shí)例。
繼承的設(shè)計(jì)技巧:P208
第六章、接口、lambda表達(dá)式與內(nèi)部類(lèi)接口中的所有方法自動(dòng)地屬于public,聲明時(shí)可省略。但是在實(shí)現(xiàn)接口時(shí),必須把方法生命為public
接口中的變量其實(shí)是常量,接口不允許有實(shí)例域(常量)
實(shí)現(xiàn)Arrays中的sort方法:https://blog.csdn.net/qq_3785...
接口中的方法自動(dòng)被設(shè)置為public,接口中的域自動(dòng)設(shè)為public static final。java語(yǔ)言規(guī)范建議不要書(shū)寫(xiě)這些多余的關(guān)鍵字。
引用接口,而不是只用抽象類(lèi)的原因是一個(gè)類(lèi)只能繼承一個(gè)類(lèi),但是可以實(shí)現(xiàn)多個(gè)接口
接口的默認(rèn)方法與靜態(tài)方法:https://www.cnblogs.com/dustc...
接口的默認(rèn)方法可以通過(guò)接口實(shí)現(xiàn)類(lèi)對(duì)象,直接調(diào)用
接口的默認(rèn)方法可以被接口實(shí)現(xiàn)類(lèi)覆蓋重寫(xiě)
默認(rèn)方法的主要優(yōu)勢(shì)是拓展接口的方法,而不破壞現(xiàn)有代碼。
解決默認(rèn)方法沖突:
超類(lèi)優(yōu)先:如果繼承了一個(gè)類(lèi),實(shí)現(xiàn)了一個(gè)接口,那么超類(lèi)優(yōu)先
接口沖突:如果實(shí)現(xiàn)了兩個(gè)接口有想通的方法,必須通過(guò)覆蓋來(lái)解決沖突
lambda
內(nèi)部類(lèi)包括成員內(nèi)部類(lèi)、局部?jī)?nèi)部類(lèi)和匿名內(nèi)部類(lèi)
如何使用成員內(nèi)部類(lèi):
間接方式:
在外部類(lèi)的方法中,使用內(nèi)部類(lèi),在外部類(lèi)方法中創(chuàng)建內(nèi)部類(lèi)對(duì)象,通過(guò)內(nèi)部類(lèi)對(duì)象調(diào)用內(nèi)部類(lèi)方法,main只是調(diào)用外部類(lèi)的方法。通過(guò)外部類(lèi)的對(duì)象,調(diào)用外部類(lèi)的方法,里面間接再使用內(nèi)部類(lèi)
public class Outer { public class Inner{ public void show(){ System.out.println("內(nèi)部類(lèi)的方法"); } } public void method(){ System.out.println("外部類(lèi)的方法"); Inner inner = new Inner(); //創(chuàng)建內(nèi)部類(lèi)對(duì)象 inner.show(); //通過(guò)內(nèi)部類(lèi)對(duì)象調(diào)用內(nèi)部類(lèi)方法 } }
//通過(guò)調(diào)用外部類(lèi)對(duì)象,調(diào)用外部類(lèi)的方法 public class Main { public static void main(String[] args) { Outer outer = new Outer(); outer.method(); } }
直接方式:
//類(lèi)名稱(chēng) 對(duì)象名 = new 類(lèi)名稱(chēng)(); //【外部類(lèi)名稱(chēng).內(nèi)部類(lèi)名稱(chēng) 對(duì)象名 = new 外部類(lèi)名稱(chēng)().new 內(nèi)部類(lèi)名稱(chēng)();】 public class Main { public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner(); inner.show(); } }
內(nèi)部類(lèi)既可以訪問(wèn)自身的數(shù)據(jù)域,也可以訪問(wèn)創(chuàng)建它的外圍類(lèi)對(duì)象的數(shù)據(jù)域。(內(nèi)用外,隨意訪問(wèn);外用內(nèi),需要先建立內(nèi)部類(lèi)對(duì)象,通過(guò)內(nèi)部類(lèi)對(duì)象訪問(wèn))
沒(méi)重名可直接調(diào)用外部類(lèi)數(shù)據(jù)域,如果重名,通過(guò)【外部類(lèi)名稱(chēng).this.外部類(lèi)成員變量名】來(lái)調(diào)用。
public class Outer { private int num = 100; public class Inner{ final int num = 200; public void show(){ int num = 300; System.out.println(num);//300 System.out.println(this.num);//200 System.out.println(Outer.this.num);//100 } } }
局部?jī)?nèi)部類(lèi)定義:如果一個(gè)類(lèi)是定義在一個(gè)方法內(nèi)部的,那么這就是一個(gè)局部?jī)?nèi)部類(lèi)?!熬植俊保褐挥挟?dāng)前所屬的方法才能使用它,除了這個(gè)方法外面就不能用了。
訪問(wèn)局部?jī)?nèi)部類(lèi),是通過(guò)調(diào)用外部類(lèi)包含該內(nèi)部類(lèi)的方法
public class Outer { public void methodOuter(){ class Inner { int num = 10; public void methodInner() { System.out.println(num); } } Inner inner = new Inner(); inner.methodInner(); } public static void main(String[] args) { Outer obj = new Outer(); obj.methodOuter(); } }
類(lèi)的權(quán)限修飾符:
public > protected > (default) >private
定義一個(gè)類(lèi)的時(shí)候,權(quán)限修飾符:
外部類(lèi):public / (default)
成員內(nèi)部類(lèi):public / protected / (default) / private
局部?jī)?nèi)部類(lèi):什么都不能寫(xiě)
局部?jī)?nèi)部類(lèi)想訪問(wèn)所在方法的局部變量,這個(gè)局部變量必須是【有效final的】,即final或者沒(méi)有更改過(guò)的
class Outer { public void methodOuter(){ final int num = 5; // num = 9; 錯(cuò)誤 class Inner { public void methodInner() { System.out.println(num); } } } }
匿名內(nèi)部類(lèi):如果接口的實(shí)現(xiàn)類(lèi),(或者是父類(lèi)的子類(lèi))只需要使用唯一的一次,那么這種情況下就可以省略該類(lèi)的定義,二改為使用【匿名內(nèi)部類(lèi)】。
/* 匿名內(nèi)部類(lèi)格式 接口名稱(chēng) 對(duì)象名 = new 接口名稱(chēng)(){ //覆蓋重寫(xiě)所有抽象方法 }; //注意要有分號(hào) */ public static void main(String[] args){ //匿名內(nèi)部類(lèi) MyInterface obj = new MyInterface(){ //new代表創(chuàng)建對(duì)象的動(dòng)作 //接口名稱(chēng)是匿名內(nèi)部類(lèi)需要實(shí)現(xiàn)的接口 @Override //大括號(hào)中的內(nèi)容才是匿名內(nèi)部類(lèi)的內(nèi)容 public void method(){ } }; obj.method(); } /* 注意: 1.匿名內(nèi)部類(lèi),在【創(chuàng)建對(duì)象】的時(shí)候,只能使用唯一一次。如果希望多次創(chuàng)建對(duì)象,而且類(lèi)的內(nèi)容一樣的話,那么就必須使用多帶帶定義的實(shí)現(xiàn)類(lèi)了。 2.匿名對(duì)象,在【調(diào)用方法】的時(shí)候,只能調(diào)用唯一一次。如果希望同一個(gè)對(duì)象,調(diào)用多次方法,那么必須給對(duì)象起一個(gè)名字。 3.匿名內(nèi)部類(lèi)是省略了【實(shí)現(xiàn)類(lèi)/子類(lèi)名稱(chēng)】,但是匿名對(duì)象是省略了【對(duì)象名稱(chēng)】。匿名內(nèi)部類(lèi)和匿名對(duì)象不是一碼事??!
匿名內(nèi)部類(lèi)作用:不用專(zhuān)門(mén)寫(xiě)一個(gè)類(lèi)來(lái)實(shí)現(xiàn)接口,直接使用匿名內(nèi)部類(lèi)調(diào)用接口。
如果想重復(fù)使用,就不要用任何匿名的東西。不管是匿名內(nèi)部類(lèi)還是匿名對(duì)象。
//如果有兩個(gè)對(duì)象,要寫(xiě)兩遍 //使用匿名內(nèi)部類(lèi) MyInterface objA = new MyInterface(){ @Override public void method(){ System.out.println("匿名內(nèi)部類(lèi)實(shí)現(xiàn)了方法!"); } }; objA.method(); MyInterface objB = new MyInterface(){ @Override public void method(){ System.out.println("匿名內(nèi)部類(lèi)實(shí)現(xiàn)了方法!"); } }; objB.method();
匿名對(duì)象:
//使用了匿名內(nèi)部類(lèi),而且省略了對(duì)象名稱(chēng),也是匿名對(duì)象 new MyInterface(){ @Override public void method1(){ System.out.println("匿名對(duì)象匿名內(nèi)部類(lèi)實(shí)現(xiàn)了方法1"); } @Override public void method2(){ System.out.println("匿名對(duì)象匿名內(nèi)部類(lèi)實(shí)現(xiàn)了方法2"); } }.method1(); //匿名對(duì)象只能調(diào)用一次方法 //如果還想調(diào)用method2還要?jiǎng)?chuàng)建一個(gè)新的匿名對(duì)象 new MyInterface(){ @Override public void method1(){ System.out.println("匿名對(duì)象匿名內(nèi)部類(lèi)實(shí)現(xiàn)了方法1"); } @Override public void method2(){ System.out.println("匿名對(duì)象匿名內(nèi)部類(lèi)實(shí)現(xiàn)了方法2"); } }.method2(); //如果想重復(fù)使用,就不要用任何匿名的東西
內(nèi)部類(lèi)是一種編譯器現(xiàn)象,與虛擬機(jī)無(wú)關(guān)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/75177.html
摘要:開(kāi)頭正式開(kāi)啟我入職的里程,現(xiàn)在已是工作了一個(gè)星期了,這個(gè)星期算是我入職的過(guò)渡期,算是知道了學(xué)校生活和工作的差距了,總之,盡快習(xí)慣這種生活吧。當(dāng)時(shí)是看的廖雪峰的博客自己也用做爬蟲(chóng)寫(xiě)過(guò)幾篇博客,不過(guò)有些是在前人的基礎(chǔ)上寫(xiě)的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開(kāi)頭 2017.08.21 正式開(kāi)啟我...
摘要:如果需要收集參數(shù)化類(lèi)型對(duì)象,只有使用警告這節(jié)討論,向參數(shù)可變的方法傳遞一個(gè)泛型類(lèi)型的實(shí)例。異常不能拋出或捕獲泛型類(lèi)的實(shí)例實(shí)際上,泛型類(lèi)擴(kuò)展也是不合法的。 Object:所有類(lèi)的超類(lèi) java中每個(gè)類(lèi)都是由它擴(kuò)展而來(lái),但是并不需要這樣寫(xiě):class Employee extends Object.如果沒(méi)有明確指出超類(lèi),Object類(lèi)就被認(rèn)為是這個(gè)的超類(lèi)??梢允褂肙bject類(lèi)型的變量引用...
摘要:關(guān)鍵字作用調(diào)用超類(lèi)方法調(diào)用超類(lèi)構(gòu)造器關(guān)鍵字作用引用隱式參數(shù)如調(diào)用該類(lèi)的其他構(gòu)造器在覆蓋一個(gè)方法時(shí),子類(lèi)方法可見(jiàn)性不能低于超類(lèi)方法阻止繼承類(lèi)和方法目的確保它們不會(huì)在子類(lèi)中改變語(yǔ)義。但是如果將一個(gè)類(lèi)聲明為后面可以改變類(lèi)變量的值了。 數(shù)據(jù)類(lèi)型 整型 int 存儲(chǔ)要求:4byte 取值范圍:-2147483648 -- 2147483647(超過(guò)20億) short 存儲(chǔ)要求:2byte 取...
摘要:如何降低開(kāi)發(fā)的復(fù)雜性最小侵入編程通過(guò)面向接口和依賴(lài)注入實(shí)現(xiàn)松耦合基于編程慣例和切面進(jìn)行聲明式編程通過(guò)模板減少樣板式代碼容器在應(yīng)用中,不再由對(duì)象自行創(chuàng)建或管理它們之間的依賴(lài)關(guān)系容器負(fù)責(zé)創(chuàng)建對(duì)象裝配對(duì)象配置它們并管理它們的整個(gè)生命周期。 歡迎大家關(guān)注我的微信公眾號(hào),一起探討Java相關(guān)技術(shù) showImg(https://segmentfault.com/img/bVboaBO?w=129...
摘要:系統(tǒng)級(jí)線程核心級(jí)線程由操作系統(tǒng)內(nèi)核進(jìn)行管理。值得注意的是多線程的存在,不是提高程序的執(zhí)行速度。實(shí)現(xiàn)多線程上面說(shuō)了一大堆基礎(chǔ),理解完的話。虛擬機(jī)的啟動(dòng)是單線程的還是多線程的是多線程的。 前言 之前花了一個(gè)星期回顧了Java集合: Collection總覽 List集合就這么簡(jiǎn)單【源碼剖析】 Map集合、散列表、紅黑樹(shù)介紹 HashMap就是這么簡(jiǎn)單【源碼剖析】 LinkedHashMa...
閱讀 1960·2023-04-26 02:14
閱讀 3861·2021-11-23 09:51
閱讀 1470·2021-10-13 09:39
閱讀 4053·2021-09-24 10:36
閱讀 3075·2021-09-22 15:55
閱讀 3598·2019-08-30 12:57
閱讀 2097·2019-08-29 15:30
閱讀 2050·2019-08-29 13:19