java中的this问题?
publicclassF{publicvoida(Objectargs1){}publicvoidb(Stringargs2){this.a(args2);此处this调...
public class F {
public void a(Object args1) {
}
public void b(String args2) {
this.a(args2);
此处this调用方法有什么用,如何才能让这东西输出一个结果
}
public static void mian(String[] args) {
new F().b(null);
}
} 展开
public void a(Object args1) {
}
public void b(String args2) {
this.a(args2);
此处this调用方法有什么用,如何才能让这东西输出一个结果
}
public static void mian(String[] args) {
new F().b(null);
}
} 展开
1个回答
展开全部
我理解的是,this代表这个类本身,对于F.java这个类而言,相当于在说“我”,方法b中调用了this.a(),可以理解为方法b调用了“我的a方法”。
对于这个例子而言,其实加不加this,结果都一样,但对于这个例子就有用了:
假设有一个类叫G.java,其拥有一个和F.java一模一样的方法a:
public class G {
public void a(Object args1) {
}
}
并且此时,F继承自G:
public class F extends G{
public void a(Object args1) {
}
public void b(String args2) {
this.a(args2);
super.a(args2);
}
此时注意我上面写的b方法,b方法中既要调用F自己的a方法,又要调用父类G中的a方法,为防止出现歧义,我们在调用F的a方法时,就使用this作为修饰;调用G的a方法时,就使用super作为修饰,这样就一目了然不是吗。
然后如果不加this,比如b方法定义为:
public void b(String args2) {
a(args2);
}
其实默认就是调用了F自身的a方法,可以理解为不加this时,java会默认给它加上this。
另外说一下你的例子如何输出一个东西,你需要在你的a方法里加上比如:
public void a(Object args1) {
System.out.println(args1.toString());
}
在你的main函数中不要传入null,否则将引起空指针异常,你可以传入比如:
public static void mian(String[] args) {
new F().b("哈哈哈");
}
这样运行时最终会在控制台输出“哈哈哈”
对于这个例子而言,其实加不加this,结果都一样,但对于这个例子就有用了:
假设有一个类叫G.java,其拥有一个和F.java一模一样的方法a:
public class G {
public void a(Object args1) {
}
}
并且此时,F继承自G:
public class F extends G{
public void a(Object args1) {
}
public void b(String args2) {
this.a(args2);
super.a(args2);
}
此时注意我上面写的b方法,b方法中既要调用F自己的a方法,又要调用父类G中的a方法,为防止出现歧义,我们在调用F的a方法时,就使用this作为修饰;调用G的a方法时,就使用super作为修饰,这样就一目了然不是吗。
然后如果不加this,比如b方法定义为:
public void b(String args2) {
a(args2);
}
其实默认就是调用了F自身的a方法,可以理解为不加this时,java会默认给它加上this。
另外说一下你的例子如何输出一个东西,你需要在你的a方法里加上比如:
public void a(Object args1) {
System.out.println(args1.toString());
}
在你的main函数中不要传入null,否则将引起空指针异常,你可以传入比如:
public static void mian(String[] args) {
new F().b("哈哈哈");
}
这样运行时最终会在控制台输出“哈哈哈”
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询