加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

从Java中的构造函数调用的静态方法

发布时间:2020-12-15 04:45:57 所属栏目:Java 来源:网络整理
导读:关于 Java静态方法的问题. Animal() { this(makeRandomName()); } 我在Java中有这个代码,在创建动物对象时调用它: 动物a =新动物() makeRandomName是一个方法,它使用Math.random()返回从String数组值中随机获取的String. 如果我没有将方法makeRandomName指
关于 Java静态方法的问题.

Animal() 
{ 
    this(makeRandomName());          
}

我在Java中有这个代码,在创建动物对象时调用它:
动物a =新动物()
makeRandomName是一个方法,它使用Math.random()返回从String数组值中随机获取的String.
如果我没有将方法makeRandomName指定为静态,我会收到此错误(你能解释原因):

Exception in thread “main” java.lang.RuntimeException: Uncompilable
source code – cannot reference this before supertype constructor has
been called

此外,当Animal构造函数定义如下:

Animal() 
{
    this.name = makeRandomName();           
}

无论makeRandomName是静态还是非静态,我都不会收到任何错误.为什么?
有什么区别
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()在此时是可访问的,即使它被声明为非静态因为该对象已经构造.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读