Java類成員訪問級別
類可以是public
或default
(或包級別)。在本教程中主要介紹 public
,private
,protected
這幾個訪問級別修辭符的使用。
類成員的訪問級別確定程序的哪個區域可以訪問它。 以下四個訪問級別修飾符之一可以用於類成員:
- 公開(
public
) - 私有(
private
) - 保護(
protected
) - 默認或包級別訪問
前三種類型的訪問級別使用以下三個關鍵字之一來指定:public
,private
或protected
。第四種類型稱爲默認訪問級別(或包級別),並且通過不使用訪問修飾符來指定。
如果類成員使用public
關鍵字聲明爲公開,如果類本身可訪問的話,則可以從Java代碼中的任何位置訪問它。
如果使用private
關鍵字將類成員聲明爲私有,則只能在聲明類的主體中訪問,而在其他任何地方都不能訪問。
如果使用protected
關鍵字將類成員聲明爲保護,則可以從同一包中的類或該類的子類來訪問此類成員,即使子類位於不同的包中也是可以訪問的。
如果不爲類成員使用任何訪問級別修辭符,則它具有包級別訪問權限。 具有包級別訪問權限的類成員可以從同一個包中訪問。
類成員的訪問級別可以從最嚴格到最不嚴格,即:private
,package-level
,protected
和public
。
示例
以下代碼顯示如何使用不同的訪問級別:
public class Main {
private int num1; // private access level
int num2; // package-level access
protected int num3; // protected access level
public int num4; // public access level
public static int count = 1; // public access level
// private access level
private void m1() {
}
// package-level access
void m2() {
}
// protected access level
protected void m3() {
}
// public access level
public void m4() {
}
// private access level
private static void doSometing() {
}
}
注意:可以爲類的實例和靜態成員指定訪問級別。
它是一個約定,指定訪問級別修改器作爲聲明中的第一個修飾符。要聲明靜態公共字段,請首先使用public
修飾符,然後使用static
修飾符作爲約定。必須要考慮類及其成員的訪問級別,以確定類成員是否可訪問。
以下代碼顯示瞭如何在創建Java bean時使用訪問級別修飾符。
class Account {
private double balance;
public double getBalance() {
return this.balance;
}
public int save(double amount) {
if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) {
System.out.println("Invalid credit amount: " + amount);
return -1;
}
this.balance = this.balance + amount;
return 1;
}
public int spend(double amount) {
if (amount < 0.0 || Double.isNaN(amount) || Double.isInfinite(amount)) {
System.out.println("Invalid debit amount: " + amount);
return -1;
}
if (this.balance < amount) {
System.out.println("Insufficient fund. Debit attempted: " + amount);
return -1;
}
this.balance = this.balance - amount;
return 1;
}
}
public class Main {
public static void main(String[] args) {
Account ac = new Account();
double balance = ac.getBalance();
System.out.println("Balance = " + balance);
ac.save(2);
ac.spend(1);
balance = ac.getBalance();
System.out.println("Balance = " + balance);
// Attempt to credit and debit invalid amounts
ac.save(-2);
ac.spend(Double.POSITIVE_INFINITY);
balance = ac.getBalance();
System.out.println("Balance = " + balance);
// Attempt to debit more than the balance
ac.spend(200.00);
balance = ac.getBalance();
System.out.println("Balance = " + balance);
}
}
上面的代碼生成以下結果。
Balance = 0.0
Balance = 1.0
Invalid credit amount: -2.0
Invalid debit amount: Infinity
Balance = 1.0
Insufficient fund. Debit attempted: 200.0
Balance = 1.0