反射---最大的应用:反射配置文件中的类路径,动态创建对象,增强扩展性,灵活性
反射:一般被反射的类,都需要一个默认的构造函数,即无参构造函数不要被覆盖了!
反射构造函数
反射类的字段
反射类的方法
package com.gc.reflect; public class Person { private String name; private int age; public static String country = "CN"; public Person(String name, int age) { super(); this.name = name; this.age = age; } public Person() { super(); } private void privateMethod(String param) { System.out.println("Person.privateMethod():"+name+"---"+param); } public void show() { System.out.println("Person.show():"+this.name); } public static void staticMethod() { System.out.println("Person.staticMethod():"+country); } }
package com.gc.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Reflect { public static void main(String[] args)throws Exception { //getObjectClass(); //newObjectInstance(); //getConstructors(); //getObjectFields(); getObjectMethods(); } /** * 获取字节码文件对象 * @throws ClassNotFoundException */ public static void getObjectClass() throws ClassNotFoundException { Class clazz1 = Person.class; Class clazz2 = new Person().getClass(); Class clazz3 = Class.forName("com.gc.reflect.Person");//服务器:读取配置文件---反射---接口---多态 System.out.println(clazz1==clazz2); System.out.println(clazz1==clazz3); } /** * 无参构造函数创建对象 * @throws Exception */ public static void newObjectInstance() throws Exception { //加载字符串所指的类,并编译为字节码,得到Class对象 Class clazz = Class.forName("com.gc.reflect.Person"); //调用类的无参构造函数,创建对象 Object object = clazz.newInstance(); } /** * 获取带参数的构造方法,并通过这个构造函数创建对象 */ public static void getConstructors() throws Exception { Class clazz = Class.forName("com.gc.reflect.Person"); //获取带参数的构造方法 Constructor cons = clazz.getConstructor(String.class,int.class); //传入产生,创建对象 Object obj = cons.newInstance("zs",20); } /** * 获取类中的字段 * clazz.getFields();//本类和父类中所有的共有成员 * clazz.getDeclaredFields();//只获取本类,包括私有成员 */ public static void getObjectFields() throws Exception { Class clazz = Class.forName("com.gc.reflect.Person"); Field field = clazz.getDeclaredField("name"); if(!field.isAccessible()) { field.setAccessible(true); } Object obj = clazz.newInstance(); //为字段设置值 field.set(obj, "xiaoqiang"); //获取字段的值 Object name = field.get(obj); System.out.println(name); } /** * 调用类中的方法 */ public static void getObjectMethods() throws Exception { Class clazz = Class.forName("com.gc.reflect.Person"); Constructor cons = clazz.getConstructor(String.class, int.class);//注意:int.class != Integer.class Object obj = cons.newInstance("beabai",26); Method[] methods = clazz.getDeclaredMethods(); for(Method m : methods) { if(!m.isAccessible()) m.setAccessible(true); if("privateMethod".equals(m.getName())) m.invoke(obj, "hello"); else m.invoke(obj, (Object[])null); } } }
相关推荐
JAVA基础--JAVA中的反射机制详解:本文档详细的介绍了Java的反射API的应用,希望能对各有所帮助
java基础,反射枚举基础,自己总结的笔记。
JAVA基础JAVA中的反射机制详解.pdf
Java基础 反射篇 - Java基础 反射篇 - 反射的思想及作用 - 反射的基本使用 - 获取类的 Class 对象 - 构造类的实例化对象 - 获取一个类的所有信息 - 获取类中的变量(Field) - 获取类中的方法(Method) - ...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)实验报告,基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java...
本Java视频教程适合有一定编程语言基础的学员观看,在本Java视频教程中讲解了Java面向对象、异常、数组、常用类、集合、IO流、线程、反射机制。该视频教程基于Java13进行讲解,Java13是目前Java最新版本。视频中讲师...
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
Java反射机制Java反射机制Java反射机制Java反射机制
很好的 了解java的底层反射机制,对学习java很有帮助……这可是基础,也可是拓展
java反射入门 实现java反射的两种模式
java基础之反射讲解
java反射机制基础,是进入java反射机制的一把钥匙
结合java最基本的多线程,反射,泛型 对java基础的学习非常有帮助
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...
Java基础 反射篇 反射的思想及作用 反射的基本使用 获取类的 Class 对象 构造类的实例化对象 获取一个类的所有信息 获取类中的变量(Field) 获取类中的方法(Method) 获取类的构造器(Constructor) 获取注解 通过...
对于Java基础的巅峰——反射机制的详细描述,反射的入门学习帮手!
java基础之一反射笔记
java反射机制基础学习。Class、Method、Field
详细地讲解java反射机制 看完基础至少更进一层楼
Java基础入门(四)-泛型、反射、注解