import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashMap;
public class TestRef {
public static void main(String[] args) throws Exception {
TestRef testRef = new TestRef();
Class clazz = TestRef. class ;
System.out.println( " getPackage() = " + clazz.getPackage().getName());
// getModifiers()的返回值可以包含类的种类信息。比如是否为public,abstract,static
int mod = clazz.getModifiers();
System.out.println( " Modifier.isAbstract(mod) = " + Modifier.isAbstract(mod));
System.out.println( " getName() = " + clazz.getName());
System.out.println( " getSuperclass() = " + clazz.getSuperclass().getName());
System.out.println( " getInterfaces() = " + clazz.getInterfaces()); // 实现了哪些Interface
System.out.println( " clazz.getDeclaredClasses() = " + clazz.getDeclaredClasses()); // 包含哪些内部类
System.out.println( " getDeclaringClass() = " + clazz.getDeclaringClass()); // 如果clazz是inner class 那么返回其outer class
System.out.println( " ---------- " );
Constructor[] constructor = clazz.getDeclaredConstructors(); // 返回一组构造函数 Constructor[]
if (constructor != null ) {
for ( int i = 0 ; i < constructor.length; i ++ ) {
System.out.println(constructor[i].getName());
}
}
System.out.println( " ---------- " );
Method[] method = clazz.getDeclaredMethods(); // Method[]
if (method != null ) {
for ( int i = 0 ; i < method.length; i ++ ) {
System.out.println(method[i].getName());
}
}
System.out.println( " ---------- " );
Field[] field = clazz.getDeclaredFields(); // Field[]
if (field != null ) {
for ( int i = 0 ; i < field.length; i ++ ) {
System.out.println(field[i].getName());
System.out.println(field[i].getType().getName());
System.out.println(field[i].get(testRef));
}
}
// 动态生成instance(无参数)
Class clz = Class.forName( " reflection.TestRef " );
Object obj = clz.newInstance();
System.out.println(((TestRef)obj).getStr());
// 动态生成instance(有参数)
Class[] params = new Class[] {String. class , int . class , double . class } ;
Constructor construct = clz.getConstructor(params);
// JDK1.5的情况下可以直接用{"haha",999,100.01}作为参数
Object obj2 = construct.newInstance( new Object[] { " haha " , new Integer( 999 ), new Double( 100.01 )} );
System.out.println(((TestRef)obj2).getStr());
// 动态调用method(public method)
Class[] params2 = new Class[] {String. class } ;
Method methods = clz.getMethod( " setStr " , params2);
methods.invoke(testRef, new Object[] { " invoke method " } );
System.out.println(testRef.getStr());
// 动态改变field内容(public field)
Field fields = clz.getField( " str " );
fields.set(testRef, " set field's value " );
System.out.println(testRef.getStr());
}
public TestRef() {
System.out.println( " --- complete TestRef() --- " );
}
public TestRef(String str, int i, double d) {
this .str = str;
this .i = i;
this .d = d;
System.out.println( " --- complete TestRef(String str, int i, double d) --- " );
}
public String str = " I'm a string " ;
int i = 1 ;
double d = 3.14 ;
HashMap map = new HashMap();
public double getD() {
return d;
}
public void setD( double d) {
this .d = d;
}
public int getI() {
return i;
}
public void setI( int i) {
this .i = i;
}
public HashMap getMap() {
return map;
}
public void setMap(HashMap map) {
this .map = map;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this .str = str;
}
}
分享到:
相关推荐
在LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)的使用过程中,有时会遇到一个常见的错误提示:“object class violation”。这一错误提示通常出现在尝试对LDAP目录进行修改操作时,如添加、...
Class图Object图和包 uml基础可以看看
最简单的代码阐述最深刻的原理。JavaScript所谓的类/对象,是模拟的,因为javascript本身不是面向对象的。本文件(含有注释)精简的介绍了javascript类的属性、方法(包挂静态属性和方法)的应用,还有构造函数的...
你可以通过`Class.forName()`方法或者使用`Class`类的`getClass()`静态方法来获取类对象。类对象允许我们在运行时检查类的特性,比如类的全名、它所包含的成员变量和方法、以及它继承自哪个类。 反射是Java中一个...
Vcl.SuperObject 是 Delphi 开发环境中一个用于处理 JSON 数据的库,其核心类为 SuperObject_class。这个库提供了一种高效且灵活的方式来创建、解析和操作 JSON 对象。在 Delphi 中,SuperObject 使得与 JSON 格式的...
"Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket" ...Data class、object class、use函数、类扩展和socket都是Kotlin中非常重要的知识点,掌握这些知识点可以帮助开发者更好地使用Kotlin语言。
Delphi 中使用 Json SuperObject 将数据集与 JSON 对象互转 在 Delphi 中,数据集是最常用的数据存取方式。因此,必须建立 JSON 与 TDataSet 之间的互转关系,实现数据之间的通讯与转换。为此,我们需要使用 Json ...
标题中的"SuperObject_class_"可能是指一个名为"SuperObject"的类库或框架,它在对象序列化、JSON处理或者数据解析等领域中被使用。在编程中,"class"是面向对象编程的基本构造块,代表一种自定义的数据类型,它可以...
chapter6_class_object.ipynb
Static data members are common to all objects of a class, and their value is not unique per object. Static member functions, also known as class methods, can be called without creating an instance of...
Python中的Class和Object是面向对象编程的基本组成部分,它们在创建可复用的代码结构和实现模块化编程中扮演着重要角色。本文将详细介绍这两个概念及其相关的用法。 **类(Class)** 类是一种抽象的数据类型,它...
本篇将深入探讨`<object>`标签的使用方法及其相关知识点。 一、`<object>`标签的基本结构 ```html <object width="..." height="..." data="..." type="..."> <!-- 如果浏览器不支持指定的内容类型,可以在此放置...
在使用`<object>` 标签的过程中,特别是在Internet Explorer (IE) 浏览器中,会遇到一个常见的问题——即`<object>` 标签可能会覆盖其他的HTML元素,比如 `<div>`。这是因为IE将 `<object>` 视为一种“窗口化”元素...
通过Class类可以获取Class对象,获取Class对象有三种方式:通过Object类的getClass()方法、通过类名.class获取Class对象、通过Class类中的forName()方法。每种方式都有其特点和应用场景,掌握这些方式可以帮助开发者...
python爬虫案例pb08_class_object.rar
Qt Object 类分析 Qt Object 类是 Qt 框架中最重要的类之一,它是 Qt 类体系的唯一基类,类似于 MFC 中的 CObject 和 Delphi 中的 TObject。QObject 是 Qt 各种功能的源头活水,因此 Qt 源码分析的第一节就放在这个...
要使用`JSONArray.fromObject()`,你需要确保这些JAR包都在项目的类路径(classpath)中。这样,当你尝试将Java对象转换为JSON数组时,`JSONArray`类会找到所有必要的依赖,执行序列化过程。例如,如果你有一个Java...
标题和描述中提到的"非ie内核浏览器ACTIVEX插件+火狐谷歌支持OBJECT",是指一种解决方案,即通过使用HTML的OBJECT标签,尝试在Firefox和Chrome等非IE浏览器中模拟ActiveX插件的行为。OBJECT标签在HTML中用于嵌入各种...
在“AutoObjTest.sln”解决方案中,你将找到一个完整的例子,展示如何设置和使用Auto Object Map。打开这个解决方案,编译并运行,你可以看到一个简单的ATL COM对象的实例。通过查看和分析源代码,你可以更深入地...