Java學習(匿名對象、內部類、包、import、代碼塊)
一、匿名對象
概念:匿名對象是指在創建對象時,只有創建的語句,卻沒有把對象地址值賦給某個變量。
特點:
(1)匿名對象直接使用,沒有變量名。當做形參使用。
new Person().name="張三";
(2)匿名對象只能調用一次方法,再次調用相當於又創建了一個新的匿名對象
new Person().setName("小明"); System.out.println(new Person().getName()); //輸出為空,因為又創建了一個新的匿名對象,跟上一個並沒有關系
(3)作為返回值使用傳遞
public Person getPerson(){//Person p=new Person(); //這一步驟省略直接用匿名對象來做返回值 //return p; return new Person(); }
實例:
package com.oracel.demo03; //匿名對象 自定義類 public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) {this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean compare(Person p){ return this.age==p.age; } //匿名對象作為返回值來傳遞 public Person getPerson(){ //Person p=new Person();//return p; return new Person(); } }
package com.oracel.demo03; //測試類 public class Test { public static void main(String[] args){ //有名對象 // Person p=new Person(); // p.setName("張三"); // p.getName(); // //匿名對象(只能調用一次方法) new:創建 Person():對象 合起來就是創建對象 // new Person().setName("阿萊"); // System.out.println(new Person().getName()); // //匿名對象當做形參傳遞 // p.compare(new Person()); //匿名對象的三個作用:1.調用一次方法2.當做形參傳遞3.作為返回值來傳遞 } }
二、內部類
概念:將類寫在其他類的內部,可以寫在其他類的成員位置或局部位置,稱為內部類,而“其他類”則稱為外部類。
什麽時候會使用?
在描述一個事物時,若事物內部還包含有其他可能包含的事物,比如在描述汽車時,汽車內部還包含著發動機,則發動機就可以用內部類來描述。
格式:
class Car{ //car 就是外部類 class FaDongJi{ //fadongji 就是內部類 } }
內部類的分類:
內部類還可以分為成員內部類和局部內部類。成員內部類就是在成員位置的內部類,而局部內部類則是在局部方法內的內部類。
定義內部類時,就是一個正常定義類的過程,同樣包含各種修飾符 、繼承與實現關系等。在內部類中可以直接訪問外部類的所有成員。
2.1成員內部類
定義格式:
class 外部類名稱{ 修飾詞 class 內部類名稱{ } }
訪問方式:
外部類名稱.內部類名稱 變量名稱=new 外部類名稱().new 內部類名稱();
Car.FaDongJi cf=new Car().new FaDongJi();
2.2局部內部類
定義格式:
class 外部類名稱{ public void method(){ //外部類的局部方法 class 局部內部類名稱{ //局部內部類 } } }
訪問方式:在外部類方法中創建局部內部類的對象,進行訪問。
package com.oracel.demo03; public class Jeep { public void show(){ //外部類的方法 //局部內部類 class gulu{ public void method(){ System.out.println("這是軲轆的方法"); } } //局部類訪問方法:在外部類方法中,創建內部類對象,進行訪問 gulu g=new gulu(); //內部類的對象 g.method(); } }
//在main方法中,創建外部類對象,調用局部方法,就可以訪問局部內部類了 public class demo01{ public static void main(String[] args){ Jeep j=new Jeep(); j.gulu(); } }
內部類的實際應用---匿名內部類
概念:最常用到的內部類就是匿名內部類,它是局部內部類的一種。
定義的匿名內部類有兩種含義:
(1)臨時定義某一指定類型的子類
(2)定義後即刻創建剛剛定義的這個子類的對象
作用與格式:
作用:匿名內部類是創建某個類型子類對象的快捷方式。
格式:
new 父類或接口(){ //進行方法重寫 };
練習題:編寫一個抽象類Phone,兩個抽象方法,call() sendMessage()
兩個子類OldPhone 和 NewPhone , 其中NewPhone想添加一個玩遊戲的功能.
請根據接口的思想實現,並用匿名內部類的方式調用玩遊戲的功能.
//父類 package com.oracel.homework; public abstract class Phone { public abstract void call(); public abstract void sendMessage(); }
//舊手機子類 package com.oracel.homework; public class OldPhone extends Phone{ public void call() { System.out.println("舊手機打電話"); } public void sendMessage() { System.out.println("舊手機發短信"); } }
//接口:玩遊戲 package com.oracel.homework; public interface PlayGame{ public abstract void playgames(); }
//新手機子類 package com.oracel.homework; public class NewPhone extends Phone implements PlayGame{ public void call() { System.out.println("新手機打電話"); } public void sendMessage() { System.out.println("新手機發短信"); } public void playgames(){ } }
//測試類
package com.oracel.homework; public class Test { public static void main(String[] args) { new OldPhone().call(); new OldPhone().sendMessage(); new NewPhone().call(); new NewPhone().sendMessage(); //用匿名內部類 重寫方法 輸出方法 new NewPhone(){ public void playgames(){ System.out.println("新手機玩遊戲"); } }.playgames(); } }
三、包的聲明和格式
概念:java的包,其實就是我們電腦系統中的文件夾,包裏存放的是類文件。
當類文件很多的時候,通常我們會采用多個包進行存放管理他們,這種方式稱為分包管理。
在項目中,我們將相同功能的類放到一個包中,方便管理。並且日常項目的分工也是以包作為邊界。
類中聲明的包必須與實際class文件所在的文件夾情況相一致,即類聲明在a包下,則生成的.class文件必須在a文件夾下,否則,程序運行時會找不到類。
聲明格式:
通常使用公司網址反寫,可以有多層包,包名采用全部小寫字母,多層包之間用”.”連接
package 包名.包名.包名....;
如:Oracle.com包名反寫為com.oracle
註意:包的聲明,必須在有效代碼的第一行!!!!!!!!
包的訪問:
在訪問類時,為了能夠找到該類,必須使用含有包名的類全名(包名.類名)。
//包名.包名….類名 java.util.Scanner java.util.Random com.oracle.Demo //帶有包的類,創建對象格式:包名.類名 變量名 = new包名.類名(); com.oracle.Demo d = new com.oracle.Demo();
前提:包的訪問與訪問權限密切相關,這裏以一般情況來說,即類用public修飾的情況。
類的簡化訪問:
當我們要使用一個類時,這個類與當前程序在同一個包中(即同一個文件夾中),或者這個類是java.lang包中的類時通常可以省略掉包名,直接使用該類。
Person p=new Person();
當我們要使用的類,與當前程序不在同一個包中(即不同文件夾中),要訪問的類必須用public修飾才可訪問。
package com.oracle02; public class Person {}
四、import導包
概念: 我們每次使用類時,都需要寫很長的包名。很麻煩,我們可以通過import導包的方式來簡化。
可以通過導包的方式使用該類,可以避免使用全類名編寫(即,包類.類名)。
格式:
import 包名.類名;
註意: import導包代碼書寫的位置:在聲明包package後,定義所有類class前,使用導包import包名.包名.類名;
五、訪問修飾符
Java中提供了四中訪問權限修飾符:
public protected default private
下圖為訪問能力:
總結:
(1) 要想僅能在本類中訪問使用private修飾;
(2)要想本包中的類都可以訪問不加修飾符即可
(3)要想本包中的類與其他包中的子類可以訪問使用protected修飾
(4)要想所有包中的所有類都可以訪問使用public修飾
註意:如果類用public修飾,則類名必須與文件名相同。一個文件中只能有一個public修飾的類。
六、代碼塊
1.局部代碼塊
定義:局部代碼塊是定義在方法或語句中
特點:
(1).以”{}”劃定的代碼區域,此時只需要關註作用域的不同即可
(2).方法和類都是以代碼塊的方式劃定邊界的
2.構造方法塊
構造代碼塊是定義在類中成員位置的代碼塊
特點:
(1).優先於構造方法執行,構造代碼塊用於執行所有對象均需要的初始化動作
(2).每創建一個對象均會執行一次構造代碼塊
3.靜態代碼塊
定義:靜態代碼塊是定義在成員位置,使用static修飾的代碼塊。
特點:
(1). 它優先於主方法執行、優先於構造代碼塊執行,當以任意形式第一次使用到該類時執行。
(2). 該類第一次創建對象時執行,該類不管創建多少對象,靜態代碼塊只執行一次。
(3).可用於給靜態變量賦值,用來給類進行初始化
練習題:
package com.oracel.demo03; //匿名對象 自定義類 public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public boolean compare(Person p){ return this.age==p.age; } //匿名對象作為返回值來傳遞 public Person getPerson(){ //Person p=new Person(); //return p; return new Person(); } }
Java學習(匿名對象、內部類、包、import、代碼塊)