1. 程式人生 > >Java學習(匿名對象、內部類、包、import、代碼塊)

Java學習(匿名對象、內部類、包、import、代碼塊)

-c 兩種 args 圖片 eth 調用 [] 語句 並且

一、匿名對象

概念:匿名對象是指在創建對象時,只有創建的語句卻沒有把對象地址值賦給某個變量

特點:

(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、代碼塊)