JAVA 中让我很是困惑继承的问题 本帖最后由 maytears 于 2009-11-19 21:06:07 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 static修饰的是表态变量,即只初始化一次,所以第二次NEW时就不会打印了的。只回答第一个问题 第一个问题:这是一个类加载到虚拟机的问题,当你new一个类的对象的时候,虚拟机会检测这个对象的类有没有加载进入到虚拟机,如果没有即加载这个类,如果有就不再加载,而当加载一个类进入到虚拟机的时候,虚拟机会先检测这个类的父类有没有加载进入到虚拟机,如果没有就加载,如果有就不加载,这种递归过程直到java.lang.Object类为止,因为java.lang.Object类没有父类。而当一个类加载进入虚拟机以后,虚拟机会对他进行初始化操作,初始化操作是执行初始化方法<clinit>()方法,这个方法由编译器自动完成,static{}块是这个方法的一部分。所以你第一次new这个类对象的时候,会执行类的static{}块内的代码,而父类先被加载,所以先执行父类的static块内的方法。而第二次new对象的时候,类都已经被加载了,所以不会再执行static块内的方法了。第二个问题:当两个接口有同名方法,而又被同一个类继承时会出现编译错误,所以你需要改掉方法名字,如果你无法改名字,那么你只能用组合的方式解决这个问题,一个类实现A,另一个类实现B,然后A或者B引用另外一个类的对象。 错了,static修饰的是静态变量,不是表态变量。 问题一,static就是要保证你第一次创建对象的时候,更恰当说是创建第一个对象之前执行一次,且一次!其他的纯粹是顺序问题,当然是父类的构造先于子类的,因为像猫和动物两种概念的关系,猫首先是一种动物。它必须要符合一个动物的条件,然后才是猫的条件。问题二优化? 老实说,从你问的第一个问题来看,你现在不适合理解接口。 我用java写了一个网络接收图片的程序,但为什么图片总是显示为空的?各位大侠帮小弟看看吧 io流的关闭顺序疑惑 菜鸟问问 类名 对象名 = new 类名(); ??? 一个多维数组的问题 请问有没有人用过命令行增强工具? 菜鸟请教:学习java需要在系统里安装哪些程序? Sun 的考试例题 答案没看懂 Jbuilder在WIN2000SERVER下怎么不能安装呀? tomcat 300分求完整code JAVA达人来帮帮忙吧
这是一个类加载到虚拟机的问题,当你new一个类的对象的时候,虚拟机会检测这个对象的类有没有加载进入到虚拟机,如果没有即加载这个类,如果有就不再加载,而当加载一个类进入到虚拟机的时候,虚拟机会先检测这个类的父类有没有加载进入到虚拟机,如果没有就加载,如果有就不加载,这种递归过程直到java.lang.Object类为止,因为java.lang.Object类没有父类。
而当一个类加载进入虚拟机以后,虚拟机会对他进行初始化操作,初始化操作是执行初始化方法<clinit>()方法,这个方法由编译器自动完成,static{}块是这个方法的一部分。
所以你第一次new这个类对象的时候,会执行类的static{}块内的代码,而父类先被加载,所以先执行父类的static块内的方法。而第二次new对象的时候,类都已经被加载了,所以不会再执行static块内的方法了。
第二个问题:
当两个接口有同名方法,而又被同一个类继承时会出现编译错误,所以你需要改掉方法名字,如果你无法改名字,那么你只能用组合的方式解决这个问题,一个类实现A,另一个类实现B,然后A或者B引用另外一个类的对象。
static就是要保证你第一次创建对象的时候,更恰当说是创建第一个对象之前执行一次,且一次!
其他的纯粹是顺序问题,当然是父类的构造先于子类的,因为像猫和动物两种概念的关系,猫首先是一种动物。它必须要符合一个动物的条件,然后才是猫的条件。问题二
优化? 老实说,从你问的第一个问题来看,你现在不适合理解接口。