public class ReflectUtils {
/**
* @param args
* @return void
* @throws ClassNotFoundException
* @throws SecurityException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws
* @Author:qqulijun@163.com @2014-11-10下午3:22:49
*/
public static void main(String[] args) throws Exception {
car c=new car("劳斯莱斯","褐色",10);
c.toprint();
/** 通过编程的方式对jvm类信息对象直接进行操作。 **/
/** 类装载器就是寻找类的字节码文件并构造出类在jvm内部表示对象的组件。 **/
ClassLoader loader=Thread.currentThread().getContextClassLoader();
System.out.println("current loader(系统类装载器):"+loader);
System.out.println("current parent loader(扩展类装载器):"+loader.getParent());
/** 根装载器在java中找不到,由C++编写,固然返回null **/
System.out.println("current parent parent loader(根装载器-->负责装载jre的核心类库):"+loader.getParent().getParent());
/** 通过指定的全限定类com.caishijie.gateway.util.car来装载car类对应的反射实例。 **/
Class<?> clazz=loader.loadClass("com.caishijie.gateway.util.car");
Constructor cons=clazz.getDeclaredConstructor((Class[])null);
c=(car)cons.newInstance();
System.out.println(ClassUtils.getShortName(clazz));
// Class<?> ccc= (Class<?>) ((ParameterizedType).getGenericSuperclass()).getActualTypeArguments()[0];
Method m1=clazz.getMethod("setBrand", String.class);
m1.invoke(c, "劳斯莱斯");
Method m2=clazz.getMethod("setColor", String.class);
m2.invoke(c, "褐色");
Method m3=clazz.getMethod("setSize", int.class);
m3.invoke(c, 10);
c.toprint();
}
}
class car{
private String brand;
private String color;
private int size;
public car(){}
public car(String brand,String color,int size){
this.brand=brand;
this.color=color;
this.size=size;
}
public void toprint(){
System.out.println(brand+" "+color+" "+size);
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
相关推荐
3. **JDBC加载数据库驱动类**:JDBC通过反射加载不同厂商提供的数据库驱动,实现对不同数据库的支持。 ### 反射的优势及缺陷 #### 优势 1. **增加程序的灵活性**:反射使得程序可以根据运行时的数据来动态地调整...
在探讨Java类的生命周期之前,我们先简单回顾一下Java类从创建到销毁的过程。Java作为一种广泛使用的编程语言,其强大的功能背后离不开Java虚拟机(JVM)的支持。对于Java开发者而言,理解类的生命周期不仅有助于更...
通过反射,开发者可以编写更加灵活和适应性强的代码,比如在框架中动态加载类、根据类信息生成文档、执行条件化操作等。 总的来说,PHP反射提供了一种强大的工具,使得程序员可以在程序运行时获取和修改代码的内部...
Java反射是Java编程语言中的一个重要特性,它允许运行时的Java程序访问并操作类和对象的信息,包括类名、方法、字段以及构造器等。在本文中,我们将深入探讨Java反射的使用及其重要性。 首先,让我们理解反射的基本...
- 类加载器负责将类文件加载到JVM中,并且有一个委托机制来决定哪个类加载器加载某个类。 ##### 2. 自定义类加载器的编写原理分析 - 可以自定义类加载器来实现特定的加载逻辑,如加载加密的类文件。 ##### 3. 编写...
1. **Java基础知识回顾**:这部分内容可能涵盖变量、数据类型、控制结构(如if语句、循环)、类与对象、封装、继承和多态等基本概念。此外,也可能涉及异常处理、文件I/O和集合框架的基础知识,如ArrayList、...
压缩包中的“JSD1606_Reflect”可能包含了一些示例代码,比如创建动态代理、实现运行时动态加载类、处理序列化等常见反射应用场景。 通过这个压缩包的学习,初学者可以了解到Java反射的基础知识,而有经验的开发者...
以下是一个简单的示例,展示了如何使用反射获取并展示类MyClass的方法: ```csharp class MyClass { // ... 方法定义 ... } var type = typeof(MyClass); var methods = type.GetMethods(); foreach (var method ...
这可以通过`typeof()`运算符完成,或者通过`Assembly`类加载特定程序集内的类型。 ```csharp Type t = typeof(MyClass); ``` 一旦我们有了`Type`对象,我们可以通过调用`GetConstructors()`方法获取该类型的所有...
9. **JVM**:理解JVM的结构,包括堆内存、栈内存、方法区、本地方法栈等,以及JVM优化相关的知识,如内存调优、类加载机制等。 10. **泛型**:泛型是Java 5引入的新特性,用于增强类型安全性和减少强制类型转换。...
饿汉式单例模式在类加载时创建实例,懒汉式单例模式在第一次访问时创建实例,静态内部类单例模式使用静态内部类来创建实例。 万恶的反射 反射是 Java 中的一种机制,用于在运行时访问和操作类的成员变量和方法。...
- 继承:一个类可以继承另一个类的属性和方法,实现代码复用。 - 多态:多态性允许同名方法在不同类中有不同的实现,增强了程序的灵活性。 3. **包(Package)与导入** - 包:用于组织和管理Java类,避免命名...
2. 如何使用反射:通过`Class.forName()`加载类,然后使用`newInstance()`创建对象,`getDeclaredMethods()`和`getDeclaredFields()`获取类的方法和字段,`invoke()`调用方法,`set()`和`get()`操作属性。...
这份"18天Java笔记"提供了一个快速学习Java的核心内容精华,适合初学者和有一定经验的开发者进行回顾和巩固。txt版的格式使得笔记易于阅读和在不同设备上分享。 Java的基础知识包括语法、数据类型、控制流、类与...
"一个很菜的 Java 作业.zip"这个压缩包文件显然包含了某个大学生在学习Java编程时所做的笔记、复习资料以及课程作业,这对于初学者或者需要回顾基础知识的人来说是一份宝贵的资源。下面将根据这些信息,详细讲解Java...
8. **反射**:反射是Java中强大的动态类型功能,允许程序在运行时检查和操作类、接口和对象。试题可能会涉及Class类、Constructor、Method和Field等。 9. **泛型**:泛型的引入增强了代码的类型安全性和重用性,...
JVM是Java程序的运行环境,负责加载类、执行字节码、垃圾回收等。了解JVM的工作原理和调优技巧,对于提升程序性能至关重要。 这份"java复习笔记"涵盖了Java编程的多个重要方面,无论是初学者还是有经验的开发者,都...
Java SE(标准版)是Java编程语言的核心部分,主要用于桌面应用程序的开发。...对于初学者来说,这是一个极好的自我学习和提高的途径,对于有经验的开发者来说,也是一个回顾基础和寻找灵感的好来源。
- **Class类**:理解Class对象的获取,通过反射动态加载类和创建对象。 - **方法的反射**:调用类的私有方法,获取方法的参数和返回类型。 - **构造器的反射**:通过Constructor类创建对象,理解构造器的可见性和...