在同一个类中创建类的引用变量是否正确?它与使用new关键字的普通对象创建有何不同?

时间:2017-04-20 11:22:32

标签: java class

button.setTransform(true);

我们可以用两个变量执行类似的功能吗?

4 个答案:

答案 0 :(得分:4)

  

在其中创建类的引用变量是否正确?   同班同学?

是的,这是正确的

您将通过示例了解更多信息,请考虑您有一个班级人员

class Person {

    String name;
    int age;

    Person mother;
    Person father;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person(String name, int age, Person mother, Person father) {
        this.name = name;
        this.age = age;
        this.mother = mother;
        this.father = father;
    }

}

每个人都是有父母的人,母亲和父亲是人。

例如你:

Person p1 = new Person("Son Name", 22, 
       new Person("Mother name"), 45), new Person("Father name"), 50));

或者您可以像这样创建它:

Person mother = new Person("Mother name", 45);
Person father = new Person("Father name", 50);
Person son =    new Person("Son name", 22, mother, father);

就像你看到的那样,你可以像你想要的那样玩你的构造函数。

答案 1 :(得分:0)

如果使用new Test()初始化每个成员,则最终会得到无限递归。所以不,那是不可能的。

递归必须在某处停止,例如使用空值。

除此之外,使用与类本身相同类型的实例变量没有任何问题。这是一个完全正常的变量。

答案 2 :(得分:0)

如果您尝试执行以下操作,则只会出现无限循环(堆栈溢出错误):

Class Test {
   Test variable2 = new Test();
}

答案 3 :(得分:0)

您的变量都是实例变量,这意味着如果您创建它,它们属于Test的实例。但是,variable2总是会导致堆栈溢出错误。假设您执行new Test()

  

测试t1 =新测试(); - > t1.variable1初始化为null,t1.variable2初始化为new Test(); - > t1.variable2.variable2初始化为新的Test(); ...

它无休止地递归。因此,直接初始化实例变量不是一种选择。您必须通过setter或构造函数对其进行初始化。这完全有效。允许类具有自己类型的实例成员。毕竟,有一些用于面向对象的用例,其中某些东西可以包含一个或多个自身实例。树结构将是一个典型示例:每个节点可以包含许多子节点,这些子节点又可以包含更多子节点。

请注意,如果您将这些设置为静态,则可以立即初始化实例:

Class Test {
    static Test variable1 = null;
    static Test variable2 = new Test();
}

这些将是静态成员,属于测试,而不是特定的测试实例