注解
(对程序有检查和约束的作用)
1.不是程序本身,注解可以对程序做出解释
2.格式:@注释名
3.可以被其他程序读取的(比如编译器)
常用三个注解
@Override:修饰方法,声明此方法需要重写
@Deprecated :可以用来注解类、接口、成员方法和成员变量等,用于表示某个元素(类、方法等)已过时。当其他程序使用已过时的元素时,编译器将会给出警告。
@SuppressWarnings(关键字) :用于消除警告
还有元注解以及自定义注解,可见此文http://c.biancheng.net/view/7009.html
反射
(增加了程序的不安全性,但对现在的电脑来说是微乎其微的)
1.是Java被视为动态语言的关键
2.反射机制允许程序在执行过程中,借助Reflection API取得程序想要的任何类的内部信息,并能直接操作任意对象的内部属性和方法
反射方式:直接实例化一个对象,通过实例化对象去得到该对象的class类,从而得到该类的全部结构。
class类
1.是唯一的,每一个class都对应一个class类,例如class person{}、class PP{},它们每个class都有自己对应的一个class类。
2.父类和子类对应一个class类。class son extends father{},那么son类和father类是共同的一个class类,如下图所示。
3.每个class类有且只有一个class对象,且这个对象只能有系统创建。
4.每个类的实例都记得自己是由哪个class类创建的。
代码举例(三种常用方法获取class类)(参考上图):
1.Class cl1 = 父类1.class;(获取父类1的class类)
Class cl2 = 子类1.class;(获取子类1的class类)
System.out.println(cl1.hashCode());
System.out.println(cl2.hashCode());
2.Class cl1 = 父类1.getClass;(获取父类1的class类)
Class cl2 = 子类1.getClass;(获取子类1的class类)
System.out.println(cl1.hashCode());
System.out.println(cl2.hashCode());
3.Class cl1 = Class.forName(“父类1路径”)(获取父类1的class类)
Class cl2 = Class.forName(“子类1路径”)(获取子类1的class类)
System.out.println(cl1.hashCode());
System.out.println(cl2.hashCode());
最后他们的hashCode都一样,说明他们的class类都是一样的。
结合图一可推出,反射就是通过实例化一个对象,然后用.getClass()方法,得到该对象的class类(图二中的最顶层),从而得到该class类的全部结构
补充:实例化对象就是使用new关键字创建对象的过程。它会在内存空间的堆区申请一块存储区域,用于记录该对象独有的成员变量信息。