一种角度理解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 的朋友有所帮助。
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 的朋友有所帮助。
相关文章推荐
- Java中 this 和 super 关键字理解
- 本人对this super static 关键字的理解
- parent,son深刻理解this,super关键字
- Java关键字this、super使用总结
- java学习笔记(八):继承、extends、super、this、final关键字
- Java关键字this、super使用总结
- java this和super关键字 有什么作用
- java中关键字super和this的使用
- this和super关键字的用法
- java super关键字理解
- php杂谈【基础篇】之_11.理解PHP中this,self,parent三个关键字用法
- JAVA final 、super 关键字以及继承关系中父类与子类实例变量初始化的 理解
- 静态方法为什么不能使用this和super关键字
- Java关键字介绍之this与super
- Java关键字this、super使用总结
- Java基础进阶_day02_(类的组合,继承,this与super关键字)
- this 和 super关键字
- JAVA基础_简析Java中的new,this,super,final关键字
- 黑马程序员--this和super关键字
- this引用 和super关键字的用法