java初学提问 关于执行过程 和继承的一些问题,请各位大虾帮忙 谢谢

1.首先,你的main方法是写在Demo类里的,当运行这个main方法时,执行A a = new A()时;需要new一个A类的对象,在new出这个对象之前,JVM会在堆中装载A类,这时候,会初始化A类的所有静态成员,所以static会被执行一次,然后执行new A()。不过,所有静态成员都只会初始化一次。(静态成员...
java初学提问 关于执行过程 和继承的一些问题,请各位大虾帮忙 谢谢
1.首先,你的main方法是写在Demo类里的,当运行这个main方法时,执行A a = new A()时;需要new一个A类的对象,在new出这个对象之前,JVM会在堆中装载A类,这时候,会初始化A类的所有静态成员,所以static会被执行一次,然后执行new A()。不过,所有静态成员都只会初始化一次。(静态成员包括static块)。
2.你这里面有一个java思想,就是父类的引用指向子类的对象,其实是向上兼容的概念,如果你理解不了,你就记死,父类的引用指向子类的实体,如果通过该引用调用的方法是子类重写了父类的,那么调用的就是子类的方法。但是成员变量并不会被继承,所以不存在重写。
3.类的加载,指的是JVM需要用到一个类的时候,会先将该类加载到堆中,初始化他的静态成员,而当你需要创建该类的一个对象时,其实在对象被new出来之前,JVM会先为他开辟一块已经被置0的内存,然后让引用(引用是放在堆栈里的)指向该内存。(最容易被忽视的就是你运行main方法的时候,其实在main方法被运行前,main方法所在的类就已经被加载了,因为main方法其实也是类的一个静态方法)。
不知道我这么说你能不能理解得了,其实要彻底理解这些东西,真的不是别人两句话就讲清楚的,必须好好的去翻翻相关的材料,去看看JVM关于类,对象,静态成员,非静态成员是怎么加载操作的,推荐《thinking in java》。
以上全是手打,希望你能采纳。2013-04-13
yushionlava说得很好。
对于父类引用指向子类的情况,其实java采用了延迟加载策略,即真正new的对象作为操作主体,它所有的变量和方法都用new出的对象里面取,只是引用限制了能在new出的对象中拿到哪些方法和变量。
其实把A换成一个接口,用B implements A, 然后A b=new B(),这样更好理解。2013-04-13
这个问题一句两句又讲不清楚,你看一下JVM内存分配原理和执行过程就会明白上面的为题了。2013-04-13
new操作浮是在堆中分配内存,然后返回一个地址的引用,赋值给A类型的变量a,使a指向堆中的对象。2013-04-16
mengvlog 阅读 7 次 更新于 2025-07-19 01:29:01 我来答关注问题0
檬味博客在线解答立即免费咨询

编程相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部