static關(guān)鍵字
靜態(tài)的修飾符
static修飾內(nèi)容
可以修飾的:
- 成員變量
- 普通方法
- 內(nèi)部類
不可修飾的:
- 局部變量
- 構(gòu)造方法
- 外部類
//1.有static修飾的字段訪問
類名.屬性;
//2.沒有static修飾的字段訪問
字段所在的類的對(duì)象:對(duì)象名.屬性;
//3.有static修飾的方法訪問
類名.方法名();
//4.沒有static修飾的方法訪問
方法所在的類的對(duì)象:對(duì)象名.方法名();
static修飾符的作用
- 有static修飾的變量和方法被jvm優(yōu)先加載
- 有static修飾的成員變量可以被所有成員訪問
- 靜態(tài)上下文不予許訪問非靜態(tài)的變量及方法,非靜態(tài)上下文可以訪問靜態(tài)上下文:
變量分類
成員變量又可分為類變量和實(shí)例變量
類變量
創(chuàng)建在類中,有static修飾
生命周期
- 類被加載==>類被卸載
實(shí)例變量
創(chuàng)建在類中,無static修飾
生命周期
- 創(chuàng)建對(duì)象==>對(duì)象被銷毀
局部變量
創(chuàng)建在方法(形參),代碼塊中,無static修飾
生命周期
- 方法被調(diào)用==>調(diào)用完成
引用類型轉(zhuǎn)換
在引用數(shù)據(jù)類型中:父類是較大的數(shù)據(jù)類型,子類是較小的數(shù)據(jù)類型
子類類型轉(zhuǎn)父類類型:小轉(zhuǎn)大
Cat cat = new TomCat()
double d = 1;
父類類型轉(zhuǎn)子類類型:大轉(zhuǎn)小
TomCat tc =(TomCat)cat;
實(shí)例分析
-
在轉(zhuǎn)換之前要進(jìn)行類型判斷
獲取c的運(yùn)行是類型
c.getClass().getName();-
運(yùn)用instanceof
a instanceof A 判斷對(duì)象是否屬于A類型 計(jì)算結(jié)果是布爾類型
class Test{//引用類型轉(zhuǎn)換
public static void main(String[] args){
System.out.println("hello");
Dog dog1=new Husky();
Dog dog2=new TianYuanDog();
//erha.run();//報(bào)錯(cuò),Dog中沒有run()方法,多態(tài)中:編譯看左邊,運(yùn)行看右邊,有static看左邊
test(dog1);
test(dog2);
}
public static void test(Dog dog){
//判斷dog是否是Husky類的實(shí)例
if (dog instanceof Husky){
//轉(zhuǎn)換
Husky erha=(Husky) dog;
erha.run();
}
else{
System.out.println("你不是我的同類");
}
}
}
class Dog{
}
class TianYuanDog extends Dog{
void run(){
System.out.println("跑的飛起");
}
}
class Husky extends Dog{
void run(){
System.out.println("跑的飛起");
}
}
final
修飾符使用范圍
- final可以修飾: 系統(tǒng)變量,成員變量,普通方法,內(nèi)部類.外部類
- final不可以修飾: 構(gòu)造方法
修飾的效果
final修飾的類: 不可被繼承,拓展
class Test{//final修飾符
public static void main(String[] args){
System.out.println("hello");
}
}
final class A{}
class B extends A{//Test4.java:8: 錯(cuò)誤: 無法從最終A進(jìn)行繼承
}
final修飾的方法: 不可被覆寫
class Test{//final修飾符
public static void main(String[] args){
System.out.println("hello");
}
}
class A{
final void eat(){}
}
class B extends A{
void eat(){//Test4.java:11: 錯(cuò)誤: B中的eat()無法覆蓋A中的eat()
System.out.println("嘿嘿");
}
}
final修飾的變量: 一旦賦值不可被更改(被final修飾的變量沒有自動(dòng)默認(rèn)值,需要手動(dòng)賦值)
class Test{//final修飾符
//final static int i;//沒有自動(dòng)默認(rèn)值
final static int i=5;
public static void main(String[] args){
final int j=1;
//j=5;//final修飾的變量一旦賦值不可被更改
System.out.println(i);
System.out.println(j);
}
}