Java反射
来源:互联网 发布:气场强大的女生知乎 编辑:程序博客网 时间:2024/06/05 20:15
1、Java中的反射机制
2、Class对象
要想了解反射,首先得看Class
Class就是类的类型,比说字符串类型是String,整形类型就是Integer.
获取类的类型的三种方式:
首先建立Bean
package com.example.refelectTest;public class Book { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
测试代码如下
package com.example.refelectTest;/** 1. 2. 获取类对象的三种方式 1、通过Class.forName(包名全路径)获取类型 2、通过实例化对象获取 */public class Test { public static void main(String[] args) { Class c1 = null; Class c2 = null; Class c3 = null; // 第一种方式 try { c1 = Class.forName("com.example.refelectTest.Book"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("第一种方式,通过包名获得" + c1); // 第二种方式 Book b = new Book(); System.out.println("第二种方式,实例化获取" + b.getClass()); // 第三种方式 System.out.println("第三种方式,直接通过类名" + Book.class); }}
运行结果:
3、Field对象
- 位于Java.lang.reflect.Field类,是用于表示类中、接口中属性对象的类,
- 可以操作类中私有,以及公有的全部属性和方法。
代码如下 :
Bean类:学生name,age为私有,id为公有;
package com.example.test;public class Student { private String name; private int age; public String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
测试代码:
package com.example.test;import java.awt.print.Book;import java.lang.reflect.Field;public class MyTest { public static void main(String[] args) { // TODO Auto-generated method stub MyTest myTest = new MyTest(); myTest.show(Student.class); } // 传递过来的class对象获取类中的属性 public void show(Class cls) { // getDeclaredFields可以得到全部(公有,私有的属性) System.out.println("通过getDeclaredFields()方法-----------------"); Field[] f = cls.getDeclaredFields(); for (Field field : f) { // 得到属性名称; System.out.println(field.getName()); // 得到属性类型; System.out.println(field.getType()); } System.out.println("通过getFields()方法-----------------"); // getFields可以得到公有属性; Field[] f1 = cls.getFields(); for (Field field : f1) { // 得到属性名称; System.out.println(field.getName()); // 得到属性类型; System.out.println(field.getType()); } }}
运行结果:
4、Method对象
- 位于java.lang.reflect.Method类中用于表示类中,接口中方法对象的类。
能够操作类中私有和公有的方法。
测试代码:
package com.example.test1.method;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import com.example.bean.Book;/** * Method类中用于表示类中,接口中方法对象的类。 * 能够操作类中私有和公有的方法。 * @author yu * */public class MethodTest { public static void main(String[] args) { // TODO Auto-generated method stub Book b =new Book(); MethodTest methodTest=new MethodTest(); methodTest.show(b); } public void show(Object o) { Class cl = o.getClass(); Method[] method = cl.getDeclaredMethods(); for (Method m : method) { //得到所有的方法名称; System.out.println("方法名称-------"+m.getName()); System.out.println("方法修饰符------"+Modifier.toString(m.getModifiers())); System.out.println("方法返回值类型---"+m.getReturnType()); } }}
运行结果:
2 0
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- XMPPFramework iOS开发(八)总结
- 存档mysql配置文件
- Linux分文件命令
- 卖商标屡次裁员 曾经辉煌的诺基亚已无力回天?
- 线性回归
- Java反射
- 设计模式无招胜有招之设计原理和方法
- sdut 3555 sdut第八届校赛--小白の人品测试
- 文章标题
- 第六条 消除过期的引用
- 引号中添加变量
- 炉石传说-鱼人骑士-斩杀计算器-iOS
- Performing a deep fetch of the `master` specs repo to improve future performance
- 浅谈SAP期末清帐和重分类