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

第一个问题:
public class{
public static void main(String[] args){
A a = new A();
A b;
}
}
class A{
static{
System.out.println("A");
}
}
关于静态代码块的,在主方法里面声明了A类型的变量a并且创建对象(这个创建对象的过程可以称作初始化吗??),就会执行控制台打印A 可是只声明A类的变量b没创建对象就不执行控制台打印。。。。请问这里面的原理是什么,执行的过程是怎么样子的?(就是什么加载类啦。。。。虚拟机啦。。。。内存啦。。。方法区。。堆。。神马的)

第二个问题:
public class Demo{
public static void main(String[] args){
A aa = new B();
B bb = new B();

System.out.println(aa.s+bb.s); //A B
System.out.println(aa.method()+bb.method()); //b b
}
}

class A{
String s="A";
public String method(){
return "a";
}
}
class B extends A{
String s="B";
public String method(){
return "b";
}
}

我记住了老师讲的 属性静态绑定到类型上 方法动态绑定到对象上 重载的时候就看类 覆盖的时候就看对象。。。。死记硬背啊 上面的两个输出我都能导出来结果 但是不知道里面是怎么执行的,有先后顺序优先级什么的吗? 父类型引用的子类对象。。子类型引用的子类型对象。。。。都是肿么执行的捏? 各种迷糊哇。。。。。。

第三个问题:
老师上课说的神马。。。类的加载指的是什么?在什么时候执行?对象的创建又是在什么时候?整个main方法是什么意思,它是肿么执行的捏 ?

不要那种说的很深很难理解的老学究做派。。。。 所谓深入浅出嘛 嘿嘿

拒绝复制粘贴!!!!!

麻烦大虾了 三个问题里面还有各种小问题 所以分分会高那么一点点

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》。
以上全是手打,希望你能采纳。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-13
yushionlava说得很好。
对于父类引用指向子类的情况,其实java采用了延迟加载策略,即真正new的对象作为操作主体,它所有的变量和方法都用new出的对象里面取,只是引用限制了能在new出的对象中拿到哪些方法和变量。
其实把A换成一个接口,用B implements A, 然后A b=new B(),这样更好理解。本回答被网友采纳
第2个回答  2013-04-13
这个问题一句两句又讲不清楚,你看一下JVM内存分配原理和执行过程就会明白上面的为题了。
第3个回答  2013-04-16
new操作浮是在堆中分配内存,然后返回一个地址的引用,赋值给A类型的变量a,使a指向堆中的对象。

java初学提问 关于执行过程 和继承的一些问题,请各位大虾帮忙 谢谢
1.首先,你的main方法是写在Demo类里的,当运行这个main方法时,执行A a = new A()时;需要new一个A类的对象,在new出这个对象之前,JVM会在堆中装载A类,这时候,会初始化A类的所有静态成员,所以static会被执行一次,然后执行new A()。不过,所有静态成员都只会初始化一次。(静态成员...

请从JAVA课本知识角度回答。小弟是要考试用的,老师只给了这个材料!希望...
首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。 其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为,...

一套JAVA的初级题目,跪求各位大虾帮帮忙
18、以下关于循环语句描述正确的是?( D )A、 for循环不可能产生死循环 B、 while循环不可能产生死循环 C、 for循环不能嵌套while循环 D、 即使条件不满足do……while循环体内的语句也至少执行一次 19、以下对选择语句的描述错误的是?( )A、 根据某一条件重复执行一部分代码直到满足终止循...

JAVA,各位大虾帮我解释哈,谢谢
C语言支持结构化编程,也就是说C的程序被编写成一些分离的函数呼叫(调用)的集合,这些呼叫是自上而下运行,而不像一个单独的集成块的代码使用GOTO语句控制流程。因此,C程序比起集成性的FORTRAN及COBOL的“空心粉式代码”代码要简单得多。事实上,C仍然具有GOTO语句,不过它的功能被限制了,仅当结构化方案非常复杂时才...

菜鸟求助PHP字符替换的问题
帮忙看看这段程序有什么问题,在关闭窗口是出错, 谁能告诉我取字符子串的函数是什么? 写一个反汇编程序要有一些什么知识? int86()是什么意思,怎么用?哪有中断的说明?哪位能告诉我一下。 arrRow=rs.getRows 是做什么用的?谢谢 请问delphi中十六进制转化为十进制是用什么函数 请问Table、Query、ADOTable、ADOQuery...

请问:电气工程及其自动化,电子信息工程,信息管理与系统,那个就业好...
学完本课程之后,学生应对动态测试中的基本概念、问题、理论、方法、环节、手段有一个比较完整的认识,并能初步运用于常见动态机械量的测试。(2)随机信号分析通过该课程的学习,应能掌握随机过程的基本概念、其统计特性的描述、随机信号通过系统分析以及电子系统中常见的窄带、正态随机信号的分析,而数字技术的发展使得离散...

相似回答
大家正在搜