日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

3分钟弄明白JAVA三大修饰符

發(fā)布時(shí)間:2023/12/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 3分钟弄明白JAVA三大修饰符 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

3分鐘弄明白JAVA三大修飾符


JAVA的三個(gè)修飾:static,final,abstract,在JAVA語(yǔ)言里無(wú)處不在,但是它們都能修飾什么組件,修飾組件的含義又有什么限制,總是混淆。所以來(lái)總結(jié)對(duì)比一下。


1 static靜態(tài)修飾符


static修飾符能夠修飾屬性,方法,初始代碼塊。不能修飾局部變量和類。

首先要明白屬性分為靜態(tài)和非靜態(tài),靜態(tài)的稱為靜態(tài)屬性,又叫類變量,非靜態(tài)的稱為實(shí)例變量。

靜態(tài)變量和靜態(tài)方法統(tǒng)稱為靜態(tài)成員。


修飾屬性

靜態(tài)屬性又稱類變量,它不屬于某個(gè)對(duì)象,是屬于類的,是所有對(duì)象共同享有。

eg:類名.靜態(tài)屬性 =對(duì)象1.靜態(tài)屬性=對(duì)象2.靜態(tài)屬性=同一塊內(nèi)存里所對(duì)應(yīng)的地址

修飾方法

1:靜態(tài)方法可以直接類名.方法名調(diào)用。

2:靜態(tài)方法里只能:訪問(wèn)靜態(tài)成員,不能訪問(wèn)非靜態(tài)成員。

3:靜態(tài)方法里不能用this關(guān)鍵字。

4:靜態(tài)法法里沒(méi)有多態(tài),只能被靜態(tài)方法覆蓋。


修飾初始代碼塊

static修飾初始代碼塊稱為靜態(tài)代碼塊。靜態(tài)代碼塊是在類加載的時(shí)候運(yùn)行。這里回顧一下類加載。



類加載:

//TestPerson .java

?class Person{?

?????static{

? ? ? ? ? System.out.println("static here");

?????}

? ? ?public Person(){

? ? ? ? ? System.out.println("構(gòu)造方法");

?????}

}

public class TestPerson(){

? ? ?public static void main(){

? ? ? ? ?Person p1 = new Person();

? ? ? ? ?Person p2 = new Person();?

?????}

}

運(yùn)行 TestPerson .java文件會(huì)編譯生成TestPerson .class 和 Person.class兩個(gè)class文件。

執(zhí)行java? TestPerson 首先會(huì)啟動(dòng)JAVA虛擬機(jī)(JVM),然后再硬盤上找到TestPeson.calss文件,并開始解釋執(zhí)行,

此時(shí)JVM里只有TestPerson.class這一個(gè)類的信息,順序執(zhí)行到main方法,遇到,Person p1 = new Person(),

創(chuàng)建Person對(duì)象,JVM會(huì)根據(jù)CLASSPATH環(huán)境變量找到Person.class文件,把Person類的信息讀入到JVM里,

保存起來(lái)。這個(gè)過(guò)程就是類加載。

類加載:加載類信息;

? ? ? ? ? ? ?執(zhí)行靜態(tài)代碼塊;

? ? ? ? ? ?? 為靜態(tài)屬性分配空間并初始化值。

以上例子的執(zhí)行順序結(jié)果如下:

static here?

構(gòu)造方法

構(gòu)造方法


2final修飾符

final修飾符能夠修飾變量,方法,和類。



final修飾變量

final修飾的變量稱為常量,一旦賦值不能更改。對(duì)于基本類型來(lái)說(shuō)是其值不能改變,對(duì)于對(duì)象類型來(lái)說(shuō)是其址不能改變。

final變量的賦值說(shuō)明:一般的實(shí)例變量在創(chuàng)建時(shí)JVM會(huì)給其分配空創(chuàng)建默認(rèn)值。但是final變量只能有一次賦值機(jī)會(huì),所以,對(duì)于final變量,JVM不會(huì)為其賦值,唯一的賦值機(jī)會(huì)留給程序員。

final類型的實(shí)例變量賦值在1:初始化屬性,

2:調(diào)用構(gòu)造方法,兩種方式必須抓住其中一次機(jī)會(huì),但不能試圖抓住兩種機(jī)會(huì)。

final修飾方法

final修飾方法,表示該方法不能被子類覆蓋。

eg:class A{ public final void a1(){.....}}

class B extends A{public void ?a1(.....)}

//編譯錯(cuò)誤無(wú)法覆蓋

final修飾類

final修飾類表示該類不能被繼承

一個(gè)類中有final方法,該類可以被繼承,但無(wú)法覆蓋final方法,但一個(gè)類是final類,則該類不能被繼承,更無(wú)從談起覆蓋。


eg:final賦值

class Person {

? ? ?final int num = 10 ; //初始化屬性

? ? ?public Perosn(int num){

? ? ? ? ?this.num = num;?

?????}

}

class Person {

? ? ?final int num ;?

? ? ?public Perosn(int num){//構(gòu)造方法賦值

? ? ? ? ?this.num = num;

?????}

}

class Person {

? ? ?final int num = 10; ? ?// 錯(cuò)誤,兩種方式都抓住

? ? ?public Perosn(int num){//錯(cuò)誤,兩種方式都抓住

? ? ? ? ?this.num = num;

?????}

}



3 abstract修飾符

abstract可以修飾類和方法,


abstract修飾類

abstract修飾類稱為抽象類。抽象類只能用來(lái)聲明引用不能用來(lái)創(chuàng)建對(duì)象。從某種意義上來(lái)說(shuō),抽象類就是讓子類去繼承,抽象類聲明引用,讓這個(gè)引用指向子類。子類去實(shí)現(xiàn)抽象方法。

抽象類中可以有非抽象方法,但一個(gè)類里有抽象方法就一定要是抽象類。子類繼承抽象類要么自己成為抽象類,要么實(shí)現(xiàn)父抽象類里的所有抽象方法。

abstract修飾方法

abstract修飾方法,稱為抽象方法。抽象方法指:只有聲明沒(méi)有實(shí)現(xiàn)的方法。

public abstract void ?a1();//抽象方法。

public void a1(){};//空實(shí)現(xiàn)的方法


abstract class A{

? ? ? ? ?public void a1(){}//抽象類中可以有非抽象方法

? ? ? ? ?public abstract void a2();//但有了抽象方法就一定要是抽象類

}

class B extends A{

? ? ?public void a2(){

? ? ? ? ?System.out.print("子類要么是抽象類,要么實(shí)現(xiàn)父抽象類所有的抽象方法");?

?????}

}


public class TestA{

? ? ?public static void main(){

? ? ? ? ?A a ;//正確,抽象類可以用來(lái)引用

? ? ? ? ? a = new A();//錯(cuò)誤,A抽象類,抽象類不能用來(lái)創(chuàng)建對(duì)象

? ? ? ? ? a = new B();//正確

? ? ? ? ? a.a2();//正確

?????}

}


抽象類最大的作用就是,定義功能,具體實(shí)現(xiàn)由子類實(shí)現(xiàn)。

其充分體現(xiàn)了共性放在父類,這個(gè)基本原則里。抽象和多態(tài)是聯(lián)系緊密的,其思想大家可以參考JAVA三大特性。




限于文章篇幅原因,這里僅僅介紹冰山一角。由于筆者的水平有限,編寫時(shí)間也很倉(cāng)促,文中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,不妥之處懇請(qǐng)讀者批評(píng)指正。

以上內(nèi)容希望對(duì)大家有所幫助。歡迎討論,共同進(jìn)步。



轉(zhuǎn)載于:https://blog.51cto.com/zhangdongxu/1920716

總結(jié)

以上是生活随笔為你收集整理的3分钟弄明白JAVA三大修饰符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。