您的位置:首页 > 其它

一种角度理解private,this,super关键字和Class类

2012-10-10 19:43 330 查看
目前,正在学习java核心技术卷,算是正式开始了自己前面定的计划。买到书时,看看封面,我乐了。上写着csdn java大版主隆重推荐。看来这书是买对了!我的笔记以自己在阅读时的收获为主,不求面面俱到。今天主要谈以下几点新认识:

1、this 与 super 的比较

2、Class 的理解

3、private 的理解

1、this 与 super 的比较。

首先,想理解 this,得知道 java 方法调用中的显式参数和隐式参数的概念。如下面这句话 person.setName("zhangsan") 。在这句话中有一个方法调用——setName,该方法有一个显式参数,字符串"zhangsan",实际上还有一个参数,就是前面的person对象,这个参数就是隐式参数。想想很容易明白,一个方法被调用了,那么该方法肯定得知道是哪个对象调用它了吧。在方法体内,这个对象就用 this 来表示了。所以,this
实际上是一个对象引用。super 呢,它只是一个关键字,这个关键字的使用语法为 super.method(...) 。它的意义就是告诉编译器去调用超类中的 method 方法,一般用在子类中,尤其是子类覆写了超类中某个方法时,若想调用超类中的同名方法,就只能靠 super 了。以上是 this 和 super 的明显区别。除此之外,java的设计者为了充分发挥这两个关键字的作用,又给它们俩找了点别的活,那就是调用构造方法。当一个类中某个构造方法需要调用该类的另一个构造方法时,可以用如下语法: this(...)
。当子类需要调用超类中某个构造方法时,则可用: super(...)。看看,这里 this和 super 的作用和语法都很相似。很多人看到这一点,就把二者弄混了。



2、Class的理解

在反射机制中,Class是一个很重要的类,该类的实例对象用来表示一个类型的特定信息。注意:这里讲的是类型的特定信息,不是类的特定信息哦。为什么这么讲,请看如下代码:int.class ; double[ ].class ;这两句都是正确的。int.class是Class的一个实例对象,该对象中存有 int 的特定信息;同理,double[ ].class也是Class的一个实例对象,该对象中存有double数组的相关信息。大部分情况下,Class的实例对象表示的是一个类的特定信息,但是它的实际意义确不只于此。



3、private的理解

在一个类中,声明为 private 的域为该类的私有域,该域对其他的类来讲是不可见的,只能通过该域的set/get方法访问到该域。注意,这里指的是该类的私有域,而不是该类的对象的私有域;是对其他的类不可见,而不是对其他的类的对象不可见。单独提出这两点干什么呢?就是想说明,同类的两个对象,这两个私有域是互相可见的。假设Person类中有一个私有域 age ,且该类中有一个方法 method(Person p){...}。在该方法中是可以有这样的语句的:p.age
。乍一看,这不是破坏了封装性了吗?但仔细一想,也不是这样,因为这是在Person的方法中啊,是同类的方法中,而不是其他类的方法中。封装只是对其他类不可见,同类的对象之间是可见的。也就是说,类的方法可以访问该类所有对象的所有私有域。感觉只有理解到这一点,才能讲理解了private的作用。

以上,是最近学习的一点收获,希望对正在和我一样学习 java 的朋友有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: