java反射技术知识初步了解

关于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;
}



猜你喜欢

转载自blog.csdn.net/amuist_ting/article/details/80680368