java虚拟机:05_class类型对象(反射)

Class类型对象,就是把java代码的字符串,解析成Class对象存起来,可以单项取和操作。类似把student信息串解析成Student对象

对比项 webdriver 反射
对象 driver class
获取方式 new ChromeDriver() 类名.class
实例变量名.getClass()
类加载器:Class.forName("包名.类名")
处理元素 标签 包、类名、构造器、字段、方法、注解、继承的父类、实现的接口
封装类 WebElement 包:Package
构造器:Constructor
字段:Field
方法:Method
注解:Annotation
类、父类、接口:Class
package com.guoyasoft;

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

import com.guoyasoft.implement.Student;

public class ReflectMethon {
    public static void main(String[] args) throws Exception {
//      // 1、获取class对象
//      Class c1 = StudentWL.class;
//
//      StudentWL s = new StudentWL();
//      Class c2 = s.getClass();

        // 创新点:允许启动程序的时候,可以没有类,运行过程中手动加载到内存
        Class c = Class.forName("com.guoyasoft.implement.StudentWL");

        // 2、获取包名,反射里面,每一种java元素,都会封装成一个类
        Package p = c.getPackage();
        String packageName = p.getName();
        System.out.println("package name =" + packageName);

        // 3、获取类名、父类和接口
        Class superClass = c;
        while (superClass != null) {
            System.out.println("super class =" + superClass.getName());
            superClass = superClass.getSuperclass();
        }

        Class[] interfaces = c.getInterfaces();
        for (Class c1 : interfaces) {
            System.out.println("接口名称:" + c1.getName());
        }

        // 4、获取构造器、实例化
        Constructor constructor = c.getConstructor();
        Student wl = (Student) constructor.newInstance();

        // 5、获取字段、设置、取值
        Field[] fields = c.getFields();
        for (Field f : fields) {
            System.out.println("字段名:" + f.getType().getName() + " "
                    + f.getName());
        }
        
        Field name=c.getField("name");
        name.set(wl, "吴令");
        Field age=c.getField("age");
        age.set(wl, 23);
        System.out.println("反射设置:"+wl.toString());

        // 6、获取方法
        Method[] methods = c.getDeclaredMethods();
        for (Method m : methods) {
            System.out.println("方法名:" + m.getReturnType().toString() + " "
                    + m.getName() + "(" + m.getParameterTypes() + ")");
        }
        
        Method doHomeWork=c.getMethod("doHomeWork", String.class);
        doHomeWork.invoke(wl, "反射调用method");
        
        Method learn=c.getMethod("learn", String.class);
        learn.invoke(wl, "法语");
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容