天天看點

java基礎知識_參數類型與内部類

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("好好學習,天天向上");

}

});

}

}