`
flowercat
  • 浏览: 361594 次
社区版块
存档分类
最新评论

Class Object的使用

 
阅读更多
 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提示object class violation

    在LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)的使用过程中,有时会遇到一个常见的错误提示:“object class violation”。这一错误提示通常出现在尝试对LDAP目录进行修改操作时,如添加、...

    Class图Object图和包

    Class图Object图和包 uml基础可以看看

    JavaScript Class/Object

    最简单的代码阐述最深刻的原理。JavaScript所谓的类/对象,是模拟的,因为javascript本身不是面向对象的。本文件(含有注释)精简的介绍了javascript类的属性、方法(包挂静态属性和方法)的应用,还有构造函数的...

    重温 Thinking in Java 5 - The Class object

    你可以通过`Class.forName()`方法或者使用`Class`类的`getClass()`静态方法来获取类对象。类对象允许我们在运行时检查类的特性,比如类的全名、它所包含的成员变量和方法、以及它继承自哪个类。 反射是Java中一个...

    Vcl.SuperObject_superobject_class_

    Vcl.SuperObject 是 Delphi 开发环境中一个用于处理 JSON 数据的库,其核心类为 SuperObject_class。这个库提供了一种高效且灵活的方式来创建、解析和操作 JSON 对象。在 Delphi 中,SuperObject 使得与 JSON 格式的...

    Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket

    "Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket" ...Data class、object class、use函数、类扩展和socket都是Kotlin中非常重要的知识点,掌握这些知识点可以帮助开发者更好地使用Kotlin语言。

    Delphi中JSon SuperObject 使用数据集与JSON对象互转.docx

    Delphi 中使用 Json SuperObject 将数据集与 JSON 对象互转 在 Delphi 中,数据集是最常用的数据存取方式。因此,必须建立 JSON 与 TDataSet 之间的互转关系,实现数据之间的通讯与转换。为此,我们需要使用 Json ...

    SuperObject_class_

    标题中的"SuperObject_class_"可能是指一个名为"SuperObject"的类库或框架,它在对象序列化、JSON处理或者数据解析等领域中被使用。在编程中,"class"是面向对象编程的基本构造块,代表一种自定义的数据类型,它可以...

    chapter6_class_object.ipynb

    chapter6_class_object.ipynb

    C 程序设计教学课件:Chapter 3 class and object.ppt

    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用法详解

    Python中的Class和Object是面向对象编程的基本组成部分,它们在创建可复用的代码结构和实现模块化编程中扮演着重要角色。本文将详细介绍这两个概念及其相关的用法。 **类(Class)** 类是一种抽象的数据类型,它...

    object 标签使用

    本篇将深入探讨`&lt;object&gt;`标签的使用方法及其相关知识点。 一、`&lt;object&gt;`标签的基本结构 ```html &lt;object width="..." height="..." data="..." type="..."&gt; &lt;!-- 如果浏览器不支持指定的内容类型,可以在此放置...

    object标签遮罩问题

    在使用`&lt;object&gt;` 标签的过程中,特别是在Internet Explorer (IE) 浏览器中,会遇到一个常见的问题——即`&lt;object&gt;` 标签可能会覆盖其他的HTML元素,比如 `&lt;div&gt;`。这是因为IE将 `&lt;object&gt;` 视为一种“窗口化”元素...

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

    通过Class类可以获取Class对象,获取Class对象有三种方式:通过Object类的getClass()方法、通过类名.class获取Class对象、通过Class类中的forName()方法。每种方式都有其特点和应用场景,掌握这些方式可以帮助开发者...

    python爬虫案例pb08-class-object.rar

    python爬虫案例pb08_class_object.rar

    qt object类分析

    Qt Object 类分析 Qt Object 类是 Qt 框架中最重要的类之一,它是 Qt 类体系的唯一基类,类似于 MFC 中的 CObject 和 Delphi 中的 TObject。QObject 是 Qt 各种功能的源头活水,因此 Qt 源码分析的第一节就放在这个...

    使用JSONArray.fromObject所需要的jar包

    要使用`JSONArray.fromObject()`,你需要确保这些JAR包都在项目的类路径(classpath)中。这样,当你尝试将Java对象转换为JSON数组时,`JSONArray`类会找到所有必要的依赖,执行序列化过程。例如,如果你有一个Java...

    非ie内核浏览器ACTIVEX插件+火狐谷歌支持OBJECT

    标题和描述中提到的"非ie内核浏览器ACTIVEX插件+火狐谷歌支持OBJECT",是指一种解决方案,即通过使用HTML的OBJECT标签,尝试在Firefox和Chrome等非IE浏览器中模拟ActiveX插件的行为。OBJECT标签在HTML中用于嵌入各种...

    模拟ATL建立Auto Object Map

    在“AutoObjTest.sln”解决方案中,你将找到一个完整的例子,展示如何设置和使用Auto Object Map。打开这个解决方案,编译并运行,你可以看到一个简单的ATL COM对象的实例。通过查看和分析源代码,你可以更深入地...

Global site tag (gtag.js) - Google Analytics