------------------------------------------------------------
成员变量和局部变量
作用域:成员变量作用于整个类中,局部变量作用于函数,或语句中
内存:成员变量存储在堆内存,局部变量存储在栈内存
--------------------------------------------------------------------------------------------------
匿名对象
new Car();
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165529754-1607083401.png)
如下图,匿名new了3个匿名对象,但实际上3个对象的关系是不相关的
new一个,就在栈内存中开辟一个内存空间
当new第二个的时候,第一个就变成了垃圾
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165600410-38101914.png)
匿名对象的使用方式:
1.调用对象的方法,且只调用一次的时候;
2.作为实际参数
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165625660-598517114.png)
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165645895-1068400780.png)
如果在上面的例子中,直接show(new Car());则在栈内存中开辟的空间如图
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165723129-431112167.png)
当show方法执行结束后,show在栈内存的空间将会被回收,此时,堆内存中new的空间没有了指向,就变成了垃圾。
----------------------------------------------------------------------------------------------------
封装
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165754754-1067621091.png)
将age的权限设为private,
new出来的对象就不能直接访问age了,
必须通过类中的方法set/getage()来访问
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165820535-224420657.png)
----------------------------------------------------------------------------------------------------
构造代码块
对象已建立就会运行
目的:给所有对象进行统一初始化,
而构造函数是给不同的对象分别初始化的
构造代码块中定义的是不同对象共性的初始化内容
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165844738-724738078.png)
-------------------------------------------------------------------------------------------------
this关键字
this到底指代什么
this指代的是当前的对象,每次new一个对象,就代表那个new出来的对象
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165910285-133846902.png)
如: Person p = new Person (“lisi”);
则,构造方法中的this关键字则指代 p,
this.name = name --> p.name = name
----------------------------------------------------------------------------
构造函数间调用,要用this关键字
如:按常理调用person(String),在Person(String,age)里直接写Person(name)即可,
但是,由于是调用构造函数,所以要这样:this(name);
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165934707-1512536300.png)
![](https://images2015.cnblogs.com/blog/623218/201604/623218-20160412165955973-354070342.png)
第一行?-->因为初始化动作要先执行