1. 程式人生 > >java面向物件,匿名內部類,包,訪問修飾符,程式碼塊

java面向物件,匿名內部類,包,訪問修飾符,程式碼塊

1.匿名內部類

new 父類或介面(){
    //進行方法重寫
};
//已經存在的父類:
public abstract class Person{
    public abstract void eat();
}
//定義並建立該父類的子類物件,並用多型的方式賦值給父類引用變數
Person  p = new Person(){
    public void eat() {
        System.out.println(“我吃了”);
}
};
//呼叫eat方法p.eat();

2.包

 

//類中包的宣告格式
package 包名.包名.包名…;

 

①必須在有效程式碼的第一行

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

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

public class Demo {}

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

③包的訪問:帶有包的類,建立物件格式為:包名.類名 變數名 = new包名.類名();

//在訪問類時,為了能夠找到該類,必須使用含有包名的類全名(包名.類名)
包名.包名….類名
如: java.util.Scanner
     java.util.Random
    com.oracle.Demo
帶有包的類,建立物件格式:包名.類名 變數名 
= new包名.類名(); com.oracle.Demo d = new com.oracle.Demo();

④當我們要使用一個類時,這個類與當前程式在同一個包中(即同一個資料夾中),或者這個類是java.lang包中的類時通常可以省略掉包名,直接使用該類。

/*com.oracle包中有兩個類,PersonTest類,與Person類。我們在PersonTest類中,訪問Person類時,由於是同一個包下,訪問時可以省略包名,即直接通過類名訪問 Person*/
//類名 變數名 = new類名();
Person p = new Person();

⑤我們要使用的類,與當前程式不在同一個包中(即不同資料夾中),要訪問的類必須用public修飾才可訪問。

package com.oracle02;
public class Person {}

 import導包程式碼書寫的位置:在宣告包package後,定義所有類class前,使用導包import包名.包名.類名;

 

3.訪問修飾符
①public :所有
②protected :本包,不同包的子類
③default(預設):本包
④private:本類

 

public

protected

default

private

同一類中

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

 

不同包的子類

 

 

不同包中的無關類

 

 

 


4.程式碼塊
①區域性程式碼塊:區域性程式碼塊是定義在方法或語句中,以”{}”劃定的程式碼區域,方法和類都是以程式碼塊的方式劃定邊界的

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

②構造程式碼塊:優先於構造方法執行,每建立一個物件均會執行一次構造程式碼塊

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);
    }
}

③靜態程式碼塊:它優先於主方法執行、優先於構造程式碼塊執行,當以任意形式第一次使用到該類時執行。該類不管建立多少物件,靜態程式碼塊只執行一次。可用於給靜態變數賦值,用來給類進行初始化。

 

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