之前對于靜態(tài)代碼塊,構(gòu)造代碼塊,普通代碼塊,以及類的初始化等代碼執(zhí)行順序一直不是特別清楚,在此整理,方便復(fù)習(xí)!
十余年專注成都網(wǎng)站制作,成都企業(yè)網(wǎng)站定制,個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站定制,高端網(wǎng)頁制作,對服務(wù)器托管等多個方面,擁有豐富的網(wǎng)站建設(shè)經(jīng)驗。static {
System.out.println("靜態(tài)代碼塊");
}
class Parent {
static {
System.out.println("A");
}
Parent(){
System.out.println("sdfsaf");
}
static {
System.out.println("B");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
new Parent();//第一次執(zhí)行,觸發(fā)了類加載
System.out.println("=========華麗的分割線=========");
new Parent();//第二次實例化,不再觸發(fā)類的加載,不再執(zhí)行靜態(tài)代碼塊
}
}
運行結(jié)果:
public class Test01 {
{
System.out.println("我是構(gòu)造代碼塊");
}
public static void main(String[] args) {
new Test01();
}
}
class Test02{
{
System.out.println("我是 父類 構(gòu)造代碼塊");
}
}
public class Test01 extends Test02{
{
System.out.println("我是 子類 構(gòu)造代碼塊1");
}
Test01(){
System.out.println("我是無參構(gòu)造方法");
}
Test01(int v){
System.out.println("我是有參構(gòu)造方法");
}
static {
System.out.println("靜態(tài)代碼塊");
}
{
System.out.println("我是 子類 構(gòu)造代碼塊2");
}
public static void main(String[] args) {
new Test01();
System.out.println("===================華麗的分割線===================");
new Test01(6);//每次創(chuàng)建對象都會執(zhí)行構(gòu)造代碼塊
}
}
運行結(jié)果:
public void method() {
{
System.out.println("普通代碼塊1");
}
....
}
class Test02{
{
System.out.println("我是 父類 構(gòu)造代碼塊");
}
}
public class Test01 extends Test02{
{
System.out.println("我是 子類 構(gòu)造代碼塊");
}
static {
System.out.println("靜態(tài)代碼塊");
}
public void method(){
{
System.out.println("普通代碼塊1");
}
System.out.println("普通方法體");
{
System.out.println("普通代碼塊2");
}
}
public static void main(String[] args) {
new Test01();
System.out.println("===================華麗的分割線===================");
new Test01().method();//被調(diào)用才會執(zhí)行方法中的代碼塊
}
}
運行結(jié)果:
對象實例化時的順序:
1,父類的靜態(tài)成員變量和靜態(tài)代碼塊加載
2,子類的靜態(tài)成員變量和靜態(tài)代碼塊加載
3,父類成員變量和構(gòu)造代碼塊加載
4,父類的構(gòu)造方法加載
5,子類成員變量和構(gòu)造代碼塊加載
6,子類的構(gòu)造方法加載
class Parent2 {
{
System.out.println("父類 構(gòu)造代碼塊1");//5
}
Parent2() {
System.out.println("父類 的無參構(gòu)造方法");//7
}
static {
System.out.println("父類 的靜態(tài)代碼塊1");//1
}
{
System.out.println("父類 構(gòu)造代碼塊2");//6
}
static {
System.out.println("父類 的靜態(tài)代碼塊2");//2
}
}
public class ExplicitStatic extends Parent2 {
static {
System.out.println("子類 的靜態(tài)代碼塊1");//3
}
ExplicitStatic() {//15
super();//可省略
System.out.println("子類 無參構(gòu)造方法");//16
}
ExplicitStatic(int v) {//14
this();//即 執(zhí)行15
System.out.println("子類 有參構(gòu)造方法");//17
}
private int initA() {
System.out.println("子類 的屬性初始化調(diào)用 普通方法A");//9
return 0;
}
static {
System.out.println("子類 的靜態(tài)代碼塊2");//4
}
private int initB() {
System.out.println("子類 的屬性初始化調(diào)用 普通方法B");//12
return 0;
}
int a = initA();//8
{
System.out.println("子類 的構(gòu)造代碼塊1");//10
}
int b = initB();//11
{
System.out.println("子類 的構(gòu)造代碼塊2");//13
}
public void method() {
{
System.out.println("子類 的普通代碼塊1");
}
System.out.println("子類 的普通方法method");
{
System.out.println("子類 的普通代碼塊2");
}
}
public static void main(String[] args) {
new ExplicitStatic(100);
System.out.println("=================");
new ExplicitStatic().method();
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。