Java笔记_基础_反射

类加载器: ClassLoader

用来加载一个类的对象

Bootstrap ClassLoader: 启动类加载器, Platform的父类加载器
Platform ClassLoader: 平台类加载器, System的父类加载器
System ClassLoader: 系统类加载器

方法返回值说明
ClassLoader.getSystemClassLoader()构造方法获取系统类加载器
getParent()ClassLoader获取父类加载器
getResource(String str)URL根据 str路径 加载一个类
getResourceAsStream(String str)InputStream根据 str路径 加载一个类 获取其字节流
import java.net.URL;

public class Demo {
    public static void main(String[] args) throws Exception {
        URL url = ClassLoader.getSystemClassLoader().getResource(""); //项目根路径的 URL
        System.out.println(url);
        System.out.println(url.getFile()); //根据 URL 获取文件路径
    }
}

运行结果:

file:/F:/java/text/target/classes/
/F:/java/text/target/classes/

Class

Class: 类的字节码文件
Class对象: 类的对象,可以直接对类进行操作

方法返回值说明
Class.forName(String str)构造方法根据 str全类名 获取对象
类名.class构造方法获取一个类的Class对象
对象.getClass()构造方法获取对象的Class对象
getClassLoader()ClassLoader获取class类的类加载器
getResource(String str)URL根据 str路径(相对于该文件) 加载一个类
getResourceAsStream(String str)InputStream根据 str路径(相对于该文件) 加载一个类
getConstructors()Constructor[]返回所有公共的构造方法对象的数组
getDeclaredConstructors()Constructor[]返回所有构造方法对象的数组
getConstructor(Class c)Constructor返回具有形参 c 的公共的构造方法对象
getDeclaredConstructor(Class c)Constructor返回具有形参 c 的构造方法对象
getFields()Field[]返回所有公共的成员变量对象的数组
getDeclaredFields()Field[]返回所有成员变量对象的数组
getField(String str)Field返回此公共的成员变量
getDeclaredField(String str)Field返回此成员变量
getMethods()Method[]返回所有公共的成员方法对象的数组
getDeclaredMethods()Method[]返回所有成员方法对象的数组
getMethod(String, Class c)Method返回具有形参 c 的公共的成员方法对象
getDeclaredMethod(String, Class c)Method返回具有形参 c 的成员方法对象

Constructor, Field, Method: setAccessible(true): 若想要修改被private修饰的对象,则需要临时取消访问检查

package cn.yang.text;

public class Test {
    public int a;
    private int b;

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    @Override
    public String toString() {
        return "Test{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
}
package cn.yang.text;

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

public class Demo {
    public static void main(String[] args) throws Exception {
        URL url1 = Test.class.getClassLoader().getResource("");
        URL url2 = Test.class.getResource("");
        URL url3 = Test.class.getResource("/");
        System.out.println(url1); //根路径
        System.out.println(url2); //类的路径
        System.out.println(url3); //根路径

        Constructor<Test> constructor = Test.class.getConstructor();
        Test test = constructor.newInstance();
        test.setA(12);
        test.setB(21);
        System.out.println(test);

        Field a = Test.class.getField("a");
        Field b = Test.class.getDeclaredField("b");
        a.set(test, 34); //将 对象test 中的 变量a 的值改为34
        b.setAccessible(true); //由于 变量b 被 private 修饰,想要修改则需要临时取消访问检查
        b.set(test, 43);
        System.out.println(test);

        Method getA = Test.class.getMethod("getA");
        Method getB = Test.class.getMethod("getB");
        System.out.println(getA.invoke(test)); //执行 对象test 的 getA方法
        System.out.println(getB.invoke(test)); //执行 对象test 的 getB方法
    }
}

运行结果:

file:/F:/java/text/target/classes/
file:/F:/java/text/target/classes/cn/yang/text/
file:/F:/java/text/target/classes/
Test{a=12, b=21}
Test{a=34, b=43}
34
43

URL

统一资源调配器
可以理解为一个连接,指向某个元素

方法说明
getContent()获取对象内容
getFile()获取对象路径和文件名

Constructor

Class类中的构造方法对象

方法说明
newInstance(参数)创建对象(直接用Class对象调用也可以)

Field

Class类中的成员变量对象

方法说明
set(赋值给哪个对象, 赋的值)给对象的成员变量赋值
get(从哪个对象获取)获取对象的Field的值

Method

Class类中的成员方法对象

方法说明
invoke(调用方法的对象, 参数)运行该方法 可以有返回值
isAnnotationPresent(注解.class)判断该方法是否被该注解标注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值