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