之前對于靜態(tài)代碼塊,構(gòu)造代碼塊,普通代碼塊,以及類的初始化等代碼執(zhí)行順序一直不是特別清楚,在此整理,方便復習!
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于做網(wǎng)站、成都網(wǎng)站制作、雙流網(wǎng)絡推廣、重慶小程序開發(fā)公司、雙流網(wǎng)絡營銷、雙流企業(yè)策劃、雙流品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供雙流建站搭建服務,24小時服務熱線:18980820575,官方網(wǎng)址:muchs.cn
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();
}
文章名稱:java中代碼執(zhí)行順序
文章出自:http://muchs.cn/article44/ispjee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、定制網(wǎng)站、軟件開發(fā)、手機網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)