簡(jiǎn)單了解Java類(lèi)成員初始化順序
這篇文章主要介紹了簡(jiǎn)單了解Java類(lèi)成員初始化順序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
類(lèi)中包含7中成員:
1、靜態(tài)變量 static
2、final靜態(tài)常量 final static
3、靜態(tài)代碼塊 static{} //多個(gè)代碼塊順序執(zhí)行
4、普通變量
5、普通代碼塊 {} //多個(gè)代碼塊順序執(zhí)行
6、構(gòu)造方法
7、普通方法
類(lèi)中成員初始化方式(排出7):
非繼承類(lèi)中:
- 首先執(zhí)行1/2/3,執(zhí)行順序?yàn)轫樞驁?zhí)行(誰(shuí)在前先執(zhí)行誰(shuí))。
- 之后執(zhí)行4/5,執(zhí)行順序?yàn)轫樞驁?zhí)行(誰(shuí)在前先執(zhí)行誰(shuí))。
- 然后執(zhí)行6(默認(rèn)執(zhí)行無(wú)參構(gòu)造方法)。
繼承類(lèi)中:
- 首先執(zhí)行父類(lèi)1/2/3,執(zhí)行順序?yàn)轫樞驁?zhí)行(誰(shuí)在前先執(zhí)行誰(shuí)),
- 隨即執(zhí)行子類(lèi)1/2/3,執(zhí)行順序?yàn)轫樞驁?zhí)行(誰(shuí)在前先執(zhí)行誰(shuí))。
- 之后執(zhí)行父類(lèi)4/5,執(zhí)行順序?yàn)轫樞驁?zhí)行(誰(shuí)在前先執(zhí)行誰(shuí)),
- 然后執(zhí)行父類(lèi)6(如果子類(lèi)沒(méi)有調(diào)用父類(lèi)構(gòu)造方法,則默認(rèn)調(diào)用父類(lèi)默認(rèn)無(wú)參構(gòu)造方法)。
- 隨即執(zhí)行子類(lèi)4/5,執(zhí)行順序?yàn)轫樞驁?zhí)行(誰(shuí)在前先執(zhí)行誰(shuí))。
- 然后執(zhí)行子類(lèi)6。
代碼:
* 每個(gè)屬性設(shè)置斷點(diǎn),啟動(dòng)后可以觀察執(zhí)行順序。
父類(lèi):
package com.lookcoder.haircutmember.vo;
public class TRoleVoAFather {
private String nameFather = "12";
private Integer ageFather = 1;
private int ageiFather = 1;
{
System.out.println("father defualt method block2");
}
private String defualtInitFather = getDefaultInit();
{
System.out.println("father defualt method block1");
}
private String getDefaultInit() {
return "father default init";
}
// ----------------------------------------------------------------------------
private static String aFather = "2";
private final static String aaFather = getFinalStatic();
static {
System.out.println("father default static method2");
}
private static Integer bFather = 1;
static {
System.out.println("father default static method1");
}
private final static Integer bbFather = 2;
private static String getFinalStatic() {
return "father final static aa";
}
private final static Boolean bo = true;
// ----------------------------------------------------------------------------
TRoleVoAFather() {
System.out.println("father default construct");
}
TRoleVoAFather(String name, Integer age) {
this.nameFather = name;
this.ageFather = age;
}
// ----------------------------------------------------------------------------
public void abc() {
System.out.println("abc method!");
}
}
子類(lèi):
package com.lookcoder.haircutmember.vo;
public class TRoleVoA extends TRoleVoAFather{
private int agei = 1;
{
System.out.println("defualt method block2");
}
private Integer age = 1;
{
System.out.println("defualt method block1");
}
private String name = "12";
private String defualtInit = getDefaultInit();
private String getDefaultInit() {
return "default init";
}
// ----------------------------------------------------------------------------
private final static Integer bb = 2;
private final static String aa = getFinalStatic();
private static String getFinalStatic() {
return "final static aa";
}
private final static Boolean bo = true;
private static String a = "2";
private static Integer b = 1;
static {
System.out.println("default static method2");
}
static {
System.out.println("default static method1");
}
private static Integer b11= 1;
// ----------------------------------------------------------------------------
TRoleVoA() {
System.out.println("default construct");
}
TRoleVoA(String name, Integer age) {
super(name, age);
this.name = name;
this.age = age;
}
// ----------------------------------------------------------------------------
public void showDefault() {
System.out.println("show default method!");
}
}
啟動(dòng)類(lèi):
package com.lookcoder.haircutmember.vo;
public class TRoleVoARun {
public static void main(String[] args) {
TRoleVoA tRoleVo = new TRoleVoA("123", 123);
tRoleVo.showDefault();
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Struts2學(xué)習(xí)筆記(8)-Result常用類(lèi)型
這篇文章主要介紹Struts2中Result四種常用的類(lèi)型的用法,希望能給大家做一個(gè)參考。2016-06-06
list轉(zhuǎn)tree和list中查找某節(jié)點(diǎn)下的所有數(shù)據(jù)操作
這篇文章主要介紹了list轉(zhuǎn)tree和list中查找某節(jié)點(diǎn)下的所有數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
SpringBoot接收接口入?yún)⒌姆绞叫〗Y(jié)
這篇文章主要給大家介紹了SpringBoot接收接口入?yún)⒌膸追N方式,我們從調(diào)用方的視角去看待這個(gè)問(wèn)題,對(duì)調(diào)用方來(lái)說(shuō),它在調(diào)用接口時(shí)有好幾種傳參方式,下面,將會(huì)依次對(duì)這幾種參數(shù)方式進(jìn)行講解和代碼示例,需要的朋友可以參考下2024-01-01
SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例,目的就是在異常發(fā)生時(shí),盡可能地減少破壞,下面就來(lái)介紹一下,感興趣的可以了解一下2024-07-07
mybatis-plus指定字段模糊查詢(xún)的實(shí)現(xiàn)方法
最近項(xiàng)目中使用springboot+mybatis-plus來(lái)實(shí)現(xiàn),所以下面這篇文章主要給大家介紹了關(guān)于mybatis-plus實(shí)現(xiàn)指定字段模糊查詢(xún)的相關(guān)資料,需要的朋友可以參考下2022-04-04
解析 MyBatis 中 Mapper 生效的來(lái)龍去脈
這篇文章主要介紹了解析 MyBatis 中 Mapper 生效的前因后果,介紹了mybatis基本使用及源碼分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
修改若依框架Token的過(guò)期時(shí)間問(wèn)題
本文介紹了如何修改若依框架中Token的過(guò)期時(shí)間,通過(guò)修改`application.yml`文件中的配置來(lái)實(shí)現(xiàn),默認(rèn)單位為分鐘,希望此經(jīng)驗(yàn)對(duì)大家有所幫助,也歡迎支持腳本之家2025-02-02
Java案例之HashMap集合存儲(chǔ)學(xué)生對(duì)象并遍歷
這篇文章主要介紹了Java案例之HashMap集合存儲(chǔ)學(xué)生對(duì)象并遍歷,創(chuàng)建一個(gè)HashMap集合,鍵是學(xué)號(hào)(String),值是學(xué)生對(duì)象(Student),存儲(chǔ)三個(gè)鍵值對(duì)元素并遍歷,下文具體操作需要的朋友可以參考一下2022-04-04
搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn)
本文主要介紹了搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
詳解MyBatis中Executor執(zhí)行SQL語(yǔ)句的過(guò)程
MyBatis中獲取SqlSession時(shí)會(huì)創(chuàng)建執(zhí)行器Executor并存放在SqlSession中,本篇文章將以MapperMethod的execute() 方法作為起點(diǎn),對(duì)MyBatis中的一次實(shí)際執(zhí)行請(qǐng)求進(jìn)行說(shuō)明,并結(jié)合源碼對(duì)執(zhí)行器Executor的原理進(jìn)行闡釋2023-07-07

