发布于2021-05-29 21:57 阅读(1367) 评论(0) 点赞(26) 收藏(0)
在java中,除了可以使用new创建对象外,还可以使用反射来创建对象,所以java反射的作用可以创建获取一个类,包括它的属性和方法,但前提条件是在运行情况下并且知道类的名字,就可以通过反射机制来获得类的所有信息。这种动态的获取信息以及动态调用对象的方法的功能称为java语言的反射机制.
java中类的执行要先进行编译,java文件编译生成.class字节码文件
这个.class字节码文件中包含了类的所有信息
之后就是类加载器根据类的全限定类名来读取在class文件中的二进制文件到jvm中,并保存在运行时内存区中
反射就是通过这个.class文件来获取对象的属性和方法的内存地址,从而知道其对象的属性和方法.
反射中获取Class对象的方法有四种:
1.Class.forName(“类的路径”);
2.类名.class
3.对象名.个体class();
4.基本类型的包装类,可以调用包装类的Type属性来获取该包装类的Class对象.
一个典型的反射应用就是我们jdbc中的
Class.forName(“com.mysql.jdbc.Driver.class”);
为什么会使用反射来加载驱动主要原因是:
通过new com.mysql.jdbc.Driver()的话会对类产生依赖,后续更换数据库驱动,就要修改代码,而使用反射只需要修改xml文件中的配置,目的是为了解耦.
通过反射获取无法访问的类
调用不可访问的方法
简化代码,可以直接获取类的属性,不用过多的书写get方法
在运行时动态的获取对象的属性,提高程序的灵活性和扩展性,在底层的框架中使用频繁,但在业务层较少.
因为其缺点就是其性能不好,通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低
Class具有的部分方法如下:
getName():获得类的完整名字。
getFields():获得类的public类型的属性。
getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
getMethods():获得类的public类型的方法。
getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
getConstructors():获得类的public类型的构造方法。
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
使用反射创建对象的demo
通过反射获取单例模式中的对象,破坏单例模式
//这是一个单例模式
public class Singleton {
//饿汉式,会在开始就创造对象
private static Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
import java.lang.reflect.Constructor;
public class test1 {
public static void main(String[] args) throws Exception{
Singleton s1 = Singleton.getInstance();//获取clas对象
//获取构造器
Constructor<Singleton> constructor = Singleton.class.getDeclaredConstructor();
//设置权限
constructor.setAccessible(true);
//通过newInstance()创建一个新的对象
Singleton s2 = constructor.newInstance();
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
}
原文链接:https://blog.csdn.net/weixin_43950187/article/details/117280297
作者:我长得真不赖
链接:http://www.javaheidong.com/blog/article/207729/f3c532702ea73f1772f5/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!