`
天天木落
  • 浏览: 3919 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

Java反射实例化对象和常规方法实例化对象

阅读更多

1.一个car类

package java_foundation.test_reflect;

public class Car {
 private String brand;
 private String color;
 private int maxSpeed;
 
 /**
  * 创建一个新的实例Car.
  *
  */
 public Car() {
  
 }

 
 /**
  * 创建一个新的实例Car.
  *
  * @param brand
  * @param color
  * @param maxSpeed
  */
 public Car(String brand, String color, int maxSpeed) {
  super();
  this.brand = brand;
  this.color = color;
  this.maxSpeed = maxSpeed;
 }
 
 public void introduce() {
  System.out.println("brand:"+brand+";color:"+color+";maxSpeed:"+maxSpeed);
 }


 public String getBrand() {
  return this.brand;
 }


 public void setBrand(String brand) {
  this.brand = brand;
 }


 public String getColor() {
  return this.color;
 }


 public void setColor(String color) {
  this.color = color;
 }


 public int getMaxSpeed() {
  return this.maxSpeed;
 }


 public void setMaxSpeed(int maxSpeed) {
  this.maxSpeed = maxSpeed;
 }
}

2.用两种方式实例化对象

package java_foundation.test_reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

@SuppressWarnings(value={"unchecked","rawtypes"})
public class RelectTest {

 /**
  * @creationDate. 2013-7-20 上午12:11:14
  * @param args
  */

 public static void main(String[] args) throws Throwable{
  // TODO Auto-generated method stub
  Car carA = initByCommon();
  carA.introduce();
  Car carB = initByDefaultConstructor();
  carB.introduce();
 }
 
 /**
  * 常规实例化对象
  * @creationDate. 2013-7-20 上午12:42:52
  * @return
  */
 public static Car initByCommon(){
  Car car = new Car();
  car.setBrand("红旗A");
  car.setColor("红色");
  car.setMaxSpeed(300);
  return car;
 }
 
 /**
  * 通过反射实例化对象
  * @creationDate. 2013-7-20 上午12:43:29
  * @return
  * @throws Throwable
  */
 public static Car initByDefaultConstructor() throws Throwable{
  // 获取类对象
  ClassLoader loader = Thread.currentThread().getContextClassLoader();
  Class clazz = loader.loadClass("java_foundation.test_reflect.Car");
  
  // 获取构造器对象
  Constructor cons = clazz.getDeclaredConstructor((Class[])null);
  // 获得实例化对象
  Car car = (Car)cons.newInstance();
  
  // 获得反射方法
  Method setBrand = clazz.getMethod("setBrand", String.class);
  // 调用实例对象的相应方法
  setBrand.invoke(car, "红旗B");
  
  // 同理
  Method setColor = clazz.getMethod("setColor", String.class);
  setColor.invoke(car, "黑色");
  
  // 同理
  Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
  setMaxSpeed.invoke(car, 200);
  
  return car;
 }
}

分享到:
评论

相关推荐

    Java反射实例

    以下是对"Java反射实例"的详细解释: 1. **获取Class对象** 要使用反射,首先需要获取到对应的`Class`对象。这可以通过以下三种方式实现: - 使用`Class.forName()`方法,传入类的全名(包括包名)。 - 对象的`...

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

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

    java反射源代码

    Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...

    java反射........

    Java反射是Java编程语言中的一个强大特性,它允许程序在运行时检查类、接口、字段和方法的信息,甚至能够在运行时动态地创建对象并调用其方法。这一特性基于Java的`java.lang.reflect`包,提供了对类和对象深层次...

    Javafanshe.rar_java 反射_java反射_反射_反射机制

    Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象的内部信息,即使这些信息在编译时并不知道。这一机制使得Java具有了高度的动态性,能够实现元编程,即在程序...

    java反射&权限控制.pdf

    例如,`Field`类提供了`get()`和`set()`方法来访问和修改字段的值,`Constructor`和`Method`类则提供了`newInstance()`和`invoke()`方法来实例化对象和调用方法。 反射在Java中广泛应用于各种场景,如框架开发(如...

    Java反射机制

    `Class`对象的`newInstance()`方法可以实例化无参构造器的类,但如果有参数,就需要使用`getConstructor()`或`getDeclaredConstructor()`获取构造器,然后通过`newInstance()`创建对象。对于私有构造器,需要设置...

    实例讲解Java基础之反射

    Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未被明确引用。反射提供了动态类型的能力,使得代码可以在运行时检查类的信息,创建...

    java反射机制介绍

    2. 动态创建对象:使用`Class.newInstance()`或`Constructor.newInstance()`方法来实例化对象,即使在编译时不知道具体类名。 3. 访问和修改字段:通过`Field`对象可以获取和设置对象的字段值,包括私有字段。 4. ...

    Java 反射机制浅析

    总之,Java反射机制为开发者提供了运行时的灵活性,让我们能够以一种动态的方式操控类和对象,从而实现了许多高级功能。在理解和使用反射时,需要权衡其优点和潜在的风险,合理地将其应用于项目中。

    fanshe_JAVA.zip_java 反射

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制...

    9.3 Java反射reflect

    3. **框架开发**:许多Java框架如Spring、Hibernate等都大量使用反射来实现配置文件驱动的编程,动态加载和实例化对象。 4. **插件机制**:通过反射,可以加载和执行未知的插件类,实现模块化的扩展。 5. **数据...

    java中反射知识总结

    我们可以通过Class对象来实例化对象、获取类的构造器、方法和字段信息。例如,`Class<?> clazz = Class.forName("全限定类名");` 这行代码可以动态获取指定类的Class对象。 3. **反射包** - 主要是指`java.lang....

    Java反射操作(需要commons-beanutils-1.8.2.jar)

    1. **Class类**: `Class`对象是Java反射的入口点,可以通过`Class.forName()`或对象的`getClass()`方法获取。它提供了获取类信息的各种方法,如获取类名、父类、接口、构造器、方法和字段等。 2. **Constructor类**...

    java简单实例程序源代码

    7. **ch9**: 可能涵盖了反射(reflection)和动态代理,这两个高级特性允许程序在运行时检查和操作类、接口、方法等。 8. **B**: 这个文件名不遵循常规的命名规则,可能是某种特殊主题或者实验,比如GUI编程(如Swing...

    利用反射,根据类得完全限定名获得该类得实例

    2. **性能**:反射通常比常规的Java代码慢得多,因为它涉及到更多的类型检查和转换。 3. **异常处理**:在使用反射时,需要妥善处理可能出现的各种异常,如`ClassNotFoundException`、`IllegalAccessException`、`...

    Java反射机制-侯捷观点

    Java反射机制是Java编程语言中的一个重要特性,它赋予了程序在运行时检查和操作类、接口、字段和方法的能力。这种动态类型的行为使得Java在某种程度上具有了类似于Perl、Python和Ruby等动态语言的灵活性。 Java反射...

    Java反射机制概述.pdf

    - **对象的序列化和反序列化**:当需要在不同的环境之间传输Java对象时,反射机制可以用来构建对象的属性。 #### 反射机制的局限性 虽然反射机制功能强大,但它也有一些局限性和潜在的问题: - **性能开销**:...

    JAVA 反射PPT的示例代码

    1. 动态加载类:在运行时根据用户输入或其他条件动态加载和实例化类。 2. 访问私有成员:反射可以用来访问和修改类的私有属性和方法,这在测试或者特殊需求时非常有用。 3. 调用方法:即使在编写代码时不知道具体的...

Global site tag (gtag.js) - Google Analytics