我如何能够使用This()获得2个输出;

时间:2019-03-18 07:41:05

标签: java constructor this

是否可以通过使用this();获得此代码的2输出?我对this();不太熟悉,因此请提供解释可以帮助我理解这个概念。我要查找的输出是222 Morty和222 Morty 25,或者是否有可能获得111 Rick和222 Morty25。

class Student5 {  
    int id;  
    String name;  
    int age;  

    public Student5(int i,String n) {  
        id = i;  
        name = n;  
    }  

    public Student5(int i,String n,int a) {
        this(i, n);
        id = i;  
        name = n;  
        age=a;  
    }  

    void display() {
         System.out.println(id+" "+name+" "+age);
    }  

    public static void main(String args[]) {  
        // Student5 s1 = new Student5(111,"Rick");  
        Student5 s2 = new Student5(222,"Morty",25);  
        // s1.display();
        s2.display();
    }
}  

5 个答案:

答案 0 :(得分:0)

start + 30 == current_time

答案 1 :(得分:0)

您可以按照

    <p:remoteCommand name="selectImage" actionListener="#{controller.selectImage}"/>

答案 2 :(得分:0)

关键字 THIS 是Java中的一个引用变量,它引用当前对象。

让我们从示例中了解此关键字:

'__EVENTTARGET'

第二,显示方法将显示分配给该对象的值。如果您只想显式打印ID和名称,则可以创建一个新的显示方法。

(^\d{10}$)|(^\d{2}\-\d{8}$)|(^\d{3}\-\d{7}$)|(^\d{4}\-\d{6}$)

但是,在您的情况下,由于没有针对Rick记录的年龄数据,因此唯一的显示也将起作用。

class Example {
   int a,b;

   Example(int a, int b) {
       //During execution, the compiler is confused. Whether "a" and "b" on the left side
       //of the assigned operator is the instance variable or the local variable.
       // a=a; 
       // b=b;
       // To overcome this confusion we use THIS keyword to differentiate between
       // instiante variable and parameter varaible.
       this.a = a;
       this.b = b;
   }
}
  

运行:

     

111 Rick

     

222莫蒂25

答案 3 :(得分:0)

这是指当前对象。

当您将对象创建为new Student5(222,"Morty",25);时,它将调用具有参数(int, String, int)的Student5类构造函数 即new Student5(int,String,int); 您的情况是

public Student5(int i,String n,int a){
this(i, n);
    id = i;  
    name = n;  
    age=a;  
    }  

现在您可以使用i,n,a初始化变量。 当然您已经做到了,但是您在以下步骤中两次分配了值

this(i, n);
    id = i;  
    name = n;  
    age=a;

现在将其更改为

public Student5(int i,String n,int a){
   this(i, n); 
    age=a;  
    }  

在这里this(i,n)检查带有Student5(int,String)类型的客户。 因此,转到下面的代码并进行初始化,如果您错过了构造函数,则会产生编译错误。

 public Student5(int i,String n){  
        id = i;  
        name = n;  
        }

display()打印输出取决于您调用该方法的对象。

Student5 s1 = new Student5(111,"Rick"); 
  s1.display()

打印111里克。       因为您要在s1上调用显示,所以它不知道s2对象数据

Student5 s2 = new Student5(222,"Morty",25);  
s2.display()

打印222 Morty 25

因为您正在s2上调用显示,所以它不知道s1对象数据

回答您的问题“是否有可能获得111 Rick和222 Morty 25。”

是的,因为两个对象都可用,所以可以在main方法中进行操作。 在两个对象上调用显示方法。

答案 4 :(得分:0)

简短的答案是

在创建2个Student对象时,如下所示:

Student5 s1 = new Student5(111,"Rick");  
Student5 s2 = new Student5(222,"Morty",25);

它们没有任何链接。
因此,不可能像这样从s2 Student的{​​{1}}打印s1 display()的输出。

链接可以通过在您的Student上添加 buddy 引用来实现。

Student5

这将打印

  

222莫蒂25
  111瑞克&222莫蒂25
  222 Morty 25&111 Rick


现在,关于您的 class Student5 { int id; String name; int age; Student5 buddy; public Student5(int i,String n) { id = i; name = n; } public Student5(int i,String n,int a) { this(i, n); age = a; } public void setBuddy(Student5 b) { this.buddy = b; b.buddy = this; } private String getInfo() { StringBuffer buff = new StringBuffer(); buff.append(id+" "+name); if (age > 0) buff.append(" "+age ); return buff.toString(); } public void display() { if (buddy != null) System.out.println(this.getInfo() +" & "+ buddy.getInfo()); else System.out.println(this.getInfo()); } public static void main(String args[]) { Student5 s1 = new Student5(111,"Rick"); Student5 s2 = new Student5(222,"Morty",25); s2.display(); s1.setBuddy(s2); s1.display(); s2.display(); } } 困惑:

  • this是Java对象中对当前对象的Java引用,例如this
  • this.name是对当前Object的无参数构造函数的引用。

通过构造函数重载(具有不同类型/参数数量的构造函数)
构造函数链接(从另一个重载的构造函数调用一个构造函数)
您可以避免重复代码。

同时使用this()this的夸大示例:

this()

如果您调用public Student5() { this.age = 0; } public Student5(int i) { this(); this.id = i; } public Student5(int i, String n) { this(i); this.name = n; } public Student5(int i, String n, int a) { this(i, n); this.age = a; } ,则执行链如下:

  

学生5(222,“ Morty”,25)
  调用构造函数-> Student5(222,“ Morty”)
  调用构造函数-> Student5(222)
  调用构造函数-> Student5(),将年龄设置为0
  返回到设置id的Student5(222)
  返回到设置名称的Student5(222,“ Morty”)
  返回设置年龄的Student5(222,“ Morty”,25)