java之反射
2016-07-21 14:43
295 查看
Class.forName("") 为动态加载类
Class<?> 为泛型 中间的问号可以处理任何的类,为通配符
还是以一个例子来说明
package javastudy;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Testit {
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, IllegalArgumentException, InvocationTargetException {
//利用反射来动态创建对象
/** 把Person这个类加载到内存中去,这样c就为Person类了 **/
Class<?> c = Class.forName("javastudy.Person");
Person zhang = (Person) c.newInstance();// 新对象的类为object类,所以要强制转换为Person类,而且这里对应的构造函数应该是没有参数的,所以在Person类里面如果有了有参构造函数,那么就要再次构造一个无参的函数
zhang.name = "jack";
zhang.age = 20;
zhang.display();
Constructor<?>[] cons= c.getConstructors();
Person wang = (Person) cons[1].newInstance("Mary",30);
wang.display();
Class<?>[] inter= c.getInterfaces();
for(int i =0;i<inter.length;i++)//给我一个反射,我就能够查出里面的信息,反射就好想当于一个镜子
{
System.out.println(inter[i].getName());
}
}
}
package javastudy;
public class Person implements Animal {//需要implements实现接口,不然在main函数里面不能够实现其接口
String name;
int age;
void display()
{
System.out.println(String.format("姓名=%s,年龄=%d",name,age));
}
public Person()
{
}
public Person (String name,int a
4000
ge) //在反射的额访问机制下,需要加上public才算一个函数
{
this.name = name;
this.age = age;
}
}
package javastudy;
public interface Animal {
}
最后的输出结果为:
姓名 = 仙儿,年齡 = 20
姓名 = Mary,年齡 = 30
javastudy.Animal
Class<?> 为泛型 中间的问号可以处理任何的类,为通配符
还是以一个例子来说明
package javastudy;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Testit {
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, IllegalArgumentException, InvocationTargetException {
//利用反射来动态创建对象
/** 把Person这个类加载到内存中去,这样c就为Person类了 **/
Class<?> c = Class.forName("javastudy.Person");
Person zhang = (Person) c.newInstance();// 新对象的类为object类,所以要强制转换为Person类,而且这里对应的构造函数应该是没有参数的,所以在Person类里面如果有了有参构造函数,那么就要再次构造一个无参的函数
zhang.name = "jack";
zhang.age = 20;
zhang.display();
Constructor<?>[] cons= c.getConstructors();
Person wang = (Person) cons[1].newInstance("Mary",30);
wang.display();
Class<?>[] inter= c.getInterfaces();
for(int i =0;i<inter.length;i++)//给我一个反射,我就能够查出里面的信息,反射就好想当于一个镜子
{
System.out.println(inter[i].getName());
}
}
}
package javastudy;
public class Person implements Animal {//需要implements实现接口,不然在main函数里面不能够实现其接口
String name;
int age;
void display()
{
System.out.println(String.format("姓名=%s,年龄=%d",name,age));
}
public Person()
{
}
public Person (String name,int a
4000
ge) //在反射的额访问机制下,需要加上public才算一个函数
{
this.name = name;
this.age = age;
}
}
package javastudy;
public interface Animal {
}
最后的输出结果为:
姓名 = 仙儿,年齡 = 20
姓名 = Mary,年齡 = 30
javastudy.Animal
相关文章推荐
- Java的I/O
- Java学习之路:不走弯路,就是捷径
- 正则表达式全部符号解释
- 详解Java类的生命周期
- SpringMVC中向服务器传递时间参数时出现的问题
- web project导入 eclipse时变成了java project
- Thinking in Java之 继承与初始化
- Eclipse 快捷注释
- 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界
- java中获取路径的方式
- 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界
- 类型信息
- java读取Excel表格数据
- Exception in thread “main” com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: empty String
- Springmvc 4.x利用@ResponseBody返回Json数据
- javaEE:day6-requset和response用法、表单参数的接受、文件手动上传(简易版)
- Java进程CPU使用率高排查
- Sublime Text3 解决编辑java保存后在cmd下运行中文显示乱码的问题
- Struts2简单例子
- Java JVM:编译加载机制与自定义类加载器