java的形參,返回值,修飾符,內部類的詳解

一 形式參數問題
數據類型 :四類八種,
整數類型:byte,short ,int ,long 
浮點類型:float, double
字符類型:char
布爾類型:boolean


形式參數:
基本類型:要的是該基本類型的數據值。
引用類型:要的是該引用類型的對象。
A:數組 要的是該數據類型數組的對象。(地址值)
B:類   要的是該類或者其子類的對象。(地址值)
C:抽象類 要的是該抽象類的子類對象。(地址值)
D:接口 要的是該接口的實現類對象。(地址值)
二:返回值問題
返回值:
數據類型 :四類八種,
整數類型:byte,short ,int ,long 
浮點類型:float, double
字符類型:char
布爾類型:boolean
引用類型:類,接口,數組


返回值之基本類型:
基本類型:返回的是該基本類型的數據值。
案例:創建一個加法的方法,返回值就是基本類型的具體的指
public class RetrunDemo {
public static void main(String[] args) {
//調用這個家法
System.out.println(add(1, 2));
}

//創建一個方法,可以做兩個數的加法,並返回兩個數的和
public static int add(int a,int b){
return a+b;
}

返回值之引用類型:
返回值是類名:其實返回的是該類對象或者其子類對象。(地址值)
返回值是抽象類名:要的是該抽象類的子類對象。(地址值)
返回值是接口名:要的是該接口的實現類對象。(地址值)


三:權限修飾符(代碼進行測試)
  權限修飾符:在哪種情況下可以被訪問到。
    本類     同一個包下的類        不同包下的子類           不同包下的無關類
private yes     no         no no
默認(什麼都不寫) yes    yes                 no no
protected yes             yes                  no no
public        yes                 yes                yes  yes


四:常見的內容修飾
1:常見的修飾

類:public
public class HelloWorld {}


成員變量:private
private String name;
private int age;


構造方法:public
public Student() {}
public Student(String name,int age) {}


成員方法:public
public void show() {}
public void eat() {}


2:哪些東西可以修飾哪些東西
        成員變量 構造方法 成員方法
private     Y             Y              Y
默認 Y      Y             Y                    Y
protected     Y               Y                           Y
public Y     Y       Y                Y
static       Y                  Y
final Y      Y                                             Y
abstrac  Y             Y


注意:
四種權限修飾符,只能有一種存在。


class Demo {}


常見的組合:
類:
public class HelloWorld {}
public final class HelloWorld {}
public abstract class HelloWorld {}


成員變量:
private String name;
public final int X = 10;
public static int y = 20;
public static final int X = 30;

成員方法:
public void show(){}
public abstract void show();
public final void show(){}
public static void show() {}
public static final void show() {}
五:內部類
內部類定義:在a類中寫入b類,b類就是內部類


訪問特點:(代碼驗證只要編譯通過說明就是沒有問題的)
A:內部類可以直接訪問外部類的成員,包括私有。
B:外部類要訪問內部類的成員,必須創建對象。


內部類分類:
成員位置:成員內部類
局部位置:局部內部類
成員內部類:
外界如何創建對象
外部類名.內部類名 對象名 = 外部類對象.內部類對象;


class Outer{
//創建一個外部類的私有化的成員變量
private int num = 30;

//創建一個show方法,show方法內部有一個局部內部類
public void show(){
//設置一個show方法的局部變量
final int num2 = 40;//num2被加上final之後,num2變成了常量,其實本質上他就是40
//創建局部內部類
class Inner{
//存在一個function方法
public void function(){
System.out.println(num2);
//System.out.println(40);
//編譯:java -- class
//反編譯:class -- java
/**
* 問題:局部內部類的成員方法訪問局部變量的時候,局部變量爲什麼必須加上final就不報錯了呢??
* 我們的show方法在調用的時候存在於棧內存,當show方法調用完畢之後,他的局部變量num2會隨着show
* 方法調用完畢二消失,但是現在存在一個問題,show方法中的局部對象不會立即從棧內存中直接釋放掉,他還保留着num2,
* 此時就發生了矛盾,局部對象想使用這個num2這個變量,但是他又急着從棧內存中消失。。。,所以我們需要給num2加上final關鍵字
* 是他變爲常量
*/
}
}

//需求:在show方法中調用局部內部類的function方法
//創建局部內部類對象
Inner i = new Inner();
i.function();
}

}




public class InnerClassDemo {
public static void main(String[] args) {
//創建外部類對象
Outer o = new Outer();
o.show();
}


}


成員內部類的修飾:
    A:private 爲了我們訪問數據的安全性
B:static  爲了我們訪問數據的方便性




局部內部類:
        A:可以直接訪問外部類的成員,包括私有
B:在成員方法中創建局部內部類的對象,調用局部內部類的功能
爲什麼:局部內部類訪問局部變量必須加final修飾呢?
因爲局部變量會隨着方法的調用完畢而消失,這個時候,局部對象並沒有立馬從堆內存中消失,還要使用那個變量。
爲了讓數據還能繼續被使用,就用fianl修飾,這樣,在堆內存裏面存儲的其實是一個常量值。
匿名內部類
沒有名字的局部內部類,就是內部類的簡化寫法


前提:
存在一個類或者接口
這裏的類可以是具體類也可以是抽象類。


格式:
new 類名或者接口名() {
重寫方法;
};


本質:

是一個繼承了類或者實現了接口的子類匿名對象。

實例:

interface Inter { void show(); }
class Outer{
public static Inter method() {
return new Inter(){
public void show(){
System.out.println("helloworld");
}
};
}
}
class InnerClassTest {
public static void main(String[] args) {


 Outer.method().show();
 }
}

發佈了28 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章