Java学习笔记——反射机制
来源:互联网 发布:淘宝网啄木鸟蚕丝被 编辑:程序博客网 时间:2024/05/21 14:42
JAVA反射机制的概念
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
反射机制的功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的方法
- 生成动态代理
对于反射机制的功能,Class类提供了很多方法,可以通过API查阅。http://docs.oracle.com/javase/8/docs/api/index.html
获取Class对象(Class对象也就是类名)
- 使用Class类的forName()静态方法。
- 调用某个类的class属性获取相应的Class类。
- 调用某个对象的getClass()方法。
package test1;/** * Created by zengzehao on 17-5-2. */public class ReflectionTest { public static void main(String[] args) throws Exception{ Class<?> class1 = null; Class<?> class2 = null; Class<?> class3 = null; class1 = Class.forName("test1.ReflectionTest"); //使用Class.forName()方法,必须e的是完整包名,否则会找不到相应的类 class2 = ReflectionTest.class; //通过类的class属性 class3 = new ReflectionTest().getClass(); //通过实例的getClass()方法 System.out.println(class1.getName()); System.out.println(class2.getName()); System.out.println(class3.getName()); } /** 运行结果: test1.ReflectionTest test1.ReflectionTest test1.ReflectionTest */}
通过反射机制实例化一个类的对象
- 通过class对象的newInstance()方法
package test1;/** * Created by zengzehao on 17-5-2. */public class ReflectionTest2 { public static void main(String[] args) throws Exception{ Class<?> class1 = User.class; User user = (User) class1.newInstance(); user.setAge(20); user.setName("Xiaoming"); System.out.println(user.toString()); //运行结果User [age=20, name=Xiaoming] }}class User { private int age; private String name; public User() { super(); } public User(String name) { super(); this.name = name; } public User(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User [age=" + age + ", name=" + name + "]"; }}
通过反射机制获取类的所有属性和所有方法
package test1;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;/** * Created by zengzehao on 17-5-2. */public class ReflectionTest3 { private int age; private String Name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return Name; } public void setName(String name) { Name = name; } public static void main(String[] args) { Class<?> class1 = ReflectionTest3.class; Field[] fields = class1.getDeclaredFields(); //获取所有的属性 for(int i=0;i<fields.length;i++){ System.out.println(fields[i].getType().getName()+" "+Modifier.toString(fields[i].getModifiers())+" "+fields[i].getName()); } Method[] methods = class1.getMethods(); //获得所有的方法 for(int i=0;i<methods.length;i++){ System.out.println(methods[i].getReturnType().getName()+" "+Modifier.toString(methods[i].getModifiers())+" "+methods[i].getName()); } }}/**int private agejava.lang.String private Namevoid public setAgeint public getAgevoid public static mainjava.lang.String public getNamevoid public setNamevoid public final waitvoid public final native waitvoid public final waitboolean public equalsjava.lang.String public toStringint public native hashCodejava.lang.Class public final native getClassvoid public final native notifyvoid public final native notifyAll*/
通过反射机制调用某个类的方法
package test1;import java.lang.reflect.Method;/** * Created by zengzehao on 17-5-2. */public class ReflectionTest4 { public static void main(String[] args) throws Exception { Class<?> class1 = ReflectionTest4.class; Method method1 = class1.getMethod("method1"); method1.invoke(class1.newInstance()); Method method2 = class1.getMethod("method2",int.class,String.class); method2.invoke(class1.newInstance(),20,"xiaoming"); } public void method1(){ System.out.println("Java 反射机制 - 调用某个类的方法1."); } public void method2(int age,String name){ System.out.println("Java 反射机制 - 调用某个类的方法2."); System.out.println("age="+age+" name="+name); } /** * Java 反射机制 - 调用某个类的方法1. Java 反射机制 - 调用某个类的方法2. age=20 name=xiaoming */}
通过反射机制操作某个类的属性
package test1;import java.lang.reflect.Field;/** * Created by zengzehao on 17-5-2. */public class ReflectionTest5 { private String proprety = null; public static void main(String[] args) throws Exception { Class<?> clazz = ReflectionTest5.class; Object obj = clazz.newInstance(); // 可以直接对 private 的属性赋值 Field field = clazz.getDeclaredField("proprety"); field.setAccessible(true); field.set(obj, "Java反射机制"); System.out.println(field.get(obj)); /** * 运行结果:Java反射机制 */ }}
动态代理这一部分我不太懂,以后补上
0 0
- Java学习笔记——反射机制
- 黑马程序员——学习笔记14.Java反射机制
- java基础学习笔记——反射机制
- 黑马程序员——java学习笔记--反射机制
- Java反射机制学习笔记
- Java 反射机制-学习笔记
- Java反射机制学习笔记
- java反射机制学习笔记
- 【Java学习笔记】-----反射机制
- [学习笔记]Java反射机制
- Java反射机制学习笔记
- Java反射机制学习笔记
- java学习笔记反射机制
- java学习笔记-反射机制
- JAVA学习笔记--反射机制
- java反射机制学习笔记
- Java反射机制学习笔记
- Java反射机制学习笔记
- JDBC
- Linux 查看当前登录用户
- hdu 5242 Game
- REST&&RESTful
- CF#803 B. Distances to Zero(水题)
- Java学习笔记——反射机制
- POJ 1679 The Unique MST (次小生成树)
- 二叉树 已知两种遍历恢复二叉树
- pod 笔记
- 设计模式--抽象工厂模式
- 多校联合集训(汇总)
- Android UI GitHub汇总
- ArrayList用法
- 推荐三款我常备开发辅助神器