基础类.供demo反射练习

 package fanshe;

 public class Person {
public String name;
private String age;
private int p;
public Person() {};
public Person(String name, String age) {
super();
this.name = name;
this.age = age;
}
private Person(String name, String age,int p) {
super();
this.name = name;
this.age = age;
this.p = p;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]" + "p -"+ p;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}

反射demo类

 package fanshe;

 import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class demo1 { public static void main(String[] args) {
// TODO Auto-generated method stub
try {
d_3();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} private static void d_1() {
Person p = new Person();
Class c = p.getClass(); } private static void d_2() {
Class c = Person.class;
System.out.println(c);
}
private static void d_3() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
Class c = Class.forName("fanshe.Person"); //--------------------------//
Constructor con = c.getConstructor(); //获得 空参数的构造器 public
Object o= con.newInstance(); //运行获取到的构造方法
System.out.println(o.toString()); //--------------------------//
Constructor con2 = c.getConstructor(String.class,String.class); //获得带有参数的构造方法 public
Object o2 = (Person)con2.newInstance("a","22");
System.out.println(o2.toString()); //--------------------------// Constructor con3 = c.getDeclaredConstructor(String.class,String.class,int.class); //获得带有参数的构造方法 private
con3.setAccessible(true);
Object o3 = (Person)con3.newInstance("a","22",14);
System.out.println(o3.toString()); //--------------------------//
Object tmp_obj = c.newInstance();
Field f_name = c.getField("name");//获得成员变量 public
f_name.set(tmp_obj, "abc"); //设置变量
System.out.println(tmp_obj); //--------------------------//
Field f_age = c.getDeclaredField("age");//获得成员变量 public
System.out.println(f_age); //--------------------------//
Method m_getName = c.getMethod("getName"); //获得类函数无参数 public
Object o1 = m_getName.invoke(tmp_obj); //运行getName方法.返回值 反给obj
System.out.println(o1); //--------------------------//
Method m_setName = c.getMethod("setName",String.class);
m_setName.invoke(tmp_obj,"abcdqweqwe");
System.out.println(tmp_obj.toString());
}
}

通过反射.绕开泛型

 ArrayList<String> arr = new ArrayList<String>();
arr.add("a");
Class carr = arr.getClass();
Method arr_add = carr.getMethod("add",Object.class);
arr_add.invoke(arr, 1);
arr_add.invoke(arr, 2);
arr_add.invoke(arr, 3);
arr_add.invoke(arr, 4);
System.out.println(arr);

Java 反射 调用 demo的更多相关文章

  1. Java反射机制demo(五)—获得并调用一个类中的方法

    Java反射机制demo(五)—获得并调用一个类中的方法 这个demo在使用反射机制操作属性之前,主要原因是因为在.class文件字节码中,方法排在属性的前面. 1,获得一个类中的方法 先看一下方法和 ...

  2. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  3. Java反射机制demo(三)—获取类中的构造函数

    Java反射机制demo(三)—获取类中的构造函数 1,获取类中所有的构造函数 如下面的代码中所示,这个类中显式的构造函数有五个. 空构造: public UserInfo() 带参构造有四个: pu ...

  4. Java反射机制demo(二)—通过Class实例化任意类的对象

    Java反射机制demo(二)—通过Class实例化任意类的对象 上一章节中,实例化了Class类对象的实例,这个部分的demo展示了如何使用Class对象的实例去获得其他类的对象的实例. 任意一个类 ...

  5. Java 反射 调用私有域和方法(setAccessible)

    Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ...

  6. Java反射机制demo(六)—获得并操作一个类的属性

    Java反射机制demo(六)—获得并操作一个类的属性 获得并操作一个类的属性?! 不可思议啊,一个类的属性一般都是私有成员变量啊,private修饰符啊! 但是毫无疑问,这些东西在Java的反射机制 ...

  7. Java反射机制demo(四)—获取一个类的父类和实现的接口

    Java反射机制demo(四)—获取一个类的父类和实现的接口 1,Java反射机制得到一个类的父类 使用Class类中的getSuperClass()方法能够得到一个类的父类 如果此 Class 表示 ...

  8. Java反射机制demo(一)—实例化Class对象,并获得其他类包名和类型

    Java反射机制demo(一)——实例化Class对象,通过对象获得包名和类型 使用Java中的 本地类作为实验对象,避免自定义的类带来的一些不便. public static void main(S ...

  9. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

随机推荐

  1. Gitlab+Jenkins学习之路(六)之Jenkins部署、升级和备份

    一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...

  2. .Net Core 管道机制

    开篇先上一张中间件原理图,帮助大家对管道机制形成一个直观的认识 下面我们实现一个简单的管道机制,以此为例深入理解管道机制的原理 1. 首先定义一个委托,该委托接收一个上下文对象,返回值为Task,代码 ...

  3. python 小技巧之获取固定下面包含的某种类型文件的个数

    遇到这样一个问题.我想要统计某个文件夹下有多少个py文件怎么办. 用python能解决吗?答案,能. 解决办法,使用glob 代码如下: import glob path_file_number=gl ...

  4. 动态加载与插件系统的初步实现(二):AppDomain卸载与代理

    前一篇文章简单展示了类型发现和MEF使用,本文初步进入AppDomain相关内容. CLR程序运行时会创建默认程序集容器即AppDomain,默认AppDomain不支持卸载其程序集,但CLR支持创建 ...

  5. Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)

    /** * 数据类型转换工具类 * @author cyf * */ public class NumConvertUtil{ /** * bytes 转16进制字符串 * @param bArray ...

  6. Java 的JAR包、EAR包、WAR包区别

    一.WAR包 WAR(Web Archive file) 网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.WAR专用于Web方面.大部分的JAVA WEB工程,都是打成W ...

  7. Linux系统初探过程总结

    Linux系统初探的过程大约用了一周的时间,这周基本将Linux系统安装,PostgreSQL安装,Nginx服务器安装,ASP.NET Core应用部署都走了一遍.由于以前没有怎么接触和使用过Lin ...

  8. egret性能优化总结

    ## 来自官方的优化建议 详见:http://edn.egret.com/cn/article/index/id/287 (1) 少使用Alpha混合. (2) 显式停止计时器,让它们准备好进行垃圾回 ...

  9. 从零开始的Python学习Episode 16——模块

    一.模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相 ...

  10. MySQL基础练习(三)

    经过之前两次的学习,这次用MySQL进行略微复杂的操作练习 各部门工资最高的员工 首先创建表employee和表department.如下 我们需要查询每个部门工资最高的员工 select a.Nam ...