- 浏览: 25997 次
- 性别:
- 来自: 成都
文章分类
最新评论
通过无参构造实例化对象:
如果想要通过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 13251.实现输出读取文件内容的示列(不推荐使用低效): @T ... -
java中反射:反射的应用--取得类的结构(三)
2014-10-23 14:39 488通过反射的到一个类的完整结构,那么这就要使用到 java.l ... -
java中反射:认识Class类(一)
2014-10-21 11:33 502认识Class类: 在正常 ... -
java 批量测试访问谷歌IP
2014-10-21 11:22 483导入jar:log4j-1.2.17.jar,slf4j-ap ... -
java中的Annotation(注解)
2014-10-11 11:42 411Annotation(注释) 概述 从 JDK 5.0 开始, ... -
java 乱码转码类
2014-10-10 21:15 454import java.io.UnsupportedEncod ... -
java中的泛型
2014-10-09 21:57 3891. 介绍 下面是那种典型用法: ... -
java中的面向对象
2014-10-09 21:24 457理解面向对象的概念 面向过程 在一个结构体中定义窗 ... -
Java异常
2014-10-09 20:51 298任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如除 ... -
java中3种注释
2014-10-09 08:49 6771、单行注释:在注释内容前加双斜线(//),java编译器会忽 ... -
java中length与length(),size()区别
2014-10-08 17:11 10601、length:在数组操作中,使用length取得数组的长度 ... -
java 多线程有几种现实方式
2014-10-08 16:55 563(1)继承Thread类,重写run函数 创建: cl ... -
java中string与int类型互相转换
2014-10-08 16:51 4261如何将字串 String 转换成整数 int? ... -
java中i++与++i的区别
2014-10-08 16:42 352i++是在一个先使用后加1,即先使用i的值,后让i+1 ++ ... -
Java中16种主流数据库的jdbc连接字符串
2014-10-08 16:39 3761. Microsoft SQLServer(http://w ... -
字符串转换成整数 “456”转换456
2013-06-06 17:11 445http://blog.csdn.net/u010905938 ...
相关推荐
### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...
"Java中通过Class类获取Class对象的方法详解" Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...
本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景知识 在深入探讨之前,我们需要了解几个基本概念: 1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。...
总结,Java中的Class类是Java反射机制的核心,它代表了运行时的类信息。通过Class对象,我们可以动态加载类、创建对象、访问类的成员,实现运行时的灵活性和动态性。了解并熟练掌握Class类及其相关方法,对于理解和...
- `Employee.class`: 直接使用类的`.class`属性。 - `e.getClass()`: 对象的`getClass()`方法返回运行时的类。 创建对象: - `Class c = Class.forName("Employee");` - `Object o = c.newInstance();`: 调用...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
本文将深入探讨Java反射机制,并通过一个具体的示例来演示如何使用反射动态加载实例类。 #### 一、Java反射概述 Java反射API主要由以下类和接口组成: - `java.lang.Class`:表示一个类或接口的信息。 - `java....
Java的类反射是Java语言中一个强大的特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够更加灵活,可以处理未知类型的对象,实现元编程,以及在运行时创建和访问类...
这个示例代码中,我们使用了反射的API来获取T.class。首先,我们使用`getClass()`方法获取当前类的Class对象,然后使用`getGenericSuperclass()`方法获取当前类的父类的Type对象。最后,我们使用`...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...
总的来说,Java反射机制是面向对象编程的一个重要补充,它扩展了Java程序的动态性,允许程序员在运行时访问和操作类的内部结构,增强了代码的灵活性。理解和熟练掌握反射技术,对于提升Java编程能力,尤其是处理复杂...
### Java中的Class类和反射详解 #### 一、Class类的作用与意义 在Java中,`Class`类是一个非常核心且强大的类,它提供了一系列的方法来获取类的信息以及操作类。`Class`类实例通常代表了一个正在运行的Java应用...
Class类是Java反射的入口,每个类在内存中都有一个对应的Class对象。通过Class对象,我们可以获取到类的信息,如类名、包名、父类、接口、构造器、方法和字段等。常见的Class对象获取方式有:`Class.forName("全...
Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地...
本文将通过几个具体的示例来深入探讨Java反射的多个方面。 #### 案例1:通过一个对象获得完整的包名和类名 反射的第一个应用场景是如何通过一个已经存在的对象获取它的完整包名和类名。这在某些情况下非常有用,...
在 Java 中,可以使用反射机制来获取对象的属性。例如,以下代码可以获取某个对象的属性: ```java public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner....
`Class`类在Java反射机制中扮演着核心角色,它是所有Java类的运行时表示。`Class`对象可以由以下几种方式获取: 1. **通过类的`Class`属性获取**:如`String.class`。 2. **通过对象的`getClass()`方法获取**:如`...
首先,`Class.forName(String className)`是Java反射API中的一个静态方法,它用于根据给定的全限定类名(包括包名)动态地加载类。当你的应用程序需要在运行时才知道要使用哪个类,或者想要延迟加载某个类以提高性能...