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反射实例"的详细解释: 1. **获取Class对象** 要使用反射,首先需要获取到对应的`Class`对象。这可以通过以下三种方式实现: - 使用`Class.forName()`方法,传入类的全名(包括包名)。 - 对象的`...
在Java编程语言中,反射(Reflection)是一种强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法等对象。枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-...
Java反射是Java编程语言中的一个强大特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性使得Java具有高度的灵活性,尤其在处理框架、插件系统以及元数据驱动...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至动态地创建对象并调用其方法。通过反射,开发者可以实现高度灵活和动态的代码,这对于框架开发、元编程...
Java反射是Java编程语言中的一个强大特性,它允许程序在运行时检查类、接口、字段和方法的信息,甚至能够在运行时动态地创建对象并调用其方法。这一特性基于Java的`java.lang.reflect`包,提供了对类和对象深层次...
Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象的内部信息,即使这些信息在编译时并不知道。这一机制使得Java具有了高度的动态性,能够实现元编程,即在程序...
例如,`Field`类提供了`get()`和`set()`方法来访问和修改字段的值,`Constructor`和`Method`类则提供了`newInstance()`和`invoke()`方法来实例化对象和调用方法。 反射在Java中广泛应用于各种场景,如框架开发(如...
`Class`对象的`newInstance()`方法可以实例化无参构造器的类,但如果有参数,就需要使用`getConstructor()`或`getDeclaredConstructor()`获取构造器,然后通过`newInstance()`创建对象。对于私有构造器,需要设置...
Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未被明确引用。反射提供了动态类型的能力,使得代码可以在运行时检查类的信息,创建...
2. 动态创建对象:使用`Class.newInstance()`或`Constructor.newInstance()`方法来实例化对象,即使在编译时不知道具体类名。 3. 访问和修改字段:通过`Field`对象可以获取和设置对象的字段值,包括私有字段。 4. ...
总之,Java反射机制为开发者提供了运行时的灵活性,让我们能够以一种动态的方式操控类和对象,从而实现了许多高级功能。在理解和使用反射时,需要权衡其优点和潜在的风险,合理地将其应用于项目中。
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制...
3. **框架开发**:许多Java框架如Spring、Hibernate等都大量使用反射来实现配置文件驱动的编程,动态加载和实例化对象。 4. **插件机制**:通过反射,可以加载和执行未知的插件类,实现模块化的扩展。 5. **数据...
我们可以通过Class对象来实例化对象、获取类的构造器、方法和字段信息。例如,`Class<?> clazz = Class.forName("全限定类名");` 这行代码可以动态获取指定类的Class对象。 3. **反射包** - 主要是指`java.lang....
1. **Class类**: `Class`对象是Java反射的入口点,可以通过`Class.forName()`或对象的`getClass()`方法获取。它提供了获取类信息的各种方法,如获取类名、父类、接口、构造器、方法和字段等。 2. **Constructor类**...
7. **ch9**: 可能涵盖了反射(reflection)和动态代理,这两个高级特性允许程序在运行时检查和操作类、接口、方法等。 8. **B**: 这个文件名不遵循常规的命名规则,可能是某种特殊主题或者实验,比如GUI编程(如Swing...
2. **性能**:反射通常比常规的Java代码慢得多,因为它涉及到更多的类型检查和转换。 3. **异常处理**:在使用反射时,需要妥善处理可能出现的各种异常,如`ClassNotFoundException`、`IllegalAccessException`、`...
Java反射机制是Java编程语言中的一个重要特性,它赋予了程序在运行时检查和操作类、接口、字段和方法的能力。这种动态类型的行为使得Java在某种程度上具有了类似于Perl、Python和Ruby等动态语言的灵活性。 Java反射...
- **对象的序列化和反序列化**:当需要在不同的环境之间传输Java对象时,反射机制可以用来构建对象的属性。 #### 反射机制的局限性 虽然反射机制功能强大,但它也有一些局限性和潜在的问题: - **性能开销**:...
1. 动态加载类:在运行时根据用户输入或其他条件动态加载和实例化类。 2. 访问私有成员:反射可以用来访问和修改类的私有属性和方法,这在测试或者特殊需求时非常有用。 3. 调用方法:即使在编写代码时不知道具体的...