JAVA基础必备(十三)——反射(二)

来源:互联网 发布:pad的壁纸软件 编辑:程序博客网 时间:2024/05/18 13:06

对于反射,我的理解它就是一个小偷,把人家的私有财产偷出来自己来用而已。

1.反射的机制:

反射的机制其实就是在程序运行的时候能够获取自身的信息。也就是在java中,给定一个类,那么我就可以通过反射机制获取这个类的所有信息,也就是说可以获取这个类的所有的属性和方法。

2.反射的作用:

其作用就是在程序运行的过程中,可以构造出任何一个类的对象,可以调用任意一个类对象的属性和方法,生成动态代理的作用。java程序可以在运行中加载一个得知名称的class,从而获悉其完整的构造(当中不包括methods的定义),并生成其class对象实体,或其对fields设值,或调用methods方法。reflect!

3.反射的用法:

现在有很多的开源框架都会用到反射机制,在jdbc中获取其jdbc驱动的对象实例:Class.forName("com.mysql.jdbc.Driver.class").newInstance();其实这一句就是获取jdbc驱动的对象,那么为什么不用new出个对象呢?主要原因是因为:两者的创建对象的方式不同,Class.forName("com.mysql.jdbc.Driver.class")是加载驱动,也就是告诉jvm说我要加载这个类了,为类加载机制生成对象,Class在调用forName()的类加载静态方法时是分成两部完成的,即先加载类,再生成对象。而new是创建一个新的对象,不具备灵活性,例如:在配置文件中配置数据库的时候,我们可以直接用反射机制来获取该驱动的加载,当数据库改变的时候就不用动程序就可以了,而new就需要修改程序了。不符合软件的设计思想的。

4.反射的优点和缺点:

优点:具有很高的灵活性,体现在可以动态的创建对象和编译。如:更新软件,不可能让客户全卸载吧,这时候就可以用反射来完成软件的更新操作。

缺点:什么东西都不是完美的,用反射的机制就需要牺牲性能了。

5.反射具体的可以知道哪些信息:

说白了,一个类中有多少信息,利用反射机制就能够知道多少信息,但前提你得知道这个类的名称啊。

首先呢,得根据传入的这个类的名称来获取其实例对象:Class c = Class.forName(类的所在包即类名称); //加载类,Object obj = c.newInstance();//创建对象 ,对象有了,那么我就可以想要什么就要什么咯:1.可获取构造函数方法:Constructor constructor = c.getConstructor(String name,Class[] params); //根据指定参数获取public构造器,

Constructor[] constructor = c.getConstructors();//获取所有的public构造器,Constructor constructor = c.getDeclaredConstructor(Class[] params);//根据指定的参数获取public和非public的构造器。 Constructor constructor = c.getDeclaredConstructors();//获取public所有的构造器 。

同理:获得方法,Method method = c.getMethods();获得属性:Fields;

6.反射能干什么:

jdbc操作数据库,只需要写一个Dao类包含增删改查方法就可以用反射传入不同的对象就可以了。

7.数据库的操作:

增,查数据库的表操作基本原理:保存数据时,把需要保存的对象的属性值全部取出来拼成Sql语句,查询时,查询到的数据包装成对象。

0 0
原创粉丝点击