Java的反射机制1——实例化一个对象
来源:互联网 发布:如何评价兄弟连 知乎 编辑:程序博客网 时间:2024/06/03 21:42
看了一下Java OOP的项目,在创建门禁卡登录类别时可以用工厂模式来实现;但后来又考虑了一下在应用工厂模式的同时可以应用Java的反射机制,Java反射的概念我个人认为很不好理解,通过例子才能融会贯通;其实理解Java的反射和理解JavaScript的eval函数一样,都是将一个字符型数据转换为相应的类、属性和方法;通过下面的例子来熟悉一下Java的反射;
首先定义一个教员类,如下:
如果我们实例化这个类可以用我们常用的如下方式:
可以清晰的想到运行结果是:名字是:无名氏
以上是我们最常用的方式,但有时我们想通过字符串来实例化一个类如何做呢,看下面代码:
运行结果同样是:名字是:无名氏
首先Class.forName(类名)是将这个类加载到JVM虚拟机中,获得一个类型为Class的类,然后调用其newInstance()方法,相当于实例化(调用无参的构造函数);所以以上两段代码的运行效果是一致的。
我们看到AccpTeacher这个类有一个带参数的构造方法,那如何通过反射来调用它呢?看下面代码:
//教员类
public class AccpTeacher {
private String name;
private int age;
public AccpTeacher() {
name = "无名氏";
age = 22;
}
public AccpTeacher(String name) {
this.name = name;
this.age = 22;
}
public String toString() {
return "名字是:" + name;
}
public String toString(int age, String name) {
this.name = name;
this.age = age;
return "名字是:" + name + ";年龄是:" + age;
}
}
public class AccpTeacher {
}
public static void main(String[] args){
AccpTeacher accpTeacher = new AccpTeacher();
System.out.println(accpTeacher);
}
}
public static void main(String[] args){
// 实例化一个类
Object accpTeacher = Class.forName(AccpTeacher.class.getName()).newInstance();
System.out.println(accpTeacher);
}
}
public static void main(String[] args){
// 通过构造方法实例化一个类;本例是一个有参数的构造函数,并且构造函数可以为private修饰
Class[] argtype = new Class[] { String.class };//代表构造方法的参数类型数组
Object[] argparam = new Object[] { "张三" };//代表构造方法的参数值数组
Class classType = Class.forName(AccpTeacher.class.getName());
Constructor constructor = classType.getDeclaredConstructor(argtype); //获得构造方法,argtype是参数类型数组,我们这里代表的是参数只有一个String类型
constructor.setAccessible(true);// 访问私有构造函数,Spring可以配置私有的属性和方法,其实就是用到的这里
Object accpTeacher2 = constructor.newInstance(argparam);
System.out.println(accpTeacher2);
}
}
原文地址:http://blog.sina.com.cn/s/blog_754c6dff0100s81d.html
1 0
- Java的反射机制1——实例化一个对象
- java反射机制(一)—— 利用反射机制实例化对象
- java反射机制—— 利用反射机制实例化对象
- 关于Java反射机制的一个实例
- java反射机制实例化对象
- java反射机制——通过无参构造实例化对象
- Java中的反射(3)——在运行时使用反射分析实例化的对象
- java反射机制-通过无参构造实例化对象
- Java——反射机制实例
- 通过Java的反射机制来Copy一个对象
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Navicat如何进行搜索筛选
- 经典正则表达式教程
- java23种设计模式
- 将cordova嵌入iOS应用
- uva 11300
- Java的反射机制1——实例化一个对象
- iOS开发之沙盒机制
- PendingIntent的flag
- linux find命令-exec参数使用说明
- pow
- poj1679+次小生成树
- 【Java工具】将一个对象转换成Map
- MFC 非模态对话框 创建 销毁
- 论现在的html5有多火?