摘要:可以直接用接口名訪問(wèn)。其他類(lèi)也稱為外部類(lèi)。汽車(chē)外部類(lèi)發(fā)動(dòng)機(jī)內(nèi)部類(lèi)內(nèi)部類(lèi)的分類(lèi)內(nèi)部類(lèi)分為成員內(nèi)部類(lèi)與局部?jī)?nèi)部類(lèi)。我們定義內(nèi)部類(lèi)時(shí),就是一個(gè)正常定義類(lèi)的過(guò)程,同樣包含各種修飾符繼承與實(shí)現(xiàn)關(guān)系等。并且日常項(xiàng)目的分工也是以包作為邊界。
01final關(guān)鍵字概念
* A: 概述 繼承的出現(xiàn)提高了代碼的復(fù)用性,并方便開(kāi)發(fā)。但隨之也有問(wèn)題,有些類(lèi)在描述完之后,不想被繼承, 或者有些類(lèi)中的部分方法功能是固定的,不想讓子類(lèi)重寫(xiě)??墒钱?dāng)子類(lèi)繼承了這些特殊類(lèi)之后, 就可以對(duì)其中的方法進(jìn)行重寫(xiě),那怎么解決呢? 要解決上述的這些問(wèn)題,需要使用到一個(gè)關(guān)鍵字final,final的意思為最終,不可變。 final是個(gè)修飾符,它可以用來(lái)修飾類(lèi),類(lèi)的成員,以及局部變量。02final修飾類(lèi)義
* A: final 修飾類(lèi) final修飾類(lèi)不可以被繼承,但是可以繼承其他類(lèi)。 * B: 案例 class Yy {} final class Fu extends Yy{} //可以繼承Yy類(lèi) class Zi extends Fu{} //不能繼承Fu類(lèi)03final修飾方法
* A: final修飾方法 ? final修飾的方法不可以被覆蓋,但父類(lèi)中沒(méi)有被final修飾方法,子類(lèi)覆蓋后可以加final。 * B: 案例 class Fu { // final修飾的方法,不可以被覆蓋,但可以繼承使用 public final void method1(){} public void method2(){} } class Zi extends Fu { //重寫(xiě)method2方法 public final void method2(){} }04final修飾局部變量
* A:修飾基本數(shù)據(jù)類(lèi)型變量 ??final修飾的變量稱為常量,這些變量只能賦值一次 * B:案例1 final int i = 20; i = 30; //賦值報(bào)錯(cuò),final修飾的變量只能賦值一次 * C: 修飾引用數(shù)據(jù)類(lèi)型 ? 引用類(lèi)型的變量值為對(duì)象地址值,地址值不能更改,但是地址內(nèi)的對(duì)象屬性值可以修改 * D: 修飾引用數(shù)據(jù)類(lèi)型 final Person p = new Person(); Person p2 = new Person(); p = p2; //final修飾的變量p,所記錄的地址值不能改變 p.name = "小明";//可以更改p對(duì)象中name屬性值 p不能為別的對(duì)象,而p對(duì)象中的name或age屬性值可更改。05final修飾成員變量
* A: 修飾成員變量 ? 修飾成員變量,需要在創(chuàng)建對(duì)象前賦值,否則報(bào)錯(cuò)。(當(dāng)沒(méi)有顯式賦值時(shí),多個(gè)構(gòu)造方法的均需要為其賦值。) * B: 案例 class Demo { //直接賦值 final int m = 100; //final修飾的成員變量,需要在創(chuàng)建對(duì)象前賦值,否則報(bào)錯(cuò)。 final int n; public Demo(){ //可以在創(chuàng)建對(duì)象時(shí)所調(diào)用的構(gòu)造方法中,為變量n賦值 n = 2016; } }06static的概念
* A:概念 當(dāng)在定義類(lèi)的時(shí)候,類(lèi)中都會(huì)有相應(yīng)的屬性和方法。而屬性和方法都是通過(guò)創(chuàng)建本類(lèi)對(duì)象調(diào)用的。 當(dāng)在調(diào)用對(duì)象的某個(gè)方法時(shí),這個(gè)方法沒(méi)有訪問(wèn)到對(duì)象的特有數(shù)據(jù)時(shí),方法創(chuàng)建這個(gè)對(duì)象有些多余。 可是不創(chuàng)建對(duì)象,方法又調(diào)用不了,這時(shí)就會(huì)想,那么我們能不能不創(chuàng)建對(duì)象,就可以調(diào)用方法呢? 可以的,我們可以通過(guò)static關(guān)鍵字來(lái)實(shí)現(xiàn)。static它是靜態(tài)修飾符,一般用來(lái)修飾類(lèi)中的成員。
==============================第二節(jié)課開(kāi)始====================================
07static修飾的對(duì)象特有數(shù)據(jù)* A:特點(diǎn)1: 被static修飾的成員變量屬于類(lèi),不屬于這個(gè)類(lèi)的某個(gè)對(duì)象。 (也就是說(shuō),多個(gè)對(duì)象在訪問(wèn)或修改static修飾的成員變量時(shí),其中一個(gè)對(duì)象將static成員變量值進(jìn)行了修改, 其他對(duì)象中的static成員變量值跟著改變,即多個(gè)對(duì)象共享同一個(gè)static成員變量) * B: 代碼演示 class Demo { public static int num = 100; } class Test { public static void main(String[] args) { Demo d1 = new Demo(); Demo d2 = new Demo(); d1.num = 200; System.out.println(d1.num); //結(jié)果為200 System.out.println(d2.num); //結(jié)果為200 } }08static的內(nèi)存圖
* A: 略 參考day13_source 靜態(tài)的內(nèi)存圖.jpg09static注意事項(xiàng)_靜態(tài)不能直接調(diào)用非靜態(tài)
* A: 注意事項(xiàng)? 被static修飾的成員可以并且建議通過(guò)類(lèi)名直接訪問(wèn)。 * B: 訪問(wèn)靜態(tài)成員的格式: 類(lèi)名.靜態(tài)成員變量名 類(lèi)名.靜態(tài)成員方法名(參數(shù)) 對(duì)象名.靜態(tài)成員變量名 ------不建議使用該方式,會(huì)出現(xiàn)警告 對(duì)象名.靜態(tài)成員方法名(參數(shù)) ------不建議使用該方式,會(huì)出現(xiàn)警告 * C: 代碼演示 class Demo { //靜態(tài)成員變量 public static int num = 100; //靜態(tài)方法 public static void method(){ System.out.println("靜態(tài)方法"); } } class Test { public static void main(String[] args) { System.out.println(Demo.num); Demo.method(); } }10static靜態(tài)的使用場(chǎng)景
* A: 使用場(chǎng)景 static可以修飾成員變量和成員方法。 什么時(shí)候使用static修飾成員變量? 加static修飾成員的時(shí)候,這個(gè)成員會(huì)被類(lèi)的所有對(duì)象所共享。一般我們把共性數(shù)據(jù)定義為靜態(tài)的變量 什么時(shí)候使用static修飾成員方法? 靜態(tài)的方法只能訪問(wèn)靜態(tài)的成員,如果靜態(tài)方法中引用到了靜態(tài)的其他成員,那么這個(gè)方法需要聲明為靜態(tài)的方法。11對(duì)象中的靜態(tài)調(diào)用
* A: 對(duì)象的靜態(tài)調(diào)用 在多態(tài)中,非靜態(tài)編譯看父類(lèi),運(yùn)行看子類(lèi),父類(lèi)沒(méi)有編譯失敗。 但多態(tài)中的靜態(tài)方法,編譯看父類(lèi),運(yùn)行仍然看父類(lèi)。因?yàn)殪o態(tài)和對(duì)象沒(méi)有關(guān)系,屬于靜態(tài)綁定。 * B: 舉例 public class Test{ public static void main(String[] args){ Fu f = new Zi(); f.show(); //父類(lèi)的引用和父類(lèi)的方法綁定,和對(duì)象無(wú)關(guān),不會(huì)在運(yùn)行時(shí)動(dòng)態(tài)的執(zhí)行子類(lèi)特有的方法。 } }12定義靜態(tài)常量
* A: 靜態(tài)常量 開(kāi)發(fā)中,我們想在類(lèi)中定義一個(gè)靜態(tài)常量,通常使用public static final修飾的變量來(lái)完成定義。 此時(shí)變量名用全部大寫(xiě),多個(gè)單詞使用下劃線連接。 * B: 定義格式: public static final 數(shù)據(jù)類(lèi)型 變量名 = 值; * C: 如下演示: class Company { public static final String COMPANY_NAME = "傳智播客"; public static void method(){ System.out.println("一個(gè)靜態(tài)方法"); } } 當(dāng)我們想使用類(lèi)的靜態(tài)成員時(shí),不需要?jiǎng)?chuàng)建對(duì)象,直接使用類(lèi)名來(lái)訪問(wèn)即可。 System.out.println(Company.COMPANY_NAME); //打印傳智播客 Company.method(); // 調(diào)用一個(gè)靜態(tài)方法 * D: 注意: 接口中的每個(gè)成員變量都默認(rèn)使用public static final修飾。 所有接口中的成員變量已是靜態(tài)常量,由于接口沒(méi)有構(gòu)造方法,所以必須顯示賦值??梢灾苯佑媒涌诿L問(wèn)。 interface Inter { public static final int COUNT = 100; } 訪問(wèn)接口中的靜態(tài)變量 Inter.COUNT
==============================第三節(jié)課開(kāi)始====================================
13匿名對(duì)象* A:匿名對(duì)象的概述 * 匿名對(duì)象是指創(chuàng)建對(duì)象時(shí),只有創(chuàng)建對(duì)象的語(yǔ)句,卻沒(méi)有把對(duì)象地址值賦值給某個(gè)變量。 * B:案例 public class Person{ public void eat(){ System.out.println(); } } 創(chuàng)建一個(gè)普通對(duì)象 Person p = new Person(); 創(chuàng)建一個(gè)匿名對(duì)象 new Person(); * C: 匿名對(duì)象的特點(diǎn) a:創(chuàng)建匿名對(duì)象直接使用,沒(méi)有變量名。 new Person().eat() //eat方法被一個(gè)沒(méi)有名字的Person對(duì)象調(diào)用了。 b:匿名對(duì)象在沒(méi)有指定其引用變量時(shí),只能使用一次。 new Person().eat(); 創(chuàng)建一個(gè)匿名對(duì)象,調(diào)用eat方法 new Person().eat(); 想再次調(diào)用eat方法,重新創(chuàng)建了一個(gè)匿名對(duì)象 c:匿名對(duì)象可以作為方法接收的參數(shù)、方法返回值使用 class Demo { public static Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名對(duì)象作為方法返回值 return new Person(); } public static void method(Person p){} } class Test { public static void main(String[] args) { //調(diào)用getPerson方法,得到一個(gè)Person對(duì)象 Person person = Demo.getPerson(); //調(diào)用method方法 Demo.method(person); //匿名對(duì)象作為方法接收的參數(shù) Demo.method(new Person()); } }14內(nèi)部類(lèi)
* A: 內(nèi)部類(lèi)的概述 將類(lèi)寫(xiě)在其他類(lèi)的內(nèi)部,可以寫(xiě)在其他類(lèi)的成員位置和局部位置,這時(shí)寫(xiě)在其他類(lèi)內(nèi)部的類(lèi)就稱為內(nèi)部類(lèi)。 其他類(lèi)也稱為外部類(lèi)。 * B: 什么時(shí)候使用內(nèi)部類(lèi) 在描述事物時(shí),若一個(gè)事物內(nèi)部還包含其他可能包含的事物,比如在描述汽車(chē)時(shí),汽車(chē)中還包含這發(fā)動(dòng)機(jī), 這時(shí)發(fā)動(dòng)機(jī)就可以使用內(nèi)部類(lèi)來(lái)描述。 class 汽車(chē) { //外部類(lèi) class 發(fā)動(dòng)機(jī) { //內(nèi)部類(lèi) } } * C: 內(nèi)部類(lèi)的分類(lèi) 內(nèi)部類(lèi)分為成員內(nèi)部類(lèi)與局部?jī)?nèi)部類(lèi)。 我們定義內(nèi)部類(lèi)時(shí),就是一個(gè)正常定義類(lèi)的過(guò)程,同樣包含各種修飾符、繼承與實(shí)現(xiàn)關(guān)系等。 在內(nèi)部類(lèi)中可以直接訪問(wèn)外部類(lèi)的所有成員。15成員內(nèi)部類(lèi)的調(diào)用格式
* A: 格式 成員內(nèi)部類(lèi),定義在外部類(lèi)中的成員位置。與類(lèi)中的成員變量相似,可通過(guò)外部類(lèi)對(duì)象進(jìn)行訪問(wèn) * B: 定義格式 class 外部類(lèi) { 修飾符 class 內(nèi)部類(lèi) { //其他代碼 } } * C: 訪問(wèn)方式 外部類(lèi)名.內(nèi)部類(lèi)名 變量名 = new 外部類(lèi)名().new 內(nèi)部類(lèi)名(); * D: 成員內(nèi)部類(lèi)代碼演示 class Body {//外部類(lèi),身體 private boolean life= true; //生命狀態(tài) public class Heart { //內(nèi)部類(lèi),心臟 public void jump() { System.out.println("心臟噗通噗通的跳") System.out.println("生命狀態(tài)" + life); //訪問(wèn)外部類(lèi)成員變量 } } } 訪問(wèn)內(nèi)部類(lèi) public static void main(String[] args) { //創(chuàng)建內(nèi)部類(lèi)對(duì)象 Body.Heart bh = new Body().new Heart(); //調(diào)用內(nèi)部類(lèi)中的方法 bh.jump(); }16成員內(nèi)部類(lèi)的同名變量調(diào)用
* A: 代碼實(shí)現(xiàn) public class Outer { int i = 1; class Inner { int i = 2; public void inner(){ int i = 3; System.out.println(Outer.this.i); } } }17局部?jī)?nèi)部類(lèi)
* A 局部?jī)?nèi)部類(lèi),定義在外部類(lèi)方法中的局部位置。與訪問(wèn)方法中的局部變量相似,可通過(guò)調(diào)用方法進(jìn)行訪問(wèn). * B 定義格式 class 外部類(lèi) { 修飾符 返回值類(lèi)型 方法名(參數(shù)) { class 內(nèi)部類(lèi) { //其他代碼 } } } * C 訪問(wèn)方式 在外部類(lèi)方法中,創(chuàng)建內(nèi)部類(lèi)對(duì)象,進(jìn)行訪問(wèn) * D 局部?jī)?nèi)部類(lèi)代碼演示 定義類(lèi) class Party {//外部類(lèi),聚會(huì) public void puffBall(){// 吹氣球方法 class Ball {// 內(nèi)部類(lèi),氣球 public void puff(){ System.out.println("氣球膨脹了"); } } //創(chuàng)建內(nèi)部類(lèi)對(duì)象,調(diào)用puff方法 new Ball().puff(); } } 訪問(wèn)內(nèi)部類(lèi) public static void main(String[] args) { //創(chuàng)建外部類(lèi)對(duì)象 Party p = new Party(); //調(diào)用外部類(lèi)中的puffBall方法 p.puffBall(); }
==============================第四節(jié)課開(kāi)始====================================
18匿名內(nèi)部類(lèi)* A: 概述 內(nèi)部類(lèi)是為了應(yīng)對(duì)更為復(fù)雜的類(lèi)間關(guān)系。查看源代碼中會(huì)涉及到,而在日常業(yè)務(wù)中很難遇到,這里不做贅述。 最常用到的內(nèi)部類(lèi)就是匿名內(nèi)部類(lèi),它是局部?jī)?nèi)部類(lèi)的一種。 定義的匿名內(nèi)部類(lèi)有兩個(gè)含義: 臨時(shí)定義某一指定類(lèi)型的子類(lèi) 定義后即刻創(chuàng)建剛剛定義的這個(gè)子類(lèi)的對(duì)象 * B: 本質(zhì) 匿名內(nèi)部類(lèi)的本質(zhì)是一個(gè)實(shí)現(xiàn)了接口或繼承了某個(gè)類(lèi)的子類(lèi)匿名對(duì)象. * C: 案例 public interface Smoking { public abstract void smoking(); } /* * 實(shí)現(xiàn)類(lèi),實(shí)現(xiàn)接口 重寫(xiě)接口抽象方法,創(chuàng)建實(shí)現(xiàn)類(lèi)對(duì)象 * class XXX implements Smoking{ * public void smoking(){ * * } * } * XXX x = new XXX(); * x.smoking(); * Smoking s = new XXX(); * s.smoking(); * * 匿名內(nèi)部類(lèi),簡(jiǎn)化問(wèn)題: 定義實(shí)現(xiàn)類(lèi),重寫(xiě)方法,建立實(shí)現(xiàn)類(lèi)對(duì)象,合為一步完成 */ 測(cè)試類(lèi): public class Test { public static void main(String[] args) { //使用匿名內(nèi)部類(lèi) /* * 定義實(shí)現(xiàn)類(lèi),重寫(xiě)方法,創(chuàng)建實(shí)現(xiàn)類(lèi)對(duì)象,一步搞定 * 格式: * new 接口或者父類(lèi)(){ * 重寫(xiě)抽象方法 * }; * 從 new開(kāi)始,到分號(hào)結(jié)束 * 創(chuàng)建了接口的實(shí)現(xiàn)類(lèi)的對(duì)象 */ new Smoking(){ public void smoking(){ System.out.println("人在吸煙"); } }.smoking(); } }19匿名內(nèi)部類(lèi)_2
* A: 匿名內(nèi)部類(lèi)案例演示 public abstract class Animal { public abstract void eat(); public abstract void sleep(); } 測(cè)試代碼 /* * new Animal(){ public void eat(){ System.out.println("在吃飯"); } public void sleep(){ System.out.println("在睡覺(jué)"); } }; 以上代碼,就是Animal的子類(lèi)的對(duì)象 多態(tài)性, 父類(lèi)引用 = 子類(lèi)的對(duì)象 */ public class Test2 { public static void main(String[] args) { Animal a= new Animal(){ public void eat(){ System.out.println("在吃飯"); } public void sleep(){ System.out.println("在睡覺(jué)"); } }; a.eat(); a.sleep(); } }20包的概念
* A: 概念 java的包,其實(shí)就是我們電腦系統(tǒng)中的文件夾,包里存放的是類(lèi)文件。 當(dāng)類(lèi)文件很多的時(shí)候,通常我們會(huì)采用多個(gè)包進(jìn)行存放管理他們,這種方式稱為分包管理。 在項(xiàng)目中,我們將相同功能的類(lèi)放到一個(gè)包中,方便管理。并且日常項(xiàng)目的分工也是以包作為邊界。 類(lèi)中聲明的包必須與實(shí)際class文件所在的文件夾情況相一致,即類(lèi)聲明在a包下,則生成的.class文件必須在a文件夾下,否則,程序運(yùn)行時(shí)會(huì)找不到類(lèi)。 * B 聲明格式 通常使用公司網(wǎng)址反寫(xiě),可以有多層包,包名采用全部小寫(xiě)字母,多層包之間用”.”連接 類(lèi)中包的聲明格式: package 包名.包名.包名…; 如:黑馬程序員網(wǎng)址itheima.com那么網(wǎng)址反寫(xiě)就為com.itheima 傳智播客 itcast.cn 那么網(wǎng)址反寫(xiě)就為 cn.itcast 注意:聲明包的語(yǔ)句,必須寫(xiě)在程序有效代碼的第一行(注釋不算) 代碼演示: package cn.itcast; //包的聲明,必須在有效代碼的第一行 import java.util.Scanner; import java.util.Random; public class Demo {} * C: 包的訪問(wèn) 在訪問(wèn)類(lèi)時(shí),為了能夠找到該類(lèi),必須使用含有包名的類(lèi)全名(包名.類(lèi)名)。 包名.包名….類(lèi)名 如: java.util.Scanner java.util.Random cn.itcast.Demo 帶有包的類(lèi),創(chuàng)建對(duì)象格式:包名.類(lèi)名 變量名 = new包名.類(lèi)名(); cn.itcast.Demo d = new cn.itcast.Demo(); 前提:包的訪問(wèn)與訪問(wèn)權(quán)限密切相關(guān),這里以一般情況來(lái)說(shuō),即類(lèi)用public修飾的情況。 類(lèi)的簡(jiǎn)化訪問(wèn) 當(dāng)我們要使用一個(gè)類(lèi)時(shí),這個(gè)類(lèi)與當(dāng)前程序在同一個(gè)包中(即同一個(gè)文件夾中),或者這個(gè)類(lèi)是java.lang包中的類(lèi)時(shí)通??梢允÷缘舭?,直接使用該類(lèi)。 如:cn.itcast包中有兩個(gè)類(lèi),PersonTest類(lèi),與Person類(lèi)。我們?cè)赑ersonTest類(lèi)中,訪問(wèn)Person類(lèi)時(shí),由于是同一個(gè)包下,訪問(wèn)時(shí)可以省略包名,即直接通過(guò)類(lèi)名訪問(wèn) Person。 類(lèi)名 變量名 = new類(lèi)名(); Person p = new Person(); 當(dāng)我們要使用的類(lèi),與當(dāng)前程序不在同一個(gè)包中(即不同文件夾中),要訪問(wèn)的類(lèi)必須用public修飾才可訪問(wèn)。 package cn.itcst02; public class Person {}22導(dǎo)入包
* A:導(dǎo)入包 我們每次使用類(lèi)時(shí),都需要寫(xiě)很長(zhǎng)的包名。很麻煩,我們可以通過(guò)import導(dǎo)包的方式來(lái)簡(jiǎn)化。 可以通過(guò)導(dǎo)包的方式使用該類(lèi),可以避免使用全類(lèi)名編寫(xiě)(即,包類(lèi).類(lèi)名)。 導(dǎo)包的格式: import 包名.類(lèi)名; 當(dāng)程序?qū)胫付ǖ陌?,使用?lèi)時(shí),就可以簡(jiǎn)化了。演示如下 //導(dǎo)入包前的方式 //創(chuàng)建對(duì)象 java.util.Random r1 = new java.util.Random(); java.util.Random r2 = new java.util.Random(); java.util.Scanner sc1 = new java.util.Scanner(System.in); java.util.Scanner sc2 = new java.util.Scanner(System.in); //導(dǎo)入包后的方式 import java.util.Random; import java.util.Scanner; //創(chuàng)建對(duì)象 Random r1 = new Random(); Random r2 = new Random(); Scanner sc1 = new Scanner(System.in); Scanner sc2 = new Scanner(System.in); import導(dǎo)包代碼書(shū)寫(xiě)的位置:在聲明包package后,定義所有類(lèi)class前,使用導(dǎo)包import包名.包名.類(lèi)名;23權(quán)限修飾符
* A 權(quán)限修飾符有哪些 在Java中提供了四種訪問(wèn)權(quán)限,使用不同的訪問(wèn)權(quán)限時(shí),被修飾的內(nèi)容會(huì)有不同的訪問(wèn)權(quán)限, 以下表來(lái)說(shuō)明不同權(quán)限的訪問(wèn)能力: public protected default private 同一類(lèi)中 √ √ √ √ 同一包中(子類(lèi)與無(wú)關(guān)類(lèi)) √ √ √ 不同包的子類(lèi) √ √ 不同包中的無(wú)關(guān)類(lèi) √ * B: 小結(jié) 歸納一下:在日常開(kāi)發(fā)過(guò)程中,編寫(xiě)的類(lèi)、方法、成員變量的訪問(wèn) 要想僅能在本類(lèi)中訪問(wèn)使用private修飾; 要想本包中的類(lèi)都可以訪問(wèn)不加修飾符即可; 要想本包中的類(lèi)與其他包中的子類(lèi)可以訪問(wèn)使用protected修飾 要想所有包中的所有類(lèi)都可以訪問(wèn)使用public修飾。 注意:如果類(lèi)用public修飾,則類(lèi)名必須與文件名相同。一個(gè)文件中只能有一個(gè)public修飾的類(lèi)。24代碼塊
* A: 概述: 程序中用大括號(hào)括起來(lái)的代碼叫代碼塊 * B: 分類(lèi) 局部代碼塊 構(gòu)造代碼塊 靜態(tài)代碼塊 同步代碼塊 * C 局部代碼塊: 局部代碼塊是定義在方法或語(yǔ)句中 特點(diǎn): 以”{}”劃定的代碼區(qū)域,此時(shí)只需要關(guān)注作用域的不同即可 方法和類(lèi)都是以代碼塊的方式劃定邊界的 class Demo{ public static void main(String[] args) { { int x = 1; System.out.println("普通代碼塊" + x); } int x = 99; System.out.println("代碼塊之外" + x); } } 結(jié)果: 普通代碼塊1 代碼塊之外99 局部代碼塊作用:可以限定變量的聲明周期. * D: 構(gòu)造代碼塊 構(gòu)造代碼塊是定義在類(lèi)中成員位置的代碼塊 特點(diǎn): 優(yōu)先于構(gòu)造方法執(zhí)行,構(gòu)造代碼塊用于執(zhí)行所有對(duì)象均需要的初始化動(dòng)作 每創(chuàng)建一個(gè)對(duì)象均會(huì)執(zhí)行一次構(gòu)造代碼塊。 public class Person { private String name; private int age; //構(gòu)造代碼塊 { System.out.println("構(gòu)造代碼塊執(zhí)行了"); } Person(){ System.out.println("Person無(wú)參數(shù)的構(gòu)造函數(shù)執(zhí)行"); } Person(int age){ this.age = age; System.out.println("Person(age)參數(shù)的構(gòu)造函數(shù)執(zhí)行"); } } class PersonDemo{ public static void main(String[] args) { Person p = new Person(); Person p1 = new Person(23); } } * E: 靜態(tài)代碼塊 靜態(tài)代碼塊是定義在成員位置,使用static修飾的代碼塊。 特點(diǎn): 它優(yōu)先于主方法執(zhí)行、優(yōu)先于構(gòu)造代碼塊執(zhí)行,當(dāng)以任意形式第一次使用到該類(lèi)時(shí)執(zhí)行。 該類(lèi)不管創(chuàng)建多少對(duì)象,靜態(tài)代碼塊只執(zhí)行一次。 可用于給靜態(tài)變量賦值,用來(lái)給類(lèi)進(jìn)行初始化。 public class Person { private String name; private int age; //靜態(tài)代碼塊 static{ System.out.println("靜態(tài)代碼塊執(zhí)行了"); } } * F: 同步代碼塊(多線程學(xué)習(xí))25總結(jié)
* 把今天的知識(shí)點(diǎn)總結(jié)一遍。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/67171.html
摘要:前言是面對(duì)對(duì)象的語(yǔ)言,因此有必要單獨(dú)紀(jì)錄下對(duì)象的各種定義和理解。面對(duì)對(duì)象基本概述概述是基于面向過(guò)程的變成思想,是對(duì)面向過(guò)程的一種封裝。面對(duì)對(duì)象開(kāi)發(fā)就是不斷的創(chuàng)建對(duì)象,使用對(duì)象,指揮對(duì)象做事情。面對(duì)對(duì)象設(shè)計(jì)其實(shí)就是在管理和維護(hù)對(duì)象之間的關(guān)系。 前言 java是面對(duì)對(duì)象的語(yǔ)言,因此有必要單獨(dú)紀(jì)錄下對(duì)象的各種定義和理解。 面對(duì)對(duì)象,主要包括:面向?qū)ο笏枷?,?lèi)與對(duì)象及其使用,對(duì)象的內(nèi)存圖,成...
摘要:外部類(lèi)要訪問(wèn)內(nèi)部類(lèi)的成員,必須創(chuàng)建對(duì)象。前提存在一個(gè)類(lèi)或者接口這里的類(lèi)可以是具體類(lèi)也可以是抽象類(lèi)。 1.package關(guān)鍵字的概述及作用(了解) A:為什么要有包 將字節(jié)碼(.class)進(jìn)行分類(lèi)存放 包其實(shí)就是文件夾 B:包的概述 舉例: 學(xué)生:增加,刪除,修改,查詢 老師:增加,刪除,修改,查詢 ... 方案1:按照功能分 com.heima.add ...
摘要:構(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 ...
摘要:在那里,可以理解為指針。局部變量不能夠被訪問(wèn)控制符及修飾都可以被修飾變量的傳遞與語(yǔ)言相似調(diào)用對(duì)象方法時(shí)要傳遞參數(shù)。內(nèi)部類(lèi)內(nèi)部類(lèi)是所在類(lèi)的成員。大體上相當(dāng)于其他語(yǔ)言的匿名函數(shù)或函數(shù)指針。 1. 變量及其傳遞 基本類(lèi)型變量(primitive type)和引用類(lèi)型變量(reference type) 基本類(lèi)型(primitive type):其值直接存于變量中。在這里 引用型(refer...
摘要:即使抽象類(lèi)里不包含抽象方法,這個(gè)抽象類(lèi)也不能創(chuàng)建實(shí)例抽象類(lèi)可以包含成員變量方法普通方法和抽象方法構(gòu)造器初始化塊內(nèi)部類(lèi)接口枚舉種成分。 抽象類(lèi) 當(dāng)編寫(xiě)一個(gè)類(lèi)時(shí),常常會(huì)為該類(lèi)定義一些方法,這些方法用以描述該類(lèi)的行為方式,那么這些方法都有具體的方法體。但在某些情況下,某個(gè)父類(lèi)只是知道其子類(lèi)應(yīng)該包含怎樣的方法,但無(wú)法準(zhǔn)確地知道這些子類(lèi)如何實(shí)現(xiàn)這些方法。使用抽象方法即可滿足該要求:抽象方法是只有...
閱讀 3287·2021-11-08 13:18
閱讀 1419·2021-10-09 09:57
閱讀 1263·2021-09-22 15:33
閱讀 4162·2021-08-17 10:12
閱讀 5174·2021-08-16 11:02
閱讀 2752·2019-08-30 10:56
閱讀 1042·2019-08-29 18:31
閱讀 3317·2019-08-29 16:30