JAVA中 内部类的相关问题 求梳理一遍程序运行过程~

packageOuter;classOuter{privateStringname="HelloWorld";publicvoidfun(){newInner(this)... package Outer;

class Outer{
private String name = "Hello World";
public void fun(){
new Inner(this).print();//这里的this到底代表什么 是哪里来的?
}
public String getName(){
return this.name;
}
}
class Inner{
private Outer out;
public Inner(Outer out){
this.out = out;
}
public void print(){
System.out.println("name = "+this.out.getName());
}
}
public class InnerClassDemo{
public static void main(String args[]){
new Outer().fun(); // new Outer()为什么这里可以直接写 一般要实例化不是应该这样Outer out = new Outer()写吗?
}
}
求高手梳理一遍程序的详细运行过程~~~很多地方不明白~
展开
 我来答
kq346635081
2014-02-26 · TA获得超过290个赞
知道小有建树答主
回答量:83
采纳率:0%
帮助的人:98.1万
展开全部
package Outer;

class Outer{
    private String name = "Hello World";
    public void fun(){
        Inner in = new Inner(this);
        in.print();
        //  暂时改成你熟悉的格式,方便你理解我最后说的执行顺序
        //  new Inner(this).print();  这里的this到底代表什么 是哪里来的?
        //  this代表的是当前对象,举个例子
        
        //  Outer o1 = new Outer();//这里的this代表的就是o1
        //  Outer o2 = new Outer();//这里的this代表的就是o2
        //  也就是说,你实例化的这个对象是谁,类中的this代表的就是谁
        //  或者你也可以粗略的理解成this在哪个类里,this就代表了哪个类的对象
        //  (当涉及到继承关系时,上面这句话就不一定了)
        
    }
    public String getName(){
        return this.name;
    }
}
class Inner{
    private Outer out;   
    public Inner(Outer out){ 
        this.out = out; 
    }
    public void print(){
        System.out.println("name = "+this.out.getName());
    }
}
public class InnerClassDemo{
    public static void main(String args[]){
        Outer out = new Outer();
        out.fun();//  暂时改成你熟悉的格式,方便你理解我最后说的执行顺序
        //  new Outer().fun(); 这样写叫做匿名对象
        
        //    有些对象创建出来我们只使用一次
        //    那么为了一个只使用一次的对象而起个变量名就显得很麻烦
        //    因此java提供了匿名对象的形式,这样写等效于
        //    Outer out = new Outer();
        //    out.fun();
        //    这样不就多起了一个变量名,多写了一行代码么
    }
}

接下来梳理一下执行顺序,程序从main开始执行

  1. Outer out = new Outer();    //实例化一个Outer类型的对象

    out.fun();    //并调用它的fun方法,去看fun方法

  2. Inner in = new Inner(this);    //实例化一个Inner类型对象,并将this传入

                                                //此时的this就相当于out,等效于Inner in = new Inner(out);

    in.print();    //并调用print方法,去看print方法

  3. 执行print方法(你是用in这个对象调用的print方法,那么该方法中的this代表的就是in这个对象),输出out的Name,也就是输出了Hello World

  4. 至此,程序执行完毕

百度网友7c7435af8e
2014-02-25 · TA获得超过253个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:133万
展开全部
第一个问题:this表示当前所在对象的引用,在你的代码中表示的就是Outer类的一个引用
第二个问题:你的注释中的做法也是可行的,但是有时候我不想知道一个对象的引用名,只想调用这个对象中的方法,就使用你的代码中的那种做法,new Outer()就是新建了一个Outer类,然后调用这个类中的方法,建议你赵本基础的书好好看看
追问
说实话,因为书看不懂才来问的..书上的解释都是理所当然 但是我就是不懂为什么可以这样..编程者东西总不能去死记硬背吧 所以我想要理解整个程序是怎么走的..能麻烦给梳理一遍吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
愤不顾肾
2014-02-25 · 超过10用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:21.3万
展开全部
好几年不干IT了,java却还记着:
这段代码就是要用lnner类打印出来OUTER这个类名字来
1、this代表所在的类的这个对象,也就是OUTER类。
2、你说的这种表达方式和例题里面一样,只不过:例题里面直接声明了没有赋予变量名的OUTER类并同时调用了fun方法。而你写的那段只声明了变量,却没有调用fun方法
追问
有点明白了 方便能帮小弟梳理一遍程序是怎么走的吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式