反射小例and可变参数
来源:互联网 发布:光纤网络监控方案 编辑:程序博客网 时间:2024/06/06 02:09
public class Person { public Person() {} public Person(String name) { this.name = name; } public Person(int id) { this.id = id; } public Person(int id, String name) { this.id = id; this.name = name; } 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; }}
import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import org.junit.Test;/** * 了解反射 * @author Administrator * */public class Demo1 { @Test public void run() throws Exception{ // 三种方式获取class对象 // 类名 Class clazz1 = Person.class; // 通过实例 Class clazz2 = new Person().getClass(); // Class.forName Class clazz3 = Class.forName("cn.wonder.reflect.Person"); } /** * 获取构造的对象 * @throws Exception */ @Test public void run2() throws Exception{ // 获取Person的Class对象 Class clazz = Class.forName("cn.wonder.reflect.Person"); // clazz.getConstructors(); // 获取所有的构造方法 // 创建实例 // Person p = (Person) clazz.newInstance(); // 创建实例,相对于调用无参数的构造方法 // 获取有参数的构造器 Constructor c = clazz.getConstructor(int.class,String.class); Person p2 = (Person) c.newInstance(1,"美美"); System.out.println(p2.getName()); } /** * 获取属性的对象 * @throws Exception */ @Test public void run3() throws Exception{ // 获取Person的Class对象 Class clazz = Class.forName("cn.wonder.reflect.Person"); // 声明实例 Person p = (Person) clazz.newInstance(); // 获取属性 // clazz.getField("name"); // 获取是公有的name的属性 Field name = clazz.getDeclaredField("name"); // 可以获取公有和私有都能获取 name.setAccessible(true); // 设置操作属性 name.set(p, "郭美美"); // p.name = "郭美美"; System.out.println(name.get(p)); } /** * 获取方法 * @throws Exception */ @Test public void run4() throws Exception{ // 获取Person的Class对象 Class clazz = Class.forName("cn.wonder.reflect.Person"); // 声明实例 Person p = (Person) clazz.newInstance(); Method m = clazz.getDeclaredMethod("setName", String.class); m.setAccessible(true); m.invoke(p, "凤姐"); // p.setName = "凤姐"; System.out.println(p.getName()); }}
下面是可变参数的小例子
import org.junit.Test;public class Demo1 { @Test public void run(){ //System.out.println(add(3,4)); //add(); //add(1); System.out.println(add(1,3)); System.out.println(add(1,3,6)); } /** * 可变参数 * @param nums * @return */ public int add(int...nums){ int sum = 0; for(int i=0;i<nums.length;i++){ sum += nums[i]; } return sum; } /*public int add(int a,int b){ return a+b; } public int add(int a,int b,int c){ return a+b+c; }*/}
0 0
- 反射小例and可变参数
- 反射之可变参数
- 可变参数、反射
- C语言可变参数小例
- 可变参数小讲解
- java 中的 拆装箱 可变参数 反射
- java反射机制不支持可变参数
- 可变参数与Predicate and问题
- python笔记之可变参数* and **
- C++可变参数模板的小知识
- 泛型方法+反射,解决静态可变类参数问题
- JDK1.5之可变参数枚举反射内省动态代理
- PHP通过反射机制调用可变参数方法
- 实习入职第五天:参数中的可变参数等小知识点
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 《ACM程序设计》书中题目 W
- 多线程编程
- 欢迎使用CSDN-markdown编辑器
- Firebase Cloud Messaging接入文档
- 新闻案例本地版(listview实现)
- 反射小例and可变参数
- 多线程编程实例
- 设计模式之策略模式
- Android中设置图片的圆形遮罩的几种方式
- 事件处理(Handling Events)和委托(Delegate)代码示例(一)【UE4】【C++】
- php和python请求socket服务器
- PHP的用法
- gnome-calculator TLS support is not available
- MD5+DES在C#.NET与Java/Android中的加解密使用