Java開(kāi)發(fā)必備的三大修飾符
一、abstract 抽象的
抽象類(lèi):被abstract 修飾的類(lèi) 語(yǔ)法: abstract class 類(lèi)名{} 抽象方法 : 被abstract 修飾的方法 定義語(yǔ)法: 訪(fǎng)問(wèn)修飾符 abstract 返回值類(lèi)型 方法名(參數(shù)列表); abstract 訪(fǎng)問(wèn)修飾符 返回值類(lèi)型 方法名(參數(shù)列表); 特點(diǎn): 1.當(dāng)一個(gè)類(lèi)中存在抽象方法 那么這個(gè)類(lèi)也必須是抽象的 2.一個(gè)抽象類(lèi)中可以有抽象方法也可以有非抽象方法 3.如果一個(gè)類(lèi)繼承了抽象類(lèi),這個(gè)類(lèi)如果不想成為抽象類(lèi),那么這個(gè)類(lèi)必須實(shí)現(xiàn)抽象類(lèi)中的所有抽象方法 4.抽象類(lèi)不能創(chuàng)建對(duì)象,但是可以聲明引用,抽象類(lèi)的對(duì)象是存在的,是由子類(lèi)創(chuàng)建子類(lèi)對(duì)象時(shí)調(diào)用父類(lèi)構(gòu)造方法創(chuàng)建的,是無(wú)法自己手動(dòng)去new 抽象類(lèi)的對(duì)象的 抽象類(lèi)的好處:強(qiáng)制使用多態(tài) 案例: public class Demo{ public static void main(String[] args) { } } abstract class Animal{ //抽象方法 public abstract void eat(); public abstract void sleep(); public void m1() { System.out.println("m1"); } } class Dog extends Animal{ public void eat(){ System.out.println("狗吃屎"); } public void sleep(){ System.out.println("狗睡"); } } 案例: public class Demo{ public static void main(String[] args) { Animal a = new Dog(); } } abstract class Animal{ public Animal() { System.out.println("動(dòng)物類(lèi)的構(gòu)造被調(diào)用 創(chuàng)建了 對(duì)象"); } //抽象方法 abstract public void eat(); public abstract void sleep(); public void m1() { System.out.println("m1"); } } class Dog extends Animal{ public void eat(){ System.out.println("狗吃屎"); } public void sleep(){ System.out.println("狗睡"); } }
二、static 靜態(tài)的
static修飾成員變量:類(lèi)變量 靜態(tài)變量 靜態(tài)屬性 定義語(yǔ)法: 訪(fǎng)問(wèn)修飾符 static 數(shù)據(jù)類(lèi)型 變量名 = 變量值; static 訪(fǎng)問(wèn)修飾符 數(shù)據(jù)類(lèi)型 變量名 = 變量值; 訪(fǎng)問(wèn)的方式(特點(diǎn)) 1.類(lèi)變量可以用 類(lèi)名.屬性名 訪(fǎng)問(wèn) 2.可以通過(guò)創(chuàng)建對(duì)象 用引用去訪(fǎng)問(wèn) (不推薦) 案例: public class Demo{ public static void main(String[] args) { Test t1 = new Test(); Test t2 = new Test(); t1.a++; t1.b++; System.out.println(t2.a);//10 System.out.println(t2.b);//21 } } class Test{ int a = 10;//實(shí)例變量 static int b = 20;//類(lèi)變量 } 案例2: public class Demo{ public static void main(String[] args) { /*Test t1 = new Test(); Test t2 = new Test(); t1.a++; t1.b++; System.out.println(t2.a); System.out.println(t2.b);*/ System.out.println(Test.b);//20 } } class Test{ int a = 10;//實(shí)例變量 static int b = 20;//類(lèi)變量 }
static修飾成員方法: 靜態(tài)方法 語(yǔ)法: 訪(fǎng)問(wèn)修飾符 static 返回值類(lèi)型 方法名(形參列表){ 方法的實(shí)現(xiàn); } static 訪(fǎng)問(wèn)修飾符 返回值類(lèi)型 方法名(形參列表){ 方法的實(shí)現(xiàn); } 特點(diǎn): 1.靜態(tài)的方法中 不可以直接訪(fǎng)問(wèn)非靜態(tài)的成員(成員變量 和 成員方法) 2.如果要訪(fǎng)問(wèn)非靜態(tài)的成員 必須創(chuàng)建對(duì)象 通過(guò)引用取訪(fǎng)問(wèn) 3.靜態(tài)方法可以通過(guò) 類(lèi)名.方法名() 訪(fǎng)問(wèn) 也可以通過(guò)引用去訪(fǎng)問(wèn)(不建議) 4.靜態(tài)的方法可以被繼承 靜態(tài)的方法不能被非靜態(tài)的方法所覆蓋 只能被靜態(tài)方法覆蓋 但是沒(méi)有多態(tài)(引用是什么類(lèi)型 調(diào)用的方法就是這個(gè)類(lèi)型中的方法) 5.在靜態(tài)方法中是不可以使用 this 和 super 關(guān)鍵字 因?yàn)?this 和 super都是和對(duì)象有關(guān)的 而靜態(tài)的成員和對(duì)象無(wú)關(guān) 先于對(duì)象存在 案例:關(guān)于靜態(tài)方法 訪(fǎng)問(wèn)非靜態(tài)的成員 public class Demo{ public static void main(String[] args) { /*Test t1 = new Test(); Test t2 = new Test(); t1.a++; t1.b++; System.out.println(t2.a); System.out.println(t2.b);*/ //System.out.println(Test.b);//20 } } class Test{ int a = 10;//實(shí)例變量 static int b = 20;//類(lèi)變量 //靜態(tài)方法 public static void m1() { m2(); //System.out.println(a); } //成員方法 public void m2() { } } 案例:關(guān)于 靜態(tài)方法的使用 和 通過(guò)引用去訪(fǎng)問(wèn)非靜態(tài)的成員 public class Demo{ public static void main(String[] args) { //Test.m1(); Test t = new Test(); t.m1(); } } class Test{ int a = 10;//實(shí)例變量 static int b = 20;//類(lèi)變量 //靜態(tài)方法 public static void m1() { Test t = new Test(); System.out.println(t.a); t.m2(); } //成員方法 public void m2() { System.out.println("m2"); } } 案例:關(guān)于 靜態(tài)方法被繼承 public class Demo{ public static void main(String[] args) { /*Dog d = new Dog(); d.eat();*/ Dog.eat(); } } //定義動(dòng)物類(lèi) class Animal{ public static void eat() { System.out.println("動(dòng)物吃"); } } class Dog extends Animal{ } 案例:關(guān)于 靜態(tài)方法中是否能使用 this 和 super public class Demo{ public static void main(String[] args) { /*Dog d = new Dog(); d.eat();*/ //Dog.eat(); /*Animal a = new Dog(); a.eat();*/ Dog.eat(); } } //定義動(dòng)物類(lèi) class Animal{ String sex = "狗妖"; public static void eat() { System.out.println("動(dòng)物吃"); } } class Dog extends Animal{ /*static String name = "金毛"; static int age = 3;*/ String sex = "母";//成員變量 public static void eat() { String sex = "公"; //局部變量 System.out.println(super.sex); /*System.out.println(name); System.out.println(age); System.out.println("狗吃");*/ } }
初始代碼塊:定義在類(lèi)中 方法外 用于在創(chuàng)建對(duì)象時(shí) 和 成員變量 按照從上向下的順序執(zhí)行初始化的操作 也叫做 動(dòng)態(tài)代碼塊 語(yǔ)法: {初始化代碼塊 } 案例: public class Demo{ public static void main(String[] args) { Test t = new Test(); System.out.println(t.a); System.out.println(t.b); System.out.println(t.c); } } class Test{ int a = 10; int c; int b; {//初始化屬性的 c = 30; b = 20; } } static 修飾初始化代碼塊:靜態(tài)代碼塊 靜態(tài)代碼塊的作用:在類(lèi)加載時(shí) 和靜態(tài)的屬性 按照順序執(zhí)行 為類(lèi)進(jìn)行初始化操作 語(yǔ)法: static{ } 案例: public class Demo{ public static void main(String[] args) { System.out.println(Test.a); System.out.println(Test.b); } } class Test{ static int a = 20; static{ b = 40; } static int b; } 注意:靜態(tài)變量 時(shí)有默認(rèn)值 先進(jìn)行賦默認(rèn)值 再初始化 ================================================================== 類(lèi)加載:當(dāng)jvm第一次使用一個(gè)類(lèi)時(shí) 需要通過(guò)classpath 找到.class = 字節(jié)碼文件 讀入這個(gè)類(lèi)中的信息(包名 類(lèi)名 屬性 方法 靜態(tài)的變量 靜態(tài)的方法 。。。)并保存在虛擬機(jī)中 類(lèi)加載只進(jìn)行一次 類(lèi)加載的時(shí)機(jī): 1.創(chuàng)建對(duì)象時(shí) 2.類(lèi)名訪(fǎng)問(wèn)靜態(tài)成員(靜態(tài)屬性 靜態(tài)方法) 3.子類(lèi)進(jìn)行類(lèi)加載時(shí) 會(huì)先進(jìn)行父類(lèi)的類(lèi)加載 案例:關(guān)于 1和2 兩種情況類(lèi)加載 public class Demo{ public static void main(String[] args) { //1.創(chuàng)建對(duì)象 //Test t = new Test(); //2. 訪(fǎng)問(wèn)靜態(tài)的成員 System.out.println(Test.a); } } class Test{ static int a = 20; static{ System.out.println("父類(lèi) 類(lèi)加載了"); } } 案例:關(guān)于 3 情況的類(lèi)加載 public class Demo{ public static void main(String[] args) { //創(chuàng)建子類(lèi)的對(duì)象 //Sub s = new Sub(); System.out.println(Sub.b); } } class Test{ static int a = 20; static{ System.out.println("父類(lèi) 類(lèi)加載了"); } } class Sub extends Test{ static int b = 30; static{ System.out.println("子類(lèi)進(jìn)行類(lèi)加載了"); } }
三、final 最終的
修飾變量
局部變量:final修飾的局部變量只能賦值一次 值一旦賦值不可以改變 常量的定義: public static final double PI = 3.14159265457; 案例: public class Demo{ public static void main(String[] args) { int a = 20;//局部變量 final int b = 10; a++; b++; System.out.println(a); System.out.println(b); } } public class Demo{ public static void main(String[] args) { final int a ;//聲明 a = 10; a = 20;//報(bào)錯(cuò) System.out.println(a); } } 實(shí)例變量 特點(diǎn): 1.final修飾的實(shí)例變量沒(méi)有默認(rèn)值 2.final修飾的實(shí)例變量只能賦值一次 3.final修飾的實(shí)例變量可以在構(gòu)造方法中初始化 但是要保證每個(gè)構(gòu)造都必須能夠?yàn)檫@個(gè)變量初始化 案例: public class Demo{ public static void main(String[] args) { Animal a = new Animal(250); //System.out.println(a.a);//0 System.out.println(a.b); } } class Animal{ /*int a = 10;//實(shí)例變量 final int b = 20;*/ int a; final int b = 20; public Animal(int b) { this.b = b; } } public class Demo{ public static void main(String[] args) { Animal a = new Animal(250); //System.out.println(a.a);//0 System.out.println(a.b); } } class Animal{ /*int a = 10;//實(shí)例變量 final int b = 20;*/ int a; final int b ; public Animal(int b) { this.b = b; } public Animal() { b = 30; } } 類(lèi)變量 特點(diǎn): 1.final修飾的類(lèi)變量沒(méi)有默認(rèn)值 2.final修飾的類(lèi)變量可以通過(guò)靜態(tài)代碼塊進(jìn)行初始化 案例: public class Demo{ public static void main(String[] args) { System.out.println(Animal.a); System.out.println(Animal.b); } } class Animal{ static int a ; final static int b ; static{ b = 250; } }
修飾方法
成員方法: 特點(diǎn): 1.final修飾的成員方法可以重載 2.final修飾的成員方法不可以被覆蓋 語(yǔ)法: public final void m1() { } final public void m1() { } 案例: public class Demo{ public static void main(String[] args) { } } class Animal{ public void m1() { System.out.println("m1"); } } class Dog extends Animal{ public final void m1() { System.out.println(); } } 靜態(tài)方法: 特點(diǎn): 1.final修飾的靜態(tài)方法可以重載 2.final修飾的靜態(tài)方法不可以被覆蓋 案例: public class Demo{ public static void main(String[] args) { } } class Animal{ public final static void m1() { System.out.println("m1"); } public final static void m1(int a) { System.out.println("m1"); } } class Dog extends Animal{ }
修飾類(lèi)
語(yǔ)法: final class Animal{ } 特點(diǎn):final修飾的類(lèi)沒(méi)有子類(lèi) 俗稱(chēng)斷子絕孫類(lèi) jdk的類(lèi)庫(kù)中有哪些final修飾的類(lèi)? String Math System 案例: public class Demo{ public static void main(String[] args) { } } class Dog extends System{ }
四、關(guān)于修飾符混搭的原則
class Animal{
public final static void m1() { System.out.println("m1"); } public final static void m1(int a) { System.out.println("m1"); }
}
class Dog extends Animal{
}
##### 修飾類(lèi) ```java 語(yǔ)法: final class Animal{ } 特點(diǎn):final修飾的類(lèi)沒(méi)有子類(lèi) 俗稱(chēng)斷子絕孫類(lèi) jdk的類(lèi)庫(kù)中有哪些final修飾的類(lèi)? String Math System 案例: public class Demo{ public static void main(String[] args) { } } class Dog extends System{ }
五、關(guān)于修飾符混搭的原則
到此這篇關(guān)于Java開(kāi)發(fā)必備的三大修飾符的文章就介紹到這了,更多相關(guān)Java三大修飾符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過(guò)實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用
這篇文章主要通過(guò)實(shí)例介紹了Java的Strus框架中的OGNL表達(dá)式使用,Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下2015-11-11基于springboot創(chuàng)建mybatis的完整步驟
MyBatis是一款優(yōu)秀的數(shù)據(jù)庫(kù)持久層框架,相比Hibernate我更喜歡使用MyBatis,看的到SQL還是讓人更安心點(diǎn),這篇文章主要給大家介紹了關(guān)于基于springboot創(chuàng)建mybatis的完整步驟,需要的朋友可以參考下2024-03-03一文搞懂Mybatis-plus的分頁(yè)查詢(xún)操作
說(shuō)起分頁(yè)機(jī)制,相信我們程序員都不陌生,今天,我就給大家分享一下Mybatis-plus的分頁(yè)機(jī)制,供大家學(xué)習(xí)和Copy,感興趣的可以了解一下2022-06-06Java實(shí)現(xiàn)Swing組件定制Button示例
這篇文章主要介紹了Java實(shí)現(xiàn)Swing組件定制Button,涉及java Swing組件Button相關(guān)屬性設(shè)置與使用操作技巧,需要的朋友可以參考下2018-01-01JDBC 實(shí)現(xiàn)通用的增刪改查基礎(chǔ)類(lèi)方法
下面小編就為大家分享一篇JDBC 實(shí)現(xiàn)通用的增刪改查基礎(chǔ)類(lèi)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01劍指Offer之Java算法習(xí)題精講N叉樹(shù)的遍歷及數(shù)組與字符串
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-032020最新eclipse安裝過(guò)程及細(xì)節(jié)
這篇文章主要介紹了2020最新eclipse安裝過(guò)程及細(xì)節(jié),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08