java的反射

package com.tedu.day16;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * 反射student类,获取student类的class类
 */
public class ReflectionStudent01 {
    public static void main(String[] args) throws Exception {
        // 获取class对象
        //方式1:通过student类的对象去调用getClass方法
        Class  clazz1 = new Student().getClass();
        // 方式二 通过类名.class
        Class<Student> clazz2 = Student.class;
        // 方式三通过class类中forName(类路径(包名.类名))方法
        Class  clazz3 = Class.forName("com.tedu.day16.Student");
        System.out.println(clazz1);
        System.out.println(clazz2);
        System.out.println(clazz3);
        //获取类的包名
        System.out.println("包名为:"+clazz1.getPackage().getName());
        //获取反射类的类名
        System.out.println("类名为:"+clazz1.getSimpleName());
        //获取反射类的全限定名(包名.类名)
        System.out.println("全限定名称为:"+clazz1.getName());
        System.out.println("==============================");
        //获取构造方法
        Constructor c1 = clazz1.getConstructor();
        System.out.println(c1);
        // 获取全参构造方法
        Constructor[] c2 = clazz1.getConstructors();
        for (Constructor con :
                c2) {
            System.out.println(con);
        }
        // 获取属性
        Field name = clazz1.getDeclaredField("name");
        System.out.println(name);
        // 获取所有的成员变量
        Field[] dec = clazz1.getDeclaredFields();
        for (Field f :
                dec) {
            System.out.println(f);
        }
        System.out.println("------------------------------------------");
        // 获取类的方法
        Method study = clazz1.getMethod("study", String.class);
        System.out.println(study);
        System.out.println("所有的方法==============================");
        Method[] methods = clazz1.getMethods();
        for (Method me :
                methods) {
            System.out.println(me);
        }
        // 利用反射去获取到class对象(student类),并创建student对象
        System.out.println("获取对象=========================");
        Object o = clazz1.newInstance();
        System.out.println(o);
        System.out.println("创建student对象时调用全参构造");
        Constructor con = clazz1.getConstructor(String.class, int.class);
        // 通过带参构造去进行studnet对象创建
        Object o2 = con.newInstance("蔡恒", 30);
        System.out.println(o2);
        //想要获取student类中的set或者get,必须向下转型
        Student stu1 = (Student)o;
        stu1.setAge(29);
        stu1.setName("钱嘉菲");
        stu1.study("java");
    }
}
posted @ 2022-11-09 19:43  竹石2020  阅读(10)  评论(0编辑  收藏  举报