Java 一些常見問題(持續更新)
1. Java 內部類
內部類有四種常見的類型:成員內部類、局部內部類、匿名內部類和靜態內部類。
1.成員內部類:定義為另一個類的裏面如下:
class Circle {
double radius = 0;
public Circle(double radius) {
this.radius = radius;
}
class Point{ //內部類
public void DrawPoint() {
System.out.println( "DrawPoint");
}
}
}
成員內部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態成員)。外部類中如果要訪問成員內部類的成員,必須先創建一個成員內部類的對象,再通過指向這個對象的引用來訪問。
同時需要註意當成員內部類擁有和外部類同名的成員變量或者方法時,會發生隱藏現象,即默認情況下訪問的是成員內部類的成員,如果要訪問外部類的同名成員,需要以下面的形式進行訪問:
外部類.this.成員變量
外部類.this.成員方法
2.局部內部類
局部內部類是定義在一個方法或者一個作用域裏面的類,它和成員內部類的區別在於局部內部類的訪問僅限於方法內或者該作用域內。
class People{
public People() {
}
}
class Man{
public Man(){
}
public People getWoman(){
class Woman extends People{ //局部內部類
int age =0;
}
return new Woman();
}
}
局部內部類就像是方法裏面的一個局部變量一樣,是不能有public、protected、private以及static修飾符的。
3.匿名內部類
大部分匿名內部類用於接口回調。常見於各種監聽響應這些的代碼當中。如下:
scan_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
4.靜態內部類
靜態內部類也是定義在另一個類裏面的類,但是在類的前面多了一個關鍵字static。它是不需要不需要依賴於外部類的,它可以因為在沒有外部類的對象的情況下,可以創建靜態內部類的對象,也因此它不能使用外部類的非static成員變量或者方法。
public class Test {
public static void main(String[] args) {
Outter.Inner inner = new Outter.Inner();
}
}
class Outter {
public Outter() {
}
static class Inner {
public Inner() {
}
}
}
5.為什麽局部內部類和匿名內部類只能訪問局部final變量?
如果局部變量的值在編譯期間就可以確定,則直接在匿名內部裏面創建一個拷貝。如果局部變量的值無法在編譯期間確定,則通過構造器傳參的方式來對拷貝進行初始化賦值,這樣就會出現數據不一致的情況的發生。具體的詳解可以看:https://www.cnblogs.com/dolphin0520/p/3811445.html
2. Java的八種基本數據類型
3. Java訪問控制符
1.private(當前類訪問權限):如果類裏的一個成員(包括成員變量、方法和構造器等)使用private訪問控制符來修飾,則這個成員只能在當前類的內部被訪問。很顯然,這個訪問控制符用於修飾成員變量最合適,使用它來修飾成員變量就可以把成員變量隱藏在該類的內部。
2.protected(子類訪問權限):如果一個成員(包括成員變量、方法和構造器等)使用protected訪問控制符修飾,那麽這個成員既可以被同一個包中的其他類訪問,也可以被不同包中的子類訪問。在通常情況下,如果使用protected來修飾一個方法,通常是希望其子類來重寫這個方法。
3.public(公共訪問權限):這是一個最寬松的訪問控制級別,如果一個成員(包括成員變量、方法和構造器等)或者一個外部類使用public訪問控制符修飾,那麽這個成員或外部類就可以被所有類訪問,不管訪問類和被訪問類是否處於同一個包中,是否具有父子繼承關系。
Java 一些常見問題(持續更新)