`

java中反射:Class类的使用(二)

 
阅读更多
通过无参构造实例化对象:
如果想要通过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反射机制-Class类-Class对象的获取.pdf

    JAVA反射机制-Class类-Class对象的获取.pdf

    java反射 反编译:.class-->.java

    二,反射机制的作用: 1,反编译:.class-->.java 2,通过反射机制访问java对象的属性,方法,构造方法等; 这样好像更容易理解一些,下边我们具体看怎么实现这些功能。

    Java期末复习——枚举与反射机制

    Java——枚举: enum关键字、Enum类 类集对枚举的支持——EnumMap类与EnumSet类 枚举类实现接口、在枚举类中定义抽象方法 Java反射机制: Class类、Class类的使用 反射的应用:取得类的结构

    JavaClassViewer:使用iava反射查看类文件的所有详细信息

    Java程序使用反射来查看类文件的详细信息。 它与jdk中的javap命令有点类似,但显示了更多有组织的细节。 安装 从下面的zip下载并解压缩代码/类文件。 用法 代码 将类目录yourDirectory/jorex/programs/reflector/到...

    java反射jar包中class,并可进行文件比较

    java反射jar包中class,并可进行文件比较

    java 反射Reflection;Class类

    反射可以通过类名来寻找这个类的所有相关信息、类似于人类的记忆,事先在记忆中有了这个事物的信息,人就可以通过名字来在记忆中寻找事物的具体信息。 Reflection(反射) 是被视为动态语言的关键,反射机制允许程序在...

    在Java的反射中,Class.forName和Class

    在Java的反射中,Class.forName和ClassLoader的区别共4页.pdf.zip

    Java反射总结:入门进阶到使用

    未经允许禁止转载,转载请联系作者。 目录 一 反射(Reflect)初识 二 反射的基本使用和常用API 2.1 基本使用 2.2 反射获取一个对象的步骤 2.3 反射常用API 2.3.1 获取反射中的Class对象 ...4.1 Java反射机制的起源

    Java常用的反射方法

    反射获取Class类对象的三种方法 2.1 通过全类名的方式获取 2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取...

    Java反射技术的一般应用

    在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...

    JAVA反射机制详解视频

    (通过反射获取无参构造方法并使用) (通过反射获取带参构造方法并使用) (通过反射获取私有构造方法并使用) (通过反射获取成员变量并使用) (通过反射获取无参无返回值成员方法并使用) (通过反射获取带参带返回值成员...

    Java的反射机制讲解案例代码 Class类、 获取类的结构信息:构造函数、方法和字段,动态创建对象、调用方法和设置属性

    适用于有一定Java编程基础的开发人员,希望了解和应用Java反射机制的使用者。 使用场景及目标 使用反射机制的典型场景包括以下几个方面: 在运行时动态加载和创建类对象。 通过反射调用对象的方法和访问对象的字段...

    java反射JAVA REFLECT (java 反射)

    JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...

    Java反射机制总结

    这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。

    java习题-反射-chap15.pdf

    Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...

    java反射知识点

    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 我的代码里主要有一下知识点: 1.获取Class对象的三种方式 2.获取构造方法并调用 3.获取成员方法 4.获取成员变量 5.反射数组 6.通过反射...

    Java反射机制知识

    里面主要是介绍Java反射的只是,包括介绍Class类的初始化,如何通过反射动态加载类和获取类的信息等。

    JAVA反射机制动态调用 计算器对象的加法,减法函数;JAVA反射机制修改一个学生对象 的私有数据成员

    使用JAVA反射机制动态调用 计算器对象的加法,减法函数。 使用JAVA反射机制修改一个学生对象 的私有数据成员(不允许调用setters) 使用的类有Class, Method, Field

    Java泛型的用法及T.class的获取过程解析

    主要介绍了Java泛型的用法及T.class的获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics