`

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对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...

    Java中通过Class类获取Class对象的方法详解

    "Java中通过Class类获取Class对象的方法详解" Java中获取Class对象是Java基础知识中的一个重要部分,通过Class类可以获取Class对象,Class对象是Java虚拟机在加载类时自动构造的。下面将详细介绍通过Class类获取...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...

    java 利用反射获取内部类静态成员变量的值操作.docx

    本文将详细介绍如何使用Java反射技术来获取内部类中的静态成员变量的值。 #### 二、背景知识 在深入探讨之前,我们需要了解几个基本概念: 1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。...

    Java中的CLASS类Java中的CLASS类

    总结,Java中的Class类是Java反射机制的核心,它代表了运行时的类信息。通过Class对象,我们可以动态加载类、创建对象、访问类的成员,实现运行时的灵活性和动态性。了解并熟练掌握Class类及其相关方法,对于理解和...

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

    - `Employee.class`: 直接使用类的`.class`属性。 - `e.getClass()`: 对象的`getClass()`方法返回运行时的类。 创建对象: - `Class c = Class.forName("Employee");` - `Object o = c.newInstance();`: 调用...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    Java反射动态加载实例类

    本文将深入探讨Java反射机制,并通过一个具体的示例来演示如何使用反射动态加载实例类。 #### 一、Java反射概述 Java反射API主要由以下类和接口组成: - `java.lang.Class`:表示一个类或接口的信息。 - `java....

    java的类反射

    Java的类反射是Java语言中一个强大的特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够更加灵活,可以处理未知类型的对象,实现元编程,以及在运行时创建和访问类...

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

    这个示例代码中,我们使用了反射的API来获取T.class。首先,我们使用`getClass()`方法获取当前类的Class对象,然后使用`getGenericSuperclass()`方法获取当前类的父类的Type对象。最后,我们使用`...

    java反射 java反射 java反射java反射

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...

    java中反射的概念

    总的来说,Java反射机制是面向对象编程的一个重要补充,它扩展了Java程序的动态性,允许程序员在运行时访问和操作类的内部结构,增强了代码的灵活性。理解和熟练掌握反射技术,对于提升Java编程能力,尤其是处理复杂...

    java中的Class类和反射.docx

    ### Java中的Class类和反射详解 #### 一、Class类的作用与意义 在Java中,`Class`类是一个非常核心且强大的类,它提供了一系列的方法来获取类的信息以及操作类。`Class`类实例通常代表了一个正在运行的Java应用...

    Java中的反射

    Class类是Java反射的入口,每个类在内存中都有一个对应的Class对象。通过Class对象,我们可以获取到类的信息,如类名、包名、父类、接口、构造器、方法和字段等。常见的Class对象获取方式有:`Class.forName("全...

    Java反射调用工具类

    Java反射调用是Java语言提供的一种强大的动态类型机制,它允许程序在运行时检查并使用类的信息,包括类的方法、属性以及构造器等。在Java中,反射是通过`java.lang.reflect`包中的类实现的,如`Class`、`Constructor...

    java 反射的使用

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是`java.lang.Class`,它代表了类的信息。通过反射,我们可以动态地...

    反射:java知识中的重点

    本文将通过几个具体的示例来深入探讨Java反射的多个方面。 #### 案例1:通过一个对象获得完整的包名和类名 反射的第一个应用场景是如何通过一个已经存在的对象获取它的完整包名和类名。这在某些情况下非常有用,...

    JAVA基础--JAVA中的反射机制详解

    在 Java 中,可以使用反射机制来获取对象的属性。例如,以下代码可以获取某个对象的属性: ```java public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner....

    java面试题--反射机制

    `Class`类在Java反射机制中扮演着核心角色,它是所有Java类的运行时表示。`Class`对象可以由以下几种方式获取: 1. **通过类的`Class`属性获取**:如`String.class`。 2. **通过对象的`getClass()`方法获取**:如`...

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

    首先,`Class.forName(String className)`是Java反射API中的一个静态方法,它用于根据给定的全限定类名(包括包名)动态地加载类。当你的应用程序需要在运行时才知道要使用哪个类,或者想要延迟加载某个类以提高性能...

Global site tag (gtag.js) - Google Analytics