JavaSE static final及abstract修飾符實(shí)例解析
static :靜態(tài)常量,靜態(tài)方法,靜態(tài)代碼塊
靜態(tài)變量: 靜態(tài)變量屬于類的,使用類名來(lái)訪問,非靜態(tài)變量是屬于對(duì)象的,"必須"使用對(duì)象來(lái)訪問.
注意:靜態(tài)變量對(duì)于類而言在內(nèi)存中只有一個(gè),能被類中所有的實(shí)例共享。 實(shí)例變量對(duì)于類的每一個(gè)實(shí)例都有一份,
它們之間互不影在加載類的過程中為靜態(tài)變量分配內(nèi)存,實(shí)例變量在創(chuàng)建對(duì)象時(shí)分配內(nèi)存
所以靜態(tài)變量可以使用類名來(lái)直接訪問,而不需要使用對(duì)象來(lái)訪問.
package com.len.collection;public class PersonTest111 { private static String username="戰(zhàn)士高高"; private String password; public static String getUsername() { return username; } public static void setUsername(String username) { PersonTest111.username = username; } public String getPasswoord() { return passwoord; } public void setPasswoord(String passwoord) { this.passwoord = passwoord; } public static void main(String[] args) { /** * 第一點(diǎn): 靜態(tài)變量屬于類的,可以使用名來(lái)訪問,非靜態(tài)變量是屬于對(duì)象的,必須使用對(duì)象來(lái)訪問。 */ System.out.println(PersonTest111.username); PersonTest111 personTest111 = new PersonTest111(); personTest111.setPasswoord("2131231"); System.out.println(personTest111.getPasswoord()); }}
靜態(tài)方法:靜態(tài)方法數(shù)屬于類的,"可以"使用類名來(lái)調(diào)用,非靜態(tài)方法是屬于對(duì)象的,"必須"使用對(duì)象來(lái)調(diào)用.
靜態(tài)方法"不可以"直接訪問類中的非靜態(tài)變量和非靜態(tài)方法,但是"可以"直接訪問類中的靜態(tài)變量和靜態(tài)方法
注意:this和super在類中屬于非靜態(tài)的變量.(靜態(tài)方法中不能使用),代碼同上
靜態(tài)代碼塊:在類加載的時(shí)候被調(diào)用,給靜態(tài)成員變量賦值
<em>package com.len.collection;
public class PersonTest extends PersonTest111{
private static String username="張珊";
private String password="123456";
public PersonTest(){
System.out.println("構(gòu)造方法");
}
static {
System.out.println("靜態(tài)代碼塊");
}
public static void main(String[] args) {
PersonTest personTest=new PersonTest();
}
}
</em>
final 修飾符
- 用final修飾的類不能被繼承,沒有子類
- 用final修飾的方法可以被繼承,但是不能被子類的重寫 如java 中每個(gè)類都是Object類的子類,繼承了Object中的眾多方法,在子類中可以重寫toString方法、equals方法等,
- 但是不能重寫getClass方法 wait方法等,因?yàn)檫@些方法都是使用fi修飾的
- 用final修飾的變量表示常量,只能被賦一次值.其實(shí)使用final修飾的變量也就成了常量了,因?yàn)橹挡粫?huì)再變了。
2)修飾成員變量:
非靜態(tài)成員變量:
public class PersonTest{
private final int a;
}
只有一次機(jī)會(huì),可以給此變量a賦值的位置:
聲明的同時(shí)賦
構(gòu)造器中賦值(類中出現(xiàn)的所有構(gòu)造器都要寫)
靜態(tài)成員變量:
public class Person{
private static final int a;
}
只有一次機(jī)會(huì),可以給此變量a賦值的位置:
聲明的同時(shí)賦值
靜態(tài)代碼塊中賦值
abstract修飾符
- 可以用來(lái)修飾方法也可以修飾類,如果修飾方法,那么該方法就是抽象方法;如果修飾類,那么該類就是抽象類。
- 抽象類,不能使用new關(guān)鍵在來(lái)創(chuàng)建對(duì)象,它是用來(lái)讓子類繼承的,
- 抽象方法,只有方法的聲明,沒有方法的實(shí)現(xiàn),它是用來(lái)讓子類實(shí)現(xiàn)的
注:子類繼承抽象類后,需要實(shí)現(xiàn)抽象類中沒有實(shí)現(xiàn)的抽象方法,否則這個(gè)子類也要聲明為抽象類。
類的創(chuàng)建和初始化過程
* 1.類加載,同時(shí)初始化類中的靜態(tài)屬性
* 2.執(zhí)行靜態(tài)代碼塊
* 3.分配內(nèi)存空間,同時(shí)初始化非靜態(tài)的屬性
* 4.調(diào)用 PersonTest父類構(gòu)造器
* 5.對(duì)PersonTest中的屬性進(jìn)行顯示賦值
* 6.執(zhí)行匿名代碼塊
* 7.執(zhí)行構(gòu)造器
* 8.返回內(nèi)存地址
package com.len.collection;
public class PersonTest extends PersonTest111{
private static String username="張珊";
private String password="123456";
public PersonTest(){
System.out.println("構(gòu)造方法");
}
//匿名代碼塊是創(chuàng)建對(duì)象的時(shí)候自動(dòng)執(zhí)行,并且是在構(gòu)造方法之前執(zhí)行給方法
//作用:給對(duì)象的成員變量初始化賦值
{
System.out.println("匿名代碼塊");
}
//靜態(tài)方法在類被加載的時(shí)候調(diào)用
//作用:給靜態(tài)成員變量初始化賦值
static {
System.out.println("靜態(tài)代碼塊");
}
public static void main(String[] args) {
/**
* 1.類加載,同時(shí)初始化類中的靜態(tài)屬性
* 2.執(zhí)行靜態(tài)代碼塊
* 3.分配內(nèi)存空間,同時(shí)初始化非靜態(tài)的屬性
* 4.調(diào)用 PersonTest父類構(gòu)造器
* 5.對(duì)PersonTest中的屬性進(jìn)行顯示賦值
* 6.執(zhí)行匿名代碼塊
* 7.執(zhí)行構(gòu)造器
* 8.返回內(nèi)存地址
*/
PersonTest personTest=new PersonTest();
}
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java拖曳鼠標(biāo)實(shí)現(xiàn)畫線功能的方法
這篇文章主要介紹了Java拖曳鼠標(biāo)實(shí)現(xiàn)畫線功能的方法,需要的朋友可以參考下2014-07-07
在SpringBoot項(xiàng)目中獲取Request的四種方法
這篇文章主要為大家詳細(xì)介紹了SpringBoot項(xiàng)目中獲取Request的四種方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2023-11-11
BeanPostProcessor在顯示調(diào)用初始化方法前修改bean詳解
這篇文章主要介紹了BeanPostProcessor在顯示調(diào)用初始化方法前修改bean詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
詳解spring boot實(shí)現(xiàn)多數(shù)據(jù)源代碼實(shí)戰(zhàn)
本篇文章主要介紹了詳解spring boot實(shí)現(xiàn)多數(shù)據(jù)源代碼實(shí)戰(zhàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2017-07-07
Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn)代碼
這篇文章主要介紹了Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11
SpringBoot的@ControllerAdvice處理全局異常詳解
這篇文章主要介紹了SpringBoot的@ControllerAdvice處理全局異常詳解,但有時(shí)卻往往會(huì)產(chǎn)生一些bug,這時(shí)候就破壞了返回?cái)?shù)據(jù)的一致性,導(dǎo)致調(diào)用者無(wú)法解析,所以我們常常會(huì)定義一個(gè)全局的異常攔截器,需要的朋友可以參考下2024-01-01

