java面向物件,匿名內部類,包,訪問修飾符,程式碼塊
阿新 • • 發佈:2018-12-05
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("靜態程式碼塊執行了"); } }