1. 程式人生 > >java學習之內部類、包與代碼塊

java學習之內部類、包與代碼塊

會有 文件 class 每次 兩個 包名 內容 def 技術

一 內部類

將類寫在其他類的內部,可以寫在其他類的成員位置和局部位置,這時寫在其他類內部的類就稱為內部類。其他類也稱為外部類。

1 成員內部類

成員內部類,定義在外部類中的成員位置。與類中的成員變量相似,可通過外部類對象進行訪問

定義的格式:

class 外部類 {

修飾符 class 內部類 {

//其他代碼

  }

}

訪問方式:外部類名.內部類名 變量名 = new 外部類名().new 內部類名();

2 局部內部類

局部內部類,定義在外部類方法中的局部位置。與訪問方法中的局部變量相似,可通過調用方法進行訪問

定義格式:

class 外部類 {

修飾符 返回值類型 方法名(參數) {

class 內部類 {

//其他代碼

    }

  }

}

訪問方式:在外部類方法中,創建內部類對象,進行訪問。

3 匿名內部類

最常用到的內部類就是匿名內部類,它是局部內部類的一種。

定義的匿名內部類有兩個含義:

1 臨時定義某一指定類型的子類

2 定義後即刻創建剛剛定義的這個子類的對象

下面是例子來幫助理解:

package com.oracle.Demo01;

public interface Smoking {
    public abstract void smoke();
}
public class Test {
    public static void main(String[] args) {
        
//匿名內部類對象 //new 接口或者抽象類{ //重寫父類的抽象方法 //} new Smoking(){ public void smoke(){ System.out.println("抽煙"); } }.smoke(); } }

當接口中有多個構造方法的時候,必須重寫所有的接口方法,否則會報錯。

二 包的聲明與訪問

1 包的概念

java的包,其實就是我們電腦系統中的文件夾,包裏存放的是類文件。

當類文件很多的時候,通常我們會采用多個包進行存放管理他們,這種方式稱為分包管理。

在項目中,我們將相同功能的類放到一個包中,方便管理。並且日常項目的分工也是以包作為邊界。

類中聲明的包必須與實際class文件所在的文件夾情況相一致,即類聲明在a包下,則生成的.class文件必須在a文件夾下,否則,程序運行時會找不到類。

2 包的聲明格式

通常使用公司網址反寫,可以有多層包,包名采用全部小寫字母,多層包之間用”.”連接

如:Oracle網址oracle.com那麽網址反寫就為com.oracle

註意:聲明包的語句,必須寫在程序有效代碼的第一行(註釋不算)

3 包的訪問

在訪問類時,為了能夠找到該類,必須使用含有包名的類全名(包名.類名)。

如: java.util.Scanner

java.util.Random

com.oracle.Demo

4 導包

我們每次使用類時,都需要寫很長的包名。很麻煩,我們可以通過import導包的方式來簡化。

導包的格式:

import 包名.類名;

三 訪問修飾符

在Java中提供了四種訪問權限,使用不同的訪問權限時,被修飾的內容會有不同的訪問權限,以下表來說明不同權限的訪問能力:

public

protected

Default(默認)

private

同一類中

同一包中(子類與無關類)

不同包的子類

不同包中的無關類

技術分享圖片這是兩個不同包下的四個類

這是A類

技術分享圖片這是B類

技術分享圖片這是C類

技術分享圖片這是D類

技術分享圖片

五 代碼塊

1局部代碼塊

class Demo{
    public static void main(String[] args)    {
        {
                  int x = 1;
                 System.out.println("普通代碼塊" + x);
        }
        int x = 99;
        System.out.println("代碼塊之外" + x);
    }
}

結果:

普通代碼塊1

代碼塊之外99

2 構造代碼塊

構造代碼塊是定義在類中成員位置的代碼塊

l 優先於構造方法執行,構造代碼塊用於執行所有對象均需要的初始化動作

l 每創建一個對象均會執行一次構造代碼塊。

package com.oracle.Demo04;

public class Person {
    public Person(){
        System.out.println("這是構造方法");
    }
    {
        System.out.println("這是構造代碼塊");
    }
}
package com.oracle.Demo04;

public class Test {
    public static void main(String[] args) {
        Person p=new Person();
    }
}

運行結果為:

技術分享圖片

當再創建一個對象p2時

技術分享圖片

運行結果為:技術分享圖片

3 靜態代碼塊

靜態代碼塊是定義在成員位置,使用static修飾的代碼塊。

l 它優先於主方法執行、優先於構造代碼塊執行,當以任意形式第一次使用到該類時執行。

l 該類不管創建多少對象,靜態代碼塊只執行一次。

package com.oracle.Demo04;

public class Person {
    public Person(){
        System.out.println("這是構造方法");
    }
    {
        System.out.println("這是構造代碼塊");
    }
    static{
        System.out.println("這是靜態代碼塊");
    }
}

當創建兩個對象時

技術分享圖片

運行結果為:技術分享圖片

java學習之內部類、包與代碼塊