1. 程式人生 > 實用技巧 >JAVA——修飾符

JAVA——修飾符

Java語言提供了很多修飾符,主要分為以下兩類:

訪問修飾符

非訪問修飾符

修飾符用來定義類、方法或者變數,通常放在語句的最前端

例如:

Java中,可以使用訪問控制符來保護對類、變數、方法和構造方法的訪問。Java 支援 4 種不同的訪問許可權。

  • default(即預設,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用物件:類、介面、變數、方法。

  • private: 在同一類內可見。使用物件:變數、方法。注意:不能修飾類(外部類)

  • public: 對所有類可見。使用物件:類、介面、變數、方法

  • protected: 對同一包內的類和所有子類可見。使用物件:變數、方法。注意:不能修飾類(外部類)

例如:
package Test;

public class Test_1 {
public static void main(String[] args) {
//public 對所有類可見。使用物件:類、介面、變數、方法
}
private boolean myFlag;//private : 在同一類內可見。使用物件:變數、方法。 注意:不能修飾類(外部類)
static final double weeks = 9.5;
/*
*一、 static 修飾符
靜態變數:
static 關鍵字用來宣告獨立於物件的靜態變數,無論一個類例項化多少物件,它的靜態變數只有一份拷貝。 靜態變數也被稱為類變數。區域性變數不能被宣告為 static 變數。
靜態方法:
static 關鍵字用來宣告獨立於物件的靜態方法。靜態方法不能使用類的非靜態變數。靜態方法從引數列表得到資料,然後計算這些資料。
* public class InstanceCounter {
private static int numInstances = 0;
protected static int getCount() {
return numInstances;
}

private static void addInstance() {
numInstances++;
}

InstanceCounter() {
InstanceCounter.addInstance();
}

public static void main(String[] arguments) {
System.out.println("Starting with " +
InstanceCounter.getCount() + " instances");
for (int i = 0; i < 500; ++i){
new InstanceCounter();
}
System.out.println("Created " +
InstanceCounter.getCount() + " instances");
}
}
*
* 二、final修飾符
* final 變數:
final 表示"最後的、最終的"含義,變數一旦賦值後,不能被重新賦值。被 final 修飾的例項變數必須顯式指定初始值。
final 修飾符通常和 static 修飾符一起使用來建立類常量。
* final 方法
父類中的 final 方法可以被子類繼承,但是不能被子類重寫。
宣告 final 方法的主要目的是防止該方法的內容被修改。*/
protected static final int BOXWIDTH = 42;//protected : 對同一包內的類和所有子類可見。使用物件:變數、方法。 注意:不能修飾類(外部類)
/* protected 需要從以下兩個點來分析說明:

子類與基類在同一包中:被宣告為 protected 的變數、方法和構造器能被同一個包中的任何其他類訪問;

子類與基類不在同一包中:那麼在子類中,子類例項可以訪問其從基類繼承而來的 protected 方法,而不能訪問基類例項的protected方法。

protected 可以修飾資料成員,構造方法,方法成員,不能修飾類(內部類除外)。

介面及介面的成員變數和成員方法不能宣告為 protected。
*/
//default (即預設,什麼也不寫): 在同一包內可見,不使用任何修飾符。使用物件:類、介面、變數、方法。
abstract class Caravan{
private double price;
private String model;
private String year;
public abstract void goFast(); //抽象方法
public abstract void changeColor();
}

/*abstract 修飾符
抽象類:
抽象類不能用來例項化物件,宣告抽象類的唯一目的是為了將來對該類進行擴充。
一個類不能同時被 abstract 和 final 修飾。如果一個類包含抽象方法,那麼該類一定要宣告為抽象類,否則將出現編譯錯誤。
抽象類可以包含抽象方法和非抽象方法。


抽象方法
抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供。
抽象方法不能被宣告成 final 和 static。
任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類。
如果一個類包含若干個抽象方法,那麼該類必須宣告為抽象類。抽象類可以不包含抽象方法。
抽象方法的宣告以分號結尾,例如:public abstract sample();。
*/
}