通过反射可以获取Class的构造方法 通过构造方法创建对象
来源:互联网 发布:java 读取文件内容 编辑:程序博客网 时间:2024/06/04 18:00
package com.example.app3.fanshe;/** * Created by gq on 2017/11/28. * * 1.可以反射到属性 有构造方法 私有的构造方法 方法 私有学的等 * 通过对应的参数找到构造方法 */public class User { public String name; public String age; public User(){ } //构造方法 public User(String name, String age) { this.name = name; this.age = age; } public void play() { } /* private void eat(){ } public void sleep() { }*/ @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age='" + age + '\'' + '}'; }}
Text 测试 类
package com.example.app3.fanshe;import java.lang.reflect.Constructor;/** * Created by gq on 2017/11/28. */public class Test { public static void main(String[] args) { //拿到user类的路径 try { Class aClass = Class.forName("com.example.app3.fanshe.User"); Constructor[] constructors = aClass.getConstructors();//获取所有方法 for (Constructor constructor:constructors){ System.out.println("constructor = " + constructor); } //获取单个的方法 Constructor constructor1 = aClass.getConstructor();//传与构造方法对应的东西 System.out.println("constructors = " + constructor1); //constructors = public com.example.app3.fanshe.User() // 反射得到有参g构造方法 得对应a Constructor constructor2 = aClass.getConstructor(String.class, String.class); System.out.println("constructor = " + constructor2); //constructor = public com.example.app3.fanshe.User(java.lang.String,java.lang.String) //二丶 通过构造方法来创建对象 构造方法可以传参数 User user= (User) constructor2.newInstance("我是郭强","我21岁"); System.out.println("constructor2 = " + constructor2); //constructor2 = public com.example.app3.fanshe.User(java.lang.String,java.lang.String) System.out.println("user = " + user); // user = User{name='我是郭强', age='我21岁'} 修改值了 /* //反射获取到所有方法 public Method[] methods = aClass.getMethods(); for (Method method:methods) { System.out.println("method = " + method); }*/ } catch (Exception e) { e.printStackTrace(); } }}
获取私有
//三丶 获取私有的方法getDeclaredConstructors 获取私有和public 的 Constructor[] declaredConstructors = aClass.getDeclaredConstructors(); for (Constructor constructor3:declaredConstructors) { System.out.println("私有化的方法 = " + constructor3); } //已知第一个是私有的方法 Constructor constructor3=declaredConstructors[0]; constructor3.setAccessible(true); //有序访问 User user1= (User) constructor3.newInstance("我是","过","强"); System.out.println("user1 = " + user1.toString());/** 私有化的方法 = private com.example.app3.fanshe.User(java.lang.String,java.lang.String,java.lang.String)私有化的方法 = public com.example.app3.fanshe.User(java.lang.String,java.lang.String)私有化的方法 = public com.example.app3.fanshe.User()user1 = User{name='我是', age='过', sex='强'}
//加注解的 给方法加注解
package com.example.app3.fanshe;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created by gq on 2017/11/29. */ //这里是注解作用区域 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) //注解保留时长短public @interface Bwei { //注解 public String name() default "1509D呀"; public String sex() default "男"; }
package com.example.app3.fanshe;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * Created by gq on 2017/11/28. */public class Test { public static void main(String[] args) { //拿到user类的路径 try { Class aClass = Class.forName("com.example.app3.fanshe.User"); Field[] fields = aClass.getDeclaredFields(); for (Field field:fields) { System.out.println("field = " + field); } /* field = public java.lang.String com.example.app3.fanshe.User.name field = public java.lang.String com.example.app3.fanshe.User.age field = private java.lang.String com.example.app3.fanshe.User.sex */ Method method = aClass.getMethod("sleep"); //找到那个方法 //判断方法上是否有这个注解 boolean isEmpty = method.isAnnotationPresent(Bwei.class); if(isEmpty){ // 获取对应的注解 Bwei bwei = method.getAnnotation(Bwei.class); //获取注解里面的值 System.out.println("bwei = " + bwei.name()+ " "+ bwei.sex()); //获取注解里的值 //bwei = 郭强强 二十 打印出来的是 @Bwei(name = "郭强强",sex = "二十") 的 //使用invoke运行注解方法(10分) } } catch (Exception e) { e.printStackTrace(); } }}
这是在类那个user 类里面
@Bwei(name = "郭强强",sex = "二十")public void sleep() { System.out.println("Sleep-name = "); }
阅读全文
0 0
- 通过反射可以获取Class的构造方法 通过构造方法创建对象
- 反射获取构造方法并创建对象
- 通过反射机制创建一个构造方法中参数数量可变的对象
- 通过私有构造方法创建对象
- 通过私有构造方法创建对象(转)
- 反射机制的概述和字节码对象的获取,通过反射获取构造方法并使用;通过反射获取成员变量并使用;通过反射获取私有成员变量并使用;通过反射获取成员方法并使用
- 通过反射访问构造方法
- 反射_通过反射获取私有构造方法并使用
- 反射-通过反射获取无参构造方法并使用
- 反射-通过反射获取带参构造方法并使用
- 反射-通过反射获取私有构造方法并使用
- 通过反射获取构造方法,属性,方法信息
- 通过反射获取构造方法,成员变量及成员方法
- 反射第三步 : 通过反射获取某一个类的 构造器Constructor 并通过反射创建对象
- 反射_通过反射获取成员变量、构造方法、成员方法的使用
- Java中用反射通过构造方法创建实例
- 通过反射获取无参构造方法并使用
- 通过反射去获取有参构造方法并使用
- hdu 1385(floyed + 路径记录)
- tf.train.exponential_decay()
- python tkinter整理总结
- PHP中explode()和implode()函数讲解和实战用法
- JDK为1.8时使用Realm时build错误和build成功后应用崩溃问题解决
- 通过反射可以获取Class的构造方法 通过构造方法创建对象
- super关键字要点
- 揭秘微信红包:架构、抢红包算法、高并发和降级方案
- hdu4773 Problem of Apollonius【反演变换】
- Vuejs2.5.9源码解读(1) — package.json
- vim编辑器
- java基础
- mac 和 linux内核简单比较
- 队列的实现