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()写吗?
}
}
求高手梳理一遍程序的详细运行过程~~~很多地方不明白~ 展开
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()写吗?
}
}
求高手梳理一遍程序的详细运行过程~~~很多地方不明白~ 展开
3个回答
展开全部
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开始执行
Outer out = new Outer(); //实例化一个Outer类型的对象
out.fun(); //并调用它的fun方法,去看fun方法
Inner in = new Inner(this); //实例化一个Inner类型对象,并将this传入
//此时的this就相当于out,等效于Inner in = new Inner(out);
in.print(); //并调用print方法,去看print方法
执行print方法(你是用in这个对象调用的print方法,那么该方法中的this代表的就是in这个对象),输出out的Name,也就是输出了Hello World
至此,程序执行完毕
展开全部
第一个问题:this表示当前所在对象的引用,在你的代码中表示的就是Outer类的一个引用
第二个问题:你的注释中的做法也是可行的,但是有时候我不想知道一个对象的引用名,只想调用这个对象中的方法,就使用你的代码中的那种做法,new Outer()就是新建了一个Outer类,然后调用这个类中的方法,建议你赵本基础的书好好看看
第二个问题:你的注释中的做法也是可行的,但是有时候我不想知道一个对象的引用名,只想调用这个对象中的方法,就使用你的代码中的那种做法,new Outer()就是新建了一个Outer类,然后调用这个类中的方法,建议你赵本基础的书好好看看
追问
说实话,因为书看不懂才来问的..书上的解释都是理所当然 但是我就是不懂为什么可以这样..编程者东西总不能去死记硬背吧 所以我想要理解整个程序是怎么走的..能麻烦给梳理一遍吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好几年不干IT了,java却还记着:
这段代码就是要用lnner类打印出来OUTER这个类名字来
1、this代表所在的类的这个对象,也就是OUTER类。
2、你说的这种表达方式和例题里面一样,只不过:例题里面直接声明了没有赋予变量名的OUTER类并同时调用了fun方法。而你写的那段只声明了变量,却没有调用fun方法
这段代码就是要用lnner类打印出来OUTER这个类名字来
1、this代表所在的类的这个对象,也就是OUTER类。
2、你说的这种表达方式和例题里面一样,只不过:例题里面直接声明了没有赋予变量名的OUTER类并同时调用了fun方法。而你写的那段只声明了变量,却没有调用fun方法
追问
有点明白了 方便能帮小弟梳理一遍程序是怎么走的吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询