中易网

java里的this 调用其他方法。

答案:3  悬赏:70  
解决时间 2021-04-28 00:08
  • 提问者网友:柠檬香
  • 2021-04-27 11:14
this();明明是位于第一句,eclipse还是报错说this();必须位于第一句为什么?
最佳答案
  • 二级知识专家网友:一起来看看吧
  • 2021-04-27 12:15
原因很简单,必须确保对象已经正确地被构造,如果不强制
this()在第一句,就有可能发生这样的事情:
public class TestThis {
public TestThis(int i){

}
public TestThis(){
test();//这句话是不应该的,因为这个对象还没有正确被初始化你就调用了
this(1);
}
public int test(){
return 1;
}
}其实如果在对象没有正确初始化之前都是不能够调用本对象的方法或属性

public class TestThis {
int j;
public TestThis(int i){

}
public TestThis(){
this(j);//这是错误的,对象还没有正确初始化
}
public int test(){
return 1;
}
}public class TestThis {
int j;
public TestThis(int i){

}
public TestThis(){
this(test());//这是错误的,对象还没有正确初始化
}
public int test(){
return 1;
}
}其实这涉及到一个问题,如果this()可以放在构造函数的任意一句中,那么编译器就很难辨别你到底有没有调用正在初始化的对象中的方法或属性

但是在网上看到C#的构造函数中是可以这样做的,所以这个实现起来应该也不是很困难,不过java是这样规定的,我个人也相信这个绝对不是什么技术上的难题,不过是java虚拟机的标准罢了,没有什么具体理由可以讲,但是必须记住,在构造函数中调用this()或者super()之前都不应该使用该类或者是父类的任何属性和方法
全部回答
  • 1楼网友:星星坠落
  • 2021-04-27 13:41
可以的,它可以调用本类的私有属性,那为什么不可以调用本类的其它方法呢?而且试过了,的确可以调用。 public class person { private string name = "aa"; public person(){ setname("dsd"); } public void setname(string name) { this.name = name; } public static void main(string args[]){ person p=new person(); system.out.println(p.getname()); } }
  • 2楼网友:伤口狠精致
  • 2021-04-27 13:34
之类的非静态方法调用可以省略这个 但是一般我们不这样做,因为写作似乎??在任何地方的那种清晰的概念,每个人都期待更好的理解
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息