02_JavaSE之OOP--面向对象(对象的内存图、匿名对象、this)
面向对象(二)
一、对象在内存中的状态
1.以下面的代码为例
1 class Demo { 2 3 public static void main(String[] args) { 4 //创建对象 5 Person p = new Person(); 6 7 //调用属性并赋值 8 p.name = "李白"; //人的姓名赋值 9 p.age = 49; //人的年龄赋值 10 11 //调用学习的方法 (调用行为) 12 p.study(); 13 14 } 15 16 } 17 18 //人的 19 class Person { 20 //成员变量 21 String name; //姓名 22 int age; //年龄 23 24 public void study { //人在学习 25 System.out.println("年龄为" + age + "的" + name + "正在学习"); 26 } 27 }
具体的执行方法,如图:
二、匿名对象
接下来谈的只是简单的了解,并没有深入研究。
1.匿名对象是什么
所谓匿名对象也就是没有名字的对象。什么又叫有名字的对象呢?如:Person p = new Person()。这个就是有名字的对象,他的名字叫p。而直接new Person()就是没有名字的对象。
2.匿名对象的应用场景是什么呢,它如何用呢?
场景:匿名对象主要用在仅仅只调用一次的时候。那么他有什么好处呢?节省代码。
匿名对象也可以作为参数传递。如:一个方法 setXXX( new Person() )。
同时应知道,调用一次之后,匿名对象就是垃圾,会被垃圾回收机制回收。
用法:以上面的代码为例。
1 Person p = new Person(); 2 p.study(); 3 4 //匿名对象调用 5 new Person().study();
三、this的用法
this是一个关键字,代表着当前对象的引用。也就是代表当前对象。
正式说this之前我们先来了解一下private这个关键字。
private是干什么呢?他表面的意思是私有的,为了类的属性不能被人随意修改(出于安全性考虑),因此有了private,protect,default,public等关键字。private是私有的,我们不能直接通过创建对象p,p.name赋值,那么我们如何赋值呢。这时候我们就得在类的内部提供一个方法去给他赋值,同时提供一个获取的方法即set/get方法。
1 public class Person { 2 //成员变量 3 String name; //姓名 4 int age; //年龄 5 6 //set and get方法 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 } 23 24 class Demo2 { 25 public static void main(String[] args){ 26 Person p = new Person(); 27 p.setAge(1); 28 p.setName("苏轼"); 29 30 } 31 }
这个时候this就代表着当前对象的引用,this.name就是Person的成员变量name.用来区分成员变量和局部变量重名问题。
如有错误之处,欢迎指正。
邮箱:it_chang@126.com
stay hungry,stay foolish.