1. 程式人生 > 實用技巧 >2020/7/8 JAVA總結之:匿名物件/內部類/包的宣告與訪問/訪問修飾符/程式碼塊

2020/7/8 JAVA總結之:匿名物件/內部類/包的宣告與訪問/訪問修飾符/程式碼塊

一、匿名物件

    1、匿名物件的概念:

        匿名物件是指建立物件時,只有建立物件的語句,卻沒有把物件地址值賦值給某個變數。

        如:已經存在的類:

public class Person{
    public void eat(){
        System.out.println();
}
}

//建立一個普通物件
Person p = new Person();

//建立一個匿名物件
new Person();

    2、匿名物件的特點:      

//1.建立匿名物件直接使用,沒有變數名。
new Person().eat()  //eat方法被一個沒有名字的Person物件呼叫了。

//2.匿名物件在沒有指定其引用變數時,只能使用一次。 new Person().eat(); 建立一個匿名物件,呼叫eat方法 new Person().eat(); 想再次呼叫eat方法,重新建立了一個匿名物件 //3.匿名物件可以作為方法接收的引數、方法返回值使用 class Demo { public static Person getPerson(){ //普通方式 //Person p = new Person(); //return p; //匿名物件作為方法返回值 return new
Person(); } public static void method(Person p){} } class Test { public static void main(String[] args) { //呼叫getPerson方法,得到一個Person物件 Person person = Demo.getPerson(); //呼叫method方法 Demo.method(person); //匿名物件作為方法接收的引數 Demo.method(new
Person()); } }

二、內部類

    1、什麼是內部類:

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

    2、內部類的分類:內部類分為成員內部類與區域性內部類。

        成員內部類:成員內部類,定義在外部類中的成員位置。與類中的成員變數相似,可通過外部類物件進行訪問。

        

//定義格式
class 外部類 { 
    修飾符 class 內部類 {
        //其他程式碼
}
}
//訪問方式
外部類名.內部類名 變數名 = new 外部類名().new 內部類名();

        區域性內部類:定義在外部類方法中的區域性位置。與訪問方法中的區域性變數相似,可通過呼叫方法進行訪問

        

//定義格式
class 外部類 { 
    修飾符 返回值型別 方法名(引數) {
class 內部類 {
//其他程式碼
}
}
}
//訪問方式
在外部類方法中,建立內部類物件,進行訪問

    3、匿名內部類

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

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

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

        定義後即刻建立剛剛定義的這個子類的物件

      定義匿名內部類的作用與格式:

        作用匿名內部類是建立某個型別子類物件的快捷方式。

      

//格式:
new 父類或介面(){
    //進行方法重寫
};

三、包的宣告與訪問

    1、包的概念:

        java的包,其實就是我們電腦系統中的資料夾,包裡存放的是類檔案。

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

        類中宣告的包必須與實際class檔案所在的資料夾情況相一致,即類宣告在a包下,則生成的.class檔案必須在a資料夾下,否則,程式執行時會找不到類。

    2、包的宣告格式:

        類中包的宣告格式:

          package 包名.包名.包名…;

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

         注意:宣告包的語句,必須寫在程式有效程式碼的第一行(註釋不算)

        程式碼演示:

package com.oracle; //包的宣告,必須在有效程式碼的第一行

import java.util.Scanner;
import java.util.Random;

public class Demo {}

    3、包的訪問

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

      

包名.包名….類名
如: java.util.Scanner
     java.util.Random
    com.oracle.Demo
帶有包的類,建立物件格式:包名.類名 變數名 = new包名.類名();
     com.oracle.Demo d = new com.oracle.Demo();

    4、import導包

        可以通過導包的方式使用該類,可以避免使用全類名編寫(即,包類.類名)。

        導包的格式:import 包名.類名;

四、訪問修飾符

    

public

protected

default

private

同一類中

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

不同包的子類

不同包中的無關類

    

                l要想僅能在本類中訪問使用private修飾;

                l要想本包中的類都可以訪問不加修飾符即可;

                l要想本包中的類與其他包中的子類可以訪問使用protected修飾

                l要想所有包中的所有類都可以訪問使用public修飾。

                l注意:如果類用public修飾,則類名必須與檔名相同。一個檔案中只能有一個public修飾的類。

五、程式碼塊

    1、區域性程式碼塊:區域性程式碼塊是定義在方法或語句中

      特點:

        以”{}”劃定的程式碼區域,此時只需要關注作用域的不同即可

        方法和類都是以程式碼塊的方式劃定邊界的

    

class Demo{
    public static void main(String[] args)    {
        {
                  int x = 1;
                 System.out.println("普通程式碼塊" + x);
        }
        int y = 99;
        System.out.println("程式碼塊之外" + y);
    }
}
/*結果:
普通程式碼塊1
程式碼塊之外99*/

    2、構造程式碼塊:構造程式碼塊是定義在類中成員位置的程式碼塊

      特點:

        優先於構造方法執行,構造程式碼塊用於執行所有物件均需要的初始化動作

        每建立一個物件均會執行一次構造程式碼塊。

    

public class Person {
    private String name;
    private int age;
    
     //構造程式碼塊
    {
        System.out.println("構造程式碼塊執行了");
    }
    Person(){
        System.out.println("Person無引數的建構函式執行");
    }
    Person(int age){
        this.age = age;
        System.out.println("Person(age)引數的建構函式執行");
    }
}
class PersonDemo{
    public static void main(String[] args)    {
        Person p = new Person();
        Person p1 = new Person(23);
    }
}

    3、靜態程式碼塊:靜態程式碼塊是定義在成員位置,使用static修飾的程式碼塊。

     特點:

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

        該類不管建立多少物件,靜態程式碼塊只執行一次。

        可用於給靜態變數賦值,用來給類進行初始化。

    

public class Person {
    private String name;
    private int age;
     //靜態程式碼塊
    static{
        System.out.println("靜態程式碼塊執行了");
    }
}