Java之反射代码演示说明
来源:互联网 发布:如何淘宝买东西 编辑:程序博客网 时间:2024/06/02 03:34
还不存在的类–即我们需要使用反射来使用的类
Person类:
package com.qf.demo4;public class Person { private String name; public int age; static int weight; int male; protected int num; public Person(String name, int age, int weight) { this.name = name; this.age = age; this.weight = weight; System.out.println("有参数的构造方法"); } public Person() { System.out.println("无参数的构造方法"); } public void eat() { System.out.println("吃"); } public void drink(String type) { System.out.println("喝" + type); } public String sleep() { System.out.println("睡"); return "呵呵"; } private void play() { System.out.println("玩"); } public static void hehe() { System.out.println("heheheheh"); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ",weight = "+weight+"]"; }}
演示代码:
Test1:创建Class对象
package com.qf.demo4;import com.qf.demo.Person;/** * 每一个类只有一个class 对象 * com.qf.demo.Person 包名+类名 全限定名 * @author Administrator * */public class Test { public static void main(String[] args) { // 创建Class 对象 // 第一种方式:类.class Class class1 = Person.class; System.out.println(class1.hashCode()); // 第二种方式:创建类的对象;然后--对象.getClass() Person person = new Person(); Class class2 = person.getClass(); System.out.println(class2.hashCode()); // 第三种方式:使用forname方法,参数为相对于本工程的地址 try { Class class3 = Class.forName("com.qf.demo.Person"); System.out.println(class3.hashCode()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
Test2:创建Constructor对象,并创建Person类(还没有的类)对象
package com.qf.demo4;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;public class Test2 { public static void main(String[] args) { try { Class class1 = Class.forName("com.qf.demo4.Person"); Constructor[] constructors = class1.getConstructors(); for (Constructor constructor : constructors) { System.out.println(constructor); } // 1 通过构造方法创建 Perosn对象 Constructor constructor = class1.getConstructor(null);// 得到无参的构造方法 Person person = (Person) constructor.newInstance(null); System.out.println(person); // 2 利用有参数的构造方法创建对象 Constructor constructor2 = class1.getConstructor(String.class,int.class,int.class); Person person2 = (Person) constructor2.newInstance("张三",5,9); System.out.println(person2); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
Test3:获取方法,以及调用方法
package com.qf.demo4;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test3 { public static void main(String[] args) { try { Class class1 = Class.forName("com.qf.demo4.Person"); // 得到构造方法 Constructor constructor = class1.getConstructor(null); Object object = constructor.newInstance(null); Method[] methods = class1.getMethods();// 得到本类和父类的非私有的方法 Method[] methods2 = class1.getDeclaredMethods();// 得到本类中声明的所有的方法(包括私有) // 得到 无参 无返回值的 方法并且调用 Method method = class1.getMethod("eat", null); // 调用方法的对象 实际参数 method.invoke(object, null);// 是哪个方法被调用 // 调用 有参数 无返回值的方法 Method method2 = class1.getMethod("drink", String.class); method2.invoke(object, "水"); // 有返回值的 Method method3 = class1.getMethod("sleep", null); Object object2 = method3.invoke(object, null);// invoke方法的返回值就是调用的方法的返回值 System.out.println(object2); // 得到静态的方法 Method method4 = class1.getMethod("hehe", null); method4.invoke(null, null);// 静态方法不需要传递对象 直接写null // 私有的 私有的方法 必须用 getDeclaredMethod 才能得到 Method method5 = class1.getDeclaredMethod("play", null); method5.setAccessible(true);// 私有方法默认没有权限调用,必须单独设定调用权限 method5.invoke(object, null); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
反射定义:http://blog.csdn.net/baidu_37107022/article/details/71234940
0 0
- Java之反射代码演示说明
- 类的加载与反射之代码演示
- java中的反射机制基础概念及其代码演示
- java反射之访问成员变量代码
- Java高质量代码之反射
- java中反射机制的演示
- Java反射Class.forName()配置文件演示
- Java反射机制官方说明
- Java反射实例及说明
- java的反射机制说明
- C#中关于反射机制的演示代码
- Java反射示例代码
- java反射代码
- java反射机制代码
- java反射机制代码
- Java反射代码块
- Java高质量代码之 — 泛型与反射
- Java高质量代码之 — 泛型与反射
- java--jspsmartupload组件抛出异常总结
- nginx stream模块初探
- ScrollView下,ListView重复调用getview解决方案
- Ubuntu 16.04 安装 ownCloud
- 2015-2016 ACM-ICPC Southwestern Europe Regional Contest (SWERC 15) C
- Java之反射代码演示说明
- this指针用法
- 通过信号实现在应用层检测TF卡的拔插
- Java对数据库的增删查改
- c笔记---scanf()
- Error:Execution failed for task ':app:validateSigningDebug'.
- 剑指Offer——(13)调整数组顺序使奇数位于偶数前面
- DL4NLP---第一讲
- DRML(2016-CVPR)重现过程记录---(6)新的尝试与思考-tensorflow?