JAVA----获得字节码对象的方式

package cn.ruanwenjun.classloader;
public class ClassLoaderDemo {
    public static void main(String[] args) throws ClassNotFoundException {
        //1.获得字节码对象的三种方式
        //第一种方式,根据对象的getclass()方法
        //ClassLoaderDemo demo = new ClassLoaderDemo();
        //Class<ClassLoaderDemo> clazz = (Class<ClassLoaderDemo>) demo.getClass();
        //第二种方式,根据类.class属性的方式
        Class clazz = ClassLoaderDemo.class;
        //第三种方式,根据Class.forName(类的全包名)的方式。 
        //Class<ClassLoader> clazz = (Class<ClassLoader>) Class.forName("cn.ruanwenjun.classloader.ClassLoaderDemo");
        //2.根据字节码对象可以获得类加载器
        ClassLoader classLoader = clazz.getClassLoader();   
        //3.根据类加载器可以,获得src下的某个相对路径的资源的绝对路径地址
        String resource = classLoader.getResource("jdbc.properties").toString();    
        System.out.println(resource);
        //根据绝对路径地址可以做很多事,比如利用输入流获得文件内容等等。。。。

    }
}


输出结果:

file:/E:/ecplices%20_workspace/simplework/WEB25/build/classes/jdbc.properties

这里classes即对应的src
为什么根据字节码对象可以获得类加载器呢?
在java中,每个java源文件.java会先被编译器编译成.class字节码文件,然后被类加载器加载到jre中成为字节码对象。
因为字节码对象是被类加载加载的,故可以通过字节码对象获得类加载器

获得字节码对象之后可以利用反射了
可以直接根据字节码对象.newInstance()方法构造类实例,但是只能使用public 并且无参的构造方法
如果想调用有参的或者private构造方法,则需要利用Java.lang.reflect.Constructor类的一些方法
同时还可以使用Java.lang.reflect.Method,Java.lang.reflect.Field等类获得类的方法,属性等
以上三个类的方法都要用字节码对象来调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值