Java反射
2016-06-01 15:56
507 查看
1、Java中的反射机制
2、Class对象
要想了解反射,首先得看ClassClass就是类的类型,比说字符串类型是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()); } } }
运行结果:
相关文章推荐
- MyEclipse 快捷键
- hihocoder 1077 线段树 java实现
- spring mvc DispatcherServlet作用
- java当中获取各个路径的方法
- 再探Java抽象类与接口的设计理念差异
- Java反射
- 实例讲解Java的MyBatis框架对MySQL中数据的关联查询
- SpringMVC-REST实现
- eclipse 中使用 RecyclerView
- 我推荐的Java书籍
- 给Eclipse提速的7个技巧
- java反射
- java的文件操作处理时间数据
- java.移位运算符
- Java反射机制
- java并发编程入门:synchronized 与 Lock 的那点事
- Java8的CompletableFuture之二
- JAVA多线程3中实现总结
- Spring事务配置的五种方式
- 关于JAVA中文乱码(1)