一、四種訪問級別的訪問範圍
訪問級別 |
訪問修飾符 |
同類 |
同包 |
子類 |
不同的包 |
公開 |
public |
|
|
|
|
受保護 |
protected |
|
|
|
|
默認 |
沒有訪問修飾符 |
|
|
|
|
私有的 |
private |
|
|
|
|
二、使用abstract修飾符需要遵守的語法規則
1、抽象類中可以沒有抽象方法,但是包含抽象方法的類必須定義爲抽象類,即用abstract修飾;
2、抽象類跟抽象方法不能被final修飾符修飾;
3、抽象類中可以有非抽象方法,因爲繼承抽象類的子類必須重寫父類中所有的抽象方法,因此抽象類中不能有抽象構造方法和抽象靜態方法;
4、抽象方法沒有方法體;
5、如果子類沒有重寫父類中的抽象方法,則子類也必須定義爲abstract。
package wbb.java.modifies;
/**
* Created with IntelliJ IDEA.
* User: wbb
* Date: 14-7-17
* Time: 下午2:52
* To change this template use File | Settings | File Templates.
*/
public abstract class AbstractDemo {
public abstract void xxx();
}
abstract class Test extends AbstractDemo {
// public void xxx(){} //用abstract修飾子類,或者重寫父類中的抽象方法
}
作用:實現多態。
三、修飾符static
static可以用來修飾成員變量,成員方法,代碼塊。
1、被static修飾的成員變量和成員方法,可以直接用類名.靜態變量或靜態方法直接調用;
2、被static修飾的代碼塊稱爲靜態代碼塊,當java虛擬機加載類時,就會執行該代碼塊。
注:靜態變量與實例變量的區別是:java虛擬機只會爲靜態變量分配一次內存,而沒創建一個實例變量虛擬機就會爲其分配一次內存。其作用是能被類的所有實例共享,可作爲勢力之間進行交流的共享數據。例如我們在項目中經常會執行同樣的SQL語句,這樣每次都要寫一次sql語句未免顯得過於繁瑣,我們可以專門寫個類用於存放哪些常用的SQL語句,裏面只定義各種需要重複執行的SQL語句的靜態變量。
package wbb.java.modifies;
/**
* Created with IntelliJ IDEA.
* User: wbb
* Date: 14-7-17
* Time: 下午3:45
* To change this template use File | Settings | File Templates.
*/
public class StaticDemo {
public static final String sqlStr = "SELECT * FROM DUAL";
}
class A extends StaticDemo{
StaticDemo a = new StaticDemo();
public static void main(String[] args) {
System.out.println(StaticDemo.sqlStr);
}
}
一般情況下,如果有些代碼必須在項目啓動的時候就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行的;需要在項目啓動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的.靜態代碼塊的作用可用於初始化類,給類的成員變量賦值等等。
package wbb.java.modifies;
/**
* Created with IntelliJ IDEA.
* User: wbb
* Date: 14-7-17
* Time: 下午4:04
* To change this template use File | Settings | File Templates.
*/
public class StaticProgram {
static {
System.out.println("靜態代碼塊執行");
}
public static void main(String[] args) {
//運行結果:輸出“靜態代碼塊執行”
}
}
四、final修飾符
final意爲“不可改變的”,可以修飾非抽象類、非抽象成員方法和變量。
1、被final修飾的類不能被繼承,沒有子類;
2、被final修飾的方法不能被子類的方法覆蓋;
3、用final修飾的變量表示常量,只能被賦值一次;
package wbb.java.modifies;
/**
* Created with IntelliJ IDEA.
* User: wbb
* Date: 14-7-17
* Time: 下午4:10
* To change this template use File | Settings | File Templates.
*/
public final class FinalDemo {
private static final int num = 1;
public static void main(String[] args) {
// num ++; 被final修飾的變量不能改變
}
}
//class TestFinalClass extends FinalDemo {} 被final修飾的類不能被繼承
class TestFinalFun {
public final void finalFun() { }
}
class TestFinalFun2 extends TestFinalFun {
// public void finalFun() { } 被final修飾的方法不能被重寫
}