1.Car c = new Car();
Car c2 = new Car();
1> c 和 c2之间的区别?
public static void main(String[] args) {
// TODO Auto-generated method stub
Car c = new Car();
Car c2 = new Car();
System.out.println(c == c2);
}
}
class Car{
int number = 4;
String color = "red";
}
输出结果:false
表明,c和c2两个是不同的存储空间。因为在堆中的位置不一样。
2> 匿名内部类,new Car();
使用规则:1.如果是匿名内部类使用一次,那么用匿名内部类比较合适。
2.如果是多次要使用匿名内部类,就要给匿名内部类命名,不然在内存中就是垃圾了。
3>java把程序执行的流程信息都放在了栈中,可以画出堆栈执行流程图。
总结:堆中放实例化的对象,栈中放执行流程的方法信息。如果函数中包含函数,比如函数A中调用函数B,函数B中调用函数C,那么,c 函数是属于栈顶,b函数是属于栈顶下面的那个,A函数是属于栈底的那个元素。
意思就是说明,C函数最新执行完成,然后就是B函数,再然后就是A函数。
2.封装:
3.this关键字,
1>表示本类对象的引用,用户传入参数同名的情况。
2>this();表示可以调用本类的构造函数,也可以传值(“hhhh”);
3>什么this();要放在第一行?如何不放在第一行,会有什么情况发生?
this.name = name;
this();
那么这段代码肯定会报错,因为,this()只能在构造函数中互相调用,所以,在调用this()之前已经初始化了 this代表的对象。
本来,this.name 已经初始化了,this类的name属性,而打印的时候,this();什么都没有。所以不符合逻辑。