关于java反射知识学习记录:
所有的框架技术最核心的技术就是反射支持
* 1.反射源头------Class类
* java.lang.Class类是进行反射操作的源头所在,所有的反射操作都是通过
* 这个类展开的,首先观察类的定义结构:
* 类的声明:public final class Class<T> extends ....
* 泛型在反射之中是非常糟糕的
* 这个类中的构造方法不能够被直接使用(被私有化),要想取得实例化方法
* 在java中有三种方法:
* A.利用Object类中的getClass()方法
* 需要明确的是,在任何的开发之中,这种调用getClass()的方法很少会出现在
* 直接的编写形式上,如果想要使用它,也必须结合特定的环境
* B.使用"类.class"的形式取得反射的实例化对象
* 这样的操作形式只有在框架技术上才会使用到
* 以上两种方式都有一个本质的相同点:类必须首先存在,而后才可以进行反射的调用
* C.利用Class类提供的方法实例化对象
* 方法:public static Class<?> forName()
* 利用forName()方法进行Class类对象取得,其最大的特征是可以在类不存在的时候保持
* 程序编译的正确性
* 2.利用反射实例化对象
* 如果要想实例化一个对象,那么最直观的做法一定是使用关键字new完成,
* 但是从一个优秀的软件框架来讲,是不能够使用new(它应该是出现最少的关键字),
* 主要是因为所有的开发不能够与具体的类型耦合在一起
* 在面向对象的设计过程之中一致强调一个观点:避免耦合操作
* 3.实际上Class类最大的功能是可以完全去解剖一个类,例如在类定义的时候往往需要
* 编写如下的内容:
* |-类所在的包(public Package getPackage())、
* |-类的声明方式(都在Class里面,取得完整类名称(包.类)getName()会返回包名称,只取得类名称getSimpeName())、
* |-类所继承的父类(取得父类getSuperclass())
* |-类所实现的接口(取得所有的父接口getInterfaces())
* Class是一切的操作源头
public class ClassDemo {
public static void main(String[] args) throws Exception {
// Date date=new Date(); //实例化类对象
//// Class<?> cls=date.getClass();//取得Class类对象
//// Class<?> cls=java.util.Date.class;
// Class<?> cls=Class.forName("java.util.Date");
// System.out.println(cls);
// Dept dept=new Dept();//调用的是无参构造
// System.out.println(dept);
//功能完全相同的操作可以利用反射机制来进行处理,在Class类里面提供有
//如下一个方法:实例化对象 public T newInstance()
// Class<?> cls=Class.forName("com.lyt.vo.Dept");
// Object obj=cls.newInstance();//实例化对象
// System.out.println(obj);
/*Class<?> cls=Class.forName("com.lyt.vo.Dept");
System.out.println("包名称:"+cls.getPackage().getName());
System.out.println("类名称:"+cls.getName());
System.out.println("最简短的类名称:"+cls.getSimpleName());
System.out.println("取得父类:"+cls.getSuperclass().getSimpleName());
Class<?>[] icls=cls.getInterfaces();//取得全部接口
for(int i=0;i<icls.length;i++){
System.out.println(icls[i].getSimpleName());
}*/
package com.lyt.vo;
import java.util.Date;
//import java.io.Serializable;
//interface Message{
//}
interface Info{
public static final String msg="www.mldn.cn";
}
class Message{
private String title;
private Date pubdate;
}
public class Dept extends Message implements Info{
// public Dept(){
// System.out.println("----------Dept----------");
// }
// @Override
// public String toString() {
// // TODO Auto-generated method stub
// return "这是一个部门对象";
// }
// public Dept()throws NullPointerException,NumberFormatException{
//
// }
// public Dept(String name,int years)throws NullPointerException{
//
// }
// public Dept(String name,int year){
// System.out.println("===="+name+"====="+year);
// }
// private String dname;
// private String loc;
// //假设有200个String类型的属性
// public void setDname(String dname){
// this.dname=dname;
// }
// public String getDname(){
// return dname;
// }
// public void setLoc(String loc) {
// this.loc = loc;
// }
// public String getLoc() {
// return loc;
// }
// @Override
// public String toString() {
// return "Dept [dname=" + dname + ", loc=" + loc + "]";
// }
private Integer deptno;
private String dname;
}