- 浏览: 24835 次
- 性别:
- 来自: 成都
文章分类
最新评论
通过无参构造实例化对象:
如果想要通过Class类本身实例化其他类的对象,则可以使用newInstance()方法,但是必须要保证被实例化的类中存在一个无参构造方法。
范例:
Person类:
package com.testFS.test;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [姓名=" + name + ", 年龄=" + age + "]";
}
}
运行结果:
Person [姓名=hello, 年龄=20]
从程序的运行结果可以发现,通过Class.forName()方法实例化Class对象后,直接调用newInstance()方法就可以根据传入的完整“包.类” 名称的方式进行对象的实例化操作,完全取代之前使用关键字new的操作方式。
切记:被实例化对象的类中必须存在无参构造方法,如果不存在则肯定是无法实例化的。
提示:
在实际的java程序开发中,反射是最重要的操作原理,在现在的开发设计中大量地应用了反射处理机制,如Struts,spring 框架等;在大部分的操作中基本上都操作无参构造方法,所以在开发类中一定要保留无参构造方法。
调用有参构造实例化对象:
对于类中的有参构造方法,在操作时需要明确地调用类中的构造方法,并非将参数传递进去后才可以进行实例化操作。
操作步骤如下:
(1)通过Class类中的getConstructors() 方法取得本类中的全部构造方法。
(2)向构造方法中传递一个对象数组进去,里面包含了构造方法中所需要的各个参数。
(3)之后通过Constructor实例化对象。
这里使用Constructor,表示构造方法:
范例:
Person类:
package com.testFS.test;
public class Person {
private String name;
private int age;
/*public Person() {
super();
// TODO Auto-generated constructor stub
}*/
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [姓名=" + name + ", 年龄=" + age + "]";
}
}
InstanceDemo02类:
package com.testFS.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class InstanceDemo02 {
public static void main(String[] args) {
Class> c=null;
try {
c=Class.forName("com.testFS.test.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Person per=null; //声明Person对象
Constructor> cons[]=null; //声明一个表示构造方法的数组
cons=c.getConstructors(); //通过反射取得全部构造
try {
per=(Person) cons[0].newInstance("Lihua",30);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(per); //输出对象
}
}
运行结果:
Person [姓名=Lihua, 年龄=30]
如果想要通过Class类本身实例化其他类的对象,则可以使用newInstance()方法,但是必须要保证被实例化的类中存在一个无参构造方法。
范例:
Person类:
package com.testFS.test;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [姓名=" + name + ", 年龄=" + age + "]";
}
}
运行结果:
Person [姓名=hello, 年龄=20]
从程序的运行结果可以发现,通过Class.forName()方法实例化Class对象后,直接调用newInstance()方法就可以根据传入的完整“包.类” 名称的方式进行对象的实例化操作,完全取代之前使用关键字new的操作方式。
切记:被实例化对象的类中必须存在无参构造方法,如果不存在则肯定是无法实例化的。
提示:
在实际的java程序开发中,反射是最重要的操作原理,在现在的开发设计中大量地应用了反射处理机制,如Struts,spring 框架等;在大部分的操作中基本上都操作无参构造方法,所以在开发类中一定要保留无参构造方法。
调用有参构造实例化对象:
对于类中的有参构造方法,在操作时需要明确地调用类中的构造方法,并非将参数传递进去后才可以进行实例化操作。
操作步骤如下:
(1)通过Class类中的getConstructors() 方法取得本类中的全部构造方法。
(2)向构造方法中传递一个对象数组进去,里面包含了构造方法中所需要的各个参数。
(3)之后通过Constructor实例化对象。
这里使用Constructor,表示构造方法:
范例:
Person类:
package com.testFS.test;
public class Person {
private String name;
private int age;
/*public Person() {
super();
// TODO Auto-generated constructor stub
}*/
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [姓名=" + name + ", 年龄=" + age + "]";
}
}
InstanceDemo02类:
package com.testFS.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class InstanceDemo02 {
public static void main(String[] args) {
Class> c=null;
try {
c=Class.forName("com.testFS.test.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Person per=null; //声明Person对象
Constructor> cons[]=null; //声明一个表示构造方法的数组
cons=c.getConstructors(); //通过反射取得全部构造
try {
per=(Person) cons[0].newInstance("Lihua",30);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(per); //输出对象
}
}
运行结果:
Person [姓名=Lihua, 年龄=30]
发表评论
-
java复制文件高效处理方式
2014-12-18 21:44 12871.实现输出读取文件内容的示列(不推荐使用低效): @T ... -
java中反射:反射的应用--取得类的结构(三)
2014-10-23 14:39 458通过反射的到一个类的完整结构,那么这就要使用到 java.l ... -
java中反射:认识Class类(一)
2014-10-21 11:33 468认识Class类: 在正常 ... -
java 批量测试访问谷歌IP
2014-10-21 11:22 483导入jar:log4j-1.2.17.jar,slf4j-ap ... -
java中的Annotation(注解)
2014-10-11 11:42 391Annotation(注释) 概述 从 JDK 5.0 开始, ... -
java 乱码转码类
2014-10-10 21:15 435import java.io.UnsupportedEncod ... -
java中的泛型
2014-10-09 21:57 3581. 介绍 下面是那种典型用法: ... -
java中的面向对象
2014-10-09 21:24 430理解面向对象的概念 面向过程 在一个结构体中定义窗 ... -
Java异常
2014-10-09 20:51 277任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除 ... -
java中3种注释
2014-10-09 08:49 6311、单行注释:在注释内容前加双斜线(//),java编译器会忽 ... -
java中length与length(),size()区别
2014-10-08 17:11 10241、length:在数组操作中,使用length取得数组的长度 ... -
java 多线程有几种现实方式
2014-10-08 16:55 538(1)继承Thread类,重写run函数 创建: cl ... -
java中string与int类型互相转换
2014-10-08 16:51 3961如何将字串 String 转换成整数 int? ... -
java中i++与++i的区别
2014-10-08 16:42 331i++是在一个先使用后加1,即先使用i的值,后让i+1 ++ ... -
Java中16种主流数据库的jdbc连接字符串
2014-10-08 16:39 3511. Microsoft SQLServer(http://w ... -
字符串转换成整数 “456”转换456
2013-06-06 17:11 415http://blog.csdn.net/u010905938 ...
相关推荐
JAVA反射机制-Class类-Class对象的获取.pdf
二,反射机制的作用: 1,反编译:.class-->.java 2,通过反射机制访问java对象的属性,方法,构造方法等; 这样好像更容易理解一些,下边我们具体看怎么实现这些功能。
Java——枚举: enum关键字、Enum类 类集对枚举的支持——EnumMap类与EnumSet类 枚举类实现接口、在枚举类中定义抽象方法 Java反射机制: Class类、Class类的使用 反射的应用:取得类的结构
Java程序使用反射来查看类文件的详细信息。 它与jdk中的javap命令有点类似,但显示了更多有组织的细节。 安装 从下面的zip下载并解压缩代码/类文件。 用法 代码 将类目录yourDirectory/jorex/programs/reflector/到...
java反射jar包中class,并可进行文件比较
反射可以通过类名来寻找这个类的所有相关信息、类似于人类的记忆,事先在记忆中有了这个事物的信息,人就可以通过名字来在记忆中寻找事物的具体信息。 Reflection(反射) 是被视为动态语言的关键,反射机制允许程序在...
在Java的反射中,Class.forName和ClassLoader的区别共4页.pdf.zip
未经允许禁止转载,转载请联系作者。 目录 一 反射(Reflect)初识 二 反射的基本使用和常用API 2.1 基本使用 2.2 反射获取一个对象的步骤 2.3 反射常用API 2.3.1 获取反射中的Class对象 ...4.1 Java反射机制的起源
反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取...
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
(通过反射获取无参构造方法并使用) (通过反射获取带参构造方法并使用) (通过反射获取私有构造方法并使用) (通过反射获取成员变量并使用) (通过反射获取无参无返回值成员方法并使用) (通过反射获取带参带返回值成员...
适用于有一定Java编程基础的开发人员,希望了解和应用Java反射机制的使用者。 使用场景及目标 使用反射机制的典型场景包括以下几个方面: 在运行时动态加载和创建类对象。 通过反射调用对象的方法和访问对象的字段...
JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 我的代码里主要有一下知识点: 1.获取Class对象的三种方式 2.获取构造方法并调用 3.获取成员方法 4.获取成员变量 5.反射数组 6.通过反射...
里面主要是介绍Java反射的只是,包括介绍Class类的初始化,如何通过反射动态加载类和获取类的信息等。
使用JAVA反射机制动态调用 计算器对象的加法,减法函数。 使用JAVA反射机制修改一个学生对象 的私有数据成员(不允许调用setters) 使用的类有Class, Method, Field
主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下