Java反射知识点总结
来源:互联网 发布:淘宝互刷平台源码 编辑:程序博客网 时间:2024/06/04 18:31
一、常用的方法
1、加载一个类
Class clazz = Class.forName("com.lei.test.HelloWorld");
里面的参数为全路径:包名.类名
2、获得构造方法对象
Constructor constructor = clazz.getConstructor();
获得指定的构造方法
Constructor constructor2 = clazz.getDeclaredConstructor(String.class);
3、生成类的实例
①生成默认构造方法的实例
Object obj = constructor.newInstance();
②生成带参数的构造方法实例
Object obj3 = constructor2.newInstance("测试");
③快捷生成实例(默认构造方法)
Object obj2 = clazz.newInstance();
4、得到类的字段
①得到类的公共字段
Field field = clazz.getField("name");
//通过实例关联此字段对象
Object name = field.get(obj);
System.out.println(name);
②得到类的私有字段
Field field2 = clazz.getDeclaredField("age");
//强制设置访问权限(不设置会出错)异常:java.lang.IllegalAccessException
field2.setAccessible(true);
//关联实例
Object age = field2.get(obj);
System.out.println(age);
③为字段重新赋值
field2.set(obj, 66);
age = field2.get(obj);
System.out.println(age);
5、调用类的方法
①调用公共无参方法
Method method = clazz.getMethod("print", null);
//绑定, 执行当前的方法并将相应的实际参数传递
method.invoke(obj, null);
②调用私用有参方法
Method method2 = clazz.getDeclaredMethod("print", String.class,int.class);
//强制设置访问权限(不设置会出错)异常:java.lang.IllegalAccessException
method.setAccessible(true);
//绑定, 执行当前的方法并将相应的实际参数传递
method.invoke(obj,"年龄",20);
二、代码展示
ReflectTest.java
package com.lei.test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * 反射示例 * Author: pibigstar * Created on: 2017年8月27日 下午7:01:47 */public class ReflectTest {public static void main(String[] args) throws Exception {/**=============普通生成实例=====================*///HelloWorld hello = new HelloWorld(); 这一句话就等于下面 1 2 3 步的总和/**=============通过反射生成实例================*///1.获得字节码对象 Class.forName()Class clazz = Class.forName("com.lei.test.HelloWorld");//2.获得构造实例 ,没有参数则返回默认的构造方法,根据参数的不同返回不同的构造方法 参数为String.class这样Constructor constructor = clazz.getConstructor();//3.生成实例Object obj = constructor.newInstance();//快捷方式。。。。返回默认构造方法生成的实例//Object obj2 = clazz.newInstance();//获得一个指定的Constructor对象//Constructor constructor2 = clazz.getDeclaredConstructor(String.class);//Object obj3 = constructor2.newInstance("测试");/**=========普通方式操作类里面的成员变量=============*///System.out.println(hello.name);/**===========通过反射操作得到类成员===============*///获得类的公共字段的对象 public String nameField field = clazz.getField("name");//通过实例关联此字段对象Object name = field.get(obj);System.out.println(name);//获得类的私有字段的对象 private Integer ageField field2 = clazz.getDeclaredField("age");//强制设置访问权限(不设置会出错)异常:java.lang.IllegalAccessExceptionfield2.setAccessible(true);//关联实例Object age = field2.get(obj);System.out.println(age);//设置值field2.set(obj, 66);age = field2.get(obj);System.out.println(age);/**===========普通方式调用类里面的方法=========*///hello.print();/**=========通过反射调用类里面的方法==========*///获得方法public void print()//方法没有参数就写null或者不写clazz.getMethod("print");Method method = clazz.getMethod("print", null);//绑定, 执行当前的方法并将相应的实际参数传递method.invoke(obj, null);//获得方法public void print(String str,int i) //注意:这里之所以写int.class是因为我们直接对字节码进行操作将自动装箱绕过去了Method method2 = clazz.getDeclaredMethod("print", String.class,int.class);//强制设置访问权限(不设置会出错)异常:java.lang.IllegalAccessExceptionmethod.setAccessible(true);//绑定, 执行当前的方法并将相应的实际参数传递method.invoke(obj,"年龄",20);}}
package com.lei.test;public class HelloWorld{public HelloWorld() {System.out.println("默认构造方法");}public HelloWorld(String name){System.out.println("其他构造方法"+name);}public String name = "派大星";private Integer age = 20;public void print(){System.out.println("打印输出");}private void print(String str,int i){System.out.println(str + ":" + i);}}
- Java反射知识点总结
- java反射知识点总结
- Java反射知识点总结
- Java反射知识点总结
- 黑马程序员 知识点总结-Java反射
- 黑马程序员---Java高新技术反射知识点总结
- Java基础之反射知识点总结
- 【学习日记】java反射的知识点总结
- Java的灵魂--反射知识点总结
- Java基础之反射知识点总结
- 反射知识点总结
- 反射简单知识点总结
- Core Java第十六章知识点总结——反射
- DAY20--java中的反射机制常用知识点总结
- 黑马程序员 JAVA编程 枚举 反射知识点总结
- Java反射基础知识点总结(内含六部博文实例)
- JAVA知识点总结-17类加载器,反射
- java反射机制知识点
- Spring 发送ajax中文乱码
- Sails+MVC+Mysql+Node+学习笔记一
- C++primer[习题][第二章][21-30]
- hdu 5969 最大的位或(贪心)
- CentOS服务器配置之uwsgi的安装和使用(翻译文档)
- Java反射知识点总结
- CMVS-PMVS 知识库链接
- 负数在计算机中如何表示,计算机中负数为什么用补码表示?
- LintCode题目解答之字符串操作(2)
- Maven私服-Nexus搭建文档
- CentOS服务器配置之python环境配置
- java类型转换方法
- FORM的基础开发
- POJ 1703 带权并查集