A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-刘心武 初级黑马   /  2012-9-7 23:47  /  1639 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马-刘心武 于 2012-9-8 22:30 编辑

public class Demo {
public static void main(String[] args) {
  ThisTest ths = new ThisTest();
}
}
class ThisTest
{
String s="A";
ThisTest(){
  this("s");
}
ThisTest(String s)
{
  this((int)'a');
  this.show(this.s);
}
ThisTest(int a,int b){
  this.show("B");
}
ThisTest(int a){
  this(10,20);
  this.show("C");
}
void show(String s){
  System.out.println(s);
}
}
this的使用有点乱,执行构造函数后,会有什么结果?this.show()中的this指的是什么? this.show(this.s)这句话怎么理解啊,蒙圈了

9 个回复

倒序浏览
占楼。。。。
回复 使用道具 举报
本帖最后由 彭润生 于 2012-9-8 00:18 编辑

public class Demo {
public static void main(String[] args) {
  ThisTest ths = new ThisTest();
}
}
class ThisTest
{
String s="A";
ThisTest(){
  this("s");
}
ThisTest(String s)
{
  this((int)'a');
  this.show(this.s);//第一个this是调用本类中的方法,括号里面的是你定义的String s,
}
ThisTest(int a,int b){
  this.show("B");
}
ThisTest(int a){
  this(10,20);
  this.show("C");
}
void show(String s){
  System.out.println(s);
}
}
当调用无参数的构造函数时,里面有this("s");会调用参数为String的构造函数,即ThisTest(String s) 然后这个构造函数会
调用参数接收一个int类型的构造方法,即ThisTest(int a);这个函数又会调用ThisTest(int a ,int b)的这个构造函数,不知道解决你的疑问没有?

回复 使用道具 举报
谁调用了this.show()谁就是代表了this
先执行的是无参构造函数,然后无参数构造函数会调用ThisTest(String s),
ThisTest(String s)又调用ThisTest(int a),当中 this((int)'a');就是指把字符a转化成整形传给ThisTest(int a)
之后的一次调用就不用再说了吧

而后this.show(this.s)是指调用了show方法,而参数是调用者this也就是ths的s变量,就是把ths的变量s的值作为参数传递给show方法执行

回复 使用道具 举报
构造函数用于对类的对象进行初始化。
程序中的4个构造函数参数列表不同,是重载。选择参数列表符合的调用。
ThisTest ths = new ThisTest(); 创建了一个对象,记住,ths指向该对象。
该对象使用构造函数初始化。因为参数列表为空,所以用第一个构造函数初始化。也就是执行
ThisTest()
{
  this("s");
}
执行语句this("s");
this指代所在类,this("s")相当于ThisTest("s");这又是一个构造函数。
参数是一个字符串,所以调用第二个构造函数,也就是执行
ThisTest(String s)
{
  this((int)'a');
  this.show(this.s);
}
先说this.show(this.s);相当于ths.show(ths.s);
ths.s是"A",ths.show("A");就是System.out.println("A");也就是输出A。
然后,(int)'a'把字符a转型成为int类型,而this((int)'a')相当于ThisTest((int)'a'),所以,这又是一个构造函数,调用第四个构造函数,也就是
ThisTest(int a){
  this(10,20);
  this.show("C");
}
this.show("C");输出C。
this(10,20)相当于ThisTest(10,20),又是一个构造函数,参数列表是两个int类型,调用第三个构造函数,也就是
ThisTest(int a,int b)
{
  this.show("B");
}
输出B。
所以,按照执行顺序,应该输出BCA。

确实很绕,按照程序的执行顺序多走几遍就明白了。
回复 使用道具 举报
呵呵,这么晚了还不去睡觉啊
回复 使用道具 举报
运行后的结果是:B  C  A ,当然中间应该换行。
this关键字代表的是调用该方法的实体对象,这里应该该类的对象了。
因为在创建该类对象的时候调用的是该类的默认构造函数,所以会先去找默认的构造函数,然后通过this()语句在去调用相应的构造函数。
因为函数不断的进行嵌套调用,且this()语句一定会在函数里面的第一行,所以打印的顺序和调用的顺序是相反的,所以会是B C A。
关于this关键字的用法和this()语句的用法毕老师说的很清楚啊,你在看看和练习练习就差不多了。
回复 使用道具 举报
this的调用过程如图:

this调用.png (42.03 KB, 下载次数: 36)

this调用.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马