1.形式參數
參數類型
基本類型,如:int float double
引用類型:
類:這一個時候參數需要的是一個該類的對象。
抽象類:需要的是該抽象的類的子類對象。
接口:需要的是該接口的實作類對象。
2.傳回值類型
基本類型:就是一般的基本類型(省略)
引用類型:
類:需要傳回的是該類對象。
抽象類:傳回的是該抽象類的子類對象。
接口:傳回的是該接口的實作類的對象。
3.鍊式程式設計
所謂的鍊式程式設計實質就是對象調用方法,然後反複的調用該對象的方法,是以鍊式程式設計每次調用傳回的是一個對象。
new Student().Study().Test();
4.包(package)
(1).什麼是包?
所謂的包就是一個檔案夾,那麼包其實就是用于把不同類型的java檔案放置在不同的檔案夾下面。
(2).包的定義以及相關注意事項
A:定義包需要使用關鍵字package.
B:多級包中間需要使用"."來分隔開。
C:在命名包的時候命名隻能夠使用小寫字母。
(3).注意事項
關鍵字package必須放置在java檔案的第一個位置。
關鍵字package在一個java檔案中隻能夠有一個。
5.import關鍵字
(1).import關鍵字
該關鍵字主要是為了解決外部程式之中的互相引用問題。java就給我們提供了使用import關鍵字,用于通路其他包下面的檔案。
(2).如何導包
格式:import 包名;
導入包下面所有的檔案:import 包名.*;/
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(num);
System.out.println(this.num);
//System.out.println(new Outer().num);
System.out.println(Outer.this.num);
}
}
}
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
(7).局部内部類
局部内部類
A:可以直接通路外部類的成員
B:在局部位置,可以建立内部類對象,通過對象調用内部類方法,來使用局部内部類功能
面試題:
局部内部類通路局部變量的注意事項?
A:局部内部類通路局部變量必須用final修飾(加載順序以及消失順序)
B:為什麼呢?
局部變量是随着方法的調用而調用,随着調用完畢而消失。
而堆記憶體的内容并不會立即消失。是以,我們加final修飾。
加入final修飾後,這個變量就成了常量。既然是常量。你消失了。
我在記憶體中存儲的是資料20,是以,我還是有資料在使用。
代碼展現:
class Outer {
private int num = 10;
public void method() {
int num2 = 20;
final int num2 = 20;
class Inner {
public void show() {
System.out.println(num);
//從内部類中通路本地變量num2; 需要被聲明為最終類型
System.out.println(num2);//20
}
}
//System.out.println(num2);
Inner i = new Inner();
i.show();
}
}
class InnerClassDemo5 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
(8).匿名内部類[*****]
A:匿名内部類
就是内部類的簡化寫法。
B:前提:存在一個類或者接口
這裡的類可以是具體類也可以是抽象類。
C:格式:
new 類名或者接口名(){
重寫方法;
}
D:本質是什麼呢?
是一個繼承了該類或者實作了該接口的子類匿名對象。
代碼展現[****]:
//定義前提,定義一個接口
interface Inter {
public abstract void show();
}
//定義一個類
class Outer {
public void method() {
//這一個整體就是一個對象而已
new Inter() {
public void show() {
System.out.println("show");
}
};
}
//測試類
class InnerClassDemo6 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
//輸出結果為:空,因為盡管有輸出語句,但是并沒有調用這一個方法。
那麼如何調用裡面的show()方法讓其輸出?
new Inter() {
public void show() {
System.out.println("show");
}
}.show();
代碼展現2[*****]繼承或者是實作的類有多個方法的時候如何處理
//接口
interface Inter {
public abstract void show();
public abstract void show2();
}
class Outer {
public void method() {
//如果我是很多個方法,就很麻煩了
//那麼,我們有沒有改進的方案呢?把子類對象指派給繼承的接口,然後建立的對象在去調用方法即可
Inter i = new Inter() { //多态
public void show() {
System.out.println("show");
}
public void show2() {
System.out.println("show2");
}
};
i.show();
i.show2();
}
}
class InnerClassDemo6 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
(9).匿名内部類在開發中的使用
代碼展現:
interface Person {
public abstract void study();
}
class PersonDemo {
//接口名作為形式參數
//其實這裡需要的不是接口,而是該接口的實作類的對象
public void method(Person p) {
p.study();
}
}
//使用方法1
//實作類
class Student implements Person {
public void study() {
System.out.println("好好學習,天天向上");
}
}
class InnerClassTest2 {
public static void main(String[] args) {
//測試
PersonDemo pd = new PersonDemo();
Person p = new Student();
pd.method(p);
System.out.println("--------------------");
//使用方法2
//匿名内部類在開發中的使用
//匿名内部類的本質是繼承類或者實作了接口的子類匿名對象
pd.method(new Person(){
public void study() {
System.out.println("好好學習,天天向上");
}
});
}
}