从Java中的构造函数调用的静态方法
关于
Java静态方法的问题.
Animal() { this(makeRandomName()); } 我在Java中有这个代码,在创建动物对象时调用它:
此外,当Animal构造函数定义如下: Animal() { this.name = makeRandomName(); } 无论makeRandomName是静态还是非静态,我都不会收到任何错误.为什么? 我之前从未见过这种语法(method_name()),我只见过this.instance_variable = value,所以我有点困惑.我确信这与超级构造函数和调用方法的顺序有关,但是在这种情况下看到方法和构造函数的专家分析以及调用方法的顺序会很棒.提前谢谢了! 我被要求发布整个代码: public class Animal { String name; Animal (String n) { this.name = n; } Animal() { this(makeRandomName()); //this.name=makeRandomName(); } static String makeRandomName() { int x = (int) (Math.random()*5); String l[] = new String[] {"Zlatan","Ibra","Edinson","Gigi","T"}; return l[x]; } public static void main(String [] args) { Animal a = new Animal(); Animal b = new Animal("M"); System.out.println(a.name); System.out.println(b.name); } } 解决方法
对于第一个问题 – makeRandomName()必须指定为static的原因是因为makeRandomName()是一个实例方法,并且在构造函数中调用super之前将无法访问它,这会导致类被初始化.你试图做的是在调用super初始化类之前调用??makeRandomName(),从而导致编译错误.
对于第二个问题 – 有一个对super()的隐式调用;在你的this.name = makeRandomName();的声明之前.超(…);必须始终是构造函数中的第一个语句,即使您没有显式地编写它.因此,第二个构造函数的实际代码是这样的: Animal() { super(); this.name = makeRandomName(); } makeRandomName()在此时是可访问的,即使它被声明为非静态因为该对象已经构造. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |