资讯专栏INFORMATION COLUMN

JAVA继承时父类子类都有静态代码块构造代码块时输出顺序问题

宠来也 / 2672人阅读

摘要:父类,子类子类方法三者中有同名变量时,调用子类方法输出,输出,为子类方法中的值,表示子类中的值,表示父类中的值。静态代码块构造代码块构造方法静态代码块构造代码块构造方法父类和子类都有静态代码块,构造代码块,构造方法,初始化子类对象。

package cat1;

 class fu{
    public int num=10;
    public fu() {
        System.out.println("fu");
    }
 }
 
 class zi extends fu{
     public int num=20;
     public zi() {
         System.out.println("zi");
     }
     public void show() {
         int num=30;
         System.out.println(num);
         System.out.println(this.num);
         System.out.println(super.num);
     }
 }
 
public class test{
    public static void main(String [] args) {
 zi z=new zi();
    z.show();
}
}


    

父类,子类 子类方法三者中有同名变量num时,调用子类方法输出,num输出30,为子类方法中的值,this.num表示子类中的值,super.num表示父类中的值。

2

class Fu {
    static {
        System.out.println("静态代码块Fu");
    }

    {
        System.out.println("构造代码块Fu");
    }

    public Fu() {
        System.out.println("构造方法Fu");
    }
}

class Zi extends Fu {
    static {
        System.out.println("静态代码块Zi");
    }

    {
        System.out.println("构造代码块Zi");
    }

    public Zi() {
        System.out.println("构造方法Zi");
    }
}
public class test
{public static void main(String []args)
    {Zi z = new Zi();
    
    }
}

父类和子类都有静态代码块,构造代码块,构造方法,初始化子类对象。此时:
1.jvm调用了main方法,main进栈;
2.遇到Zi z=new zi(); 会将fu.class和zi.class 分别加进内存,再创建对象;
3.父类的静态代码块会随着fu.class一起加载,当zi.class进内存,子类当静态
代码块也会随着一起进去;
所以先输出静态代码块fu再输出静态代码块zi
4.走子类构造方法,先初始化父类,而父类有构造代码块
综上,顺序为 1父类静态代码块2子类静态代码块3父类构造代码块4父类构造方法
5子类构造代码块6子类构造方法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77283.html

相关文章

  • Java 面向对象(上)

    摘要:对象的引用关键字总是指向调用该方法的对象。根据出现位置的不同,作为对象的默认引用有两种情形。构造器中引用该构造器正在初始化的对象。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。 类和对象 定义类 面向对象的程序设计过程中有两个重要概念:类(class)和对象(object,也被称为实例,instance),其中类是某一批对象的抽象,可以把类理解成...

    SimonMa 评论0 收藏0
  • Java 同步锁

    摘要:如果同一个线程再次请求该锁,计数器会递增,每次占有的线程退出同步代码块时计数器会递减,直至减为时锁才会被释放。表示或在该上的所有线程的个数用来实现重入锁的计数。只有两种可能的值表示没有需要唤醒的线程表示要唤醒一个继任线程来竞争锁。 一、synchronized 1.类型 (1)对象锁 对象锁是作用在实例方法或者一个对象实例上面的 一个类可以有多个实例对象,因此一个类的对象锁可能会有多个...

    xi4oh4o 评论0 收藏0
  • 谈谈Java的面向对象

    摘要:也就是说,一个实例变量,在的对象初始化过程中,最多可以被初始化次。当所有必要的类都已经装载结束,开始执行方法体,并用创建对象。对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。 类的拷贝和构造 C++是默认具有拷贝语义的,对于没有拷贝运算符和拷贝构造函数的类,可以直接进行二进制拷贝,但是Java并不天生支持深拷贝,它的拷贝只是拷贝在堆上的地址,不同的变量引用的是堆上的...

    ormsf 评论0 收藏0
  • Java类初始化顺序

    摘要:对子类成员数据按照它们声明的顺序初始化,执行子类构造函数的其余部分。参考类的初始化顺序引了大半类加载的时机 jvm系列 垃圾回收基础 JVM的编译策略 GC的三大基础算法 GC的三大高级算法 GC策略的评价指标 JVM信息查看 GC通用日志解读 jvm的card table数据结构 Java类初始化顺序 Java对象结构及大小计算 Java的类加载机制 Java对象分配简要流程 年老...

    boredream 评论0 收藏0
  • JAVA快速复习

    摘要:八种基本数据类型数组定义数组元素类型数组名元素类型元素个数和数组长度元素类型数组名元素类型元素元素元素元素内存的划分寄存器本地方法区方法区栈内存存储局部变量变量所属作用域一旦结束变量自动释放方法进栈局部变量属于方法所以方法要先进栈堆内存存储 八种基本数据类型 byte short int long boolean char float double JAVA数组 定义数组 元...

    cppowboy 评论0 收藏0

发表评论

0条评论

宠来也

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<