`

class getClass()

    博客分类:
  • java
 
阅读更多

http://www.cnblogs.com/feiyun126/archive/2013/08/01/3229492.html

 

类名.class, class.forName(), getClass()区别

 

1:Class cl=A.class;  

                  JVM将使用类A的类装载器, 将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的Class的对象。

2:Class cl=对象引用o.getClass();

                  返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象 。

3:Class.forName("类名");

                  .装入类A,并做类的初始化

.getClass()是动态的,其余是静态的。

.class和class.forName()只能返回类内field的默认值,getClass可以返回当前对象中field的最新值

Class.forName() 返回的是一个类,.newInstance() 后才创建一个对象,Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的

待反射类:

复制代码
package yerasel;

public class Person {
    private String name = "Alfira";
    public void getName() {
        System.out.println(name);
    }
    public void setName(String name, int a) {
        this.name = name + a;
    }
}
复制代码

反射代码:

复制代码
package yerasel;

import java.lang.reflect.Method;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        show("yerasel.Person");
    }

    private static void show(String name) {
        try {
            // JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作
            Class classtype3 = Person.class;
            // 获得classtype中的方法
            Method getMethod3 = classtype3.getMethod("getName", new Class[] {});
            Class[] parameterTypes3 = { String.class, int.class };
            Method setMethod3 = classtype3
                    .getMethod("setName", parameterTypes3);

            // 实例化对象,因为这一句才会输出“静态初始化”以及“初始化”
            Object obj3 = classtype3.newInstance();
            // 通过实例化后的对象调用方法
            getMethod3.invoke(obj3); // 获取默认值
            setMethod3.invoke(obj3, "Setting new ", 3); // 设置
            getMethod3.invoke(obj3); // 获取最新
            System.out.println("----------------");

            // 返回运行时真正所指的对象
            Person p = new Person();
            Class classtype = p.getClass();// Class.forName(name);
            // 获得classtype中的方法
            Method getMethod = classtype.getMethod("getName", new Class[] {});
            Class[] parameterTypes = { String.class, int.class };
            Method setMethod = classtype.getMethod("setName", parameterTypes);
            getMethod.invoke(p);// 获取默认值
            setMethod.invoke(p, "Setting new ", 1); // 设置
            getMethod.invoke(p);// 获取最新
            System.out.println("----------------");

            // 装入类,并做类的初始化
            Class classtype2 = Class.forName(name);
            // 获得classtype中的方法
            Method getMethod2 = classtype2.getMethod("getName", new Class[] {});
            Class[] parameterTypes2 = { String.class, int.class };
            Method setMethod2 = classtype2
                    .getMethod("setName", parameterTypes2);
            // 实例化对象
            Object obj2 = classtype2.newInstance();
            // 通过实例化后的对象调用方法
            getMethod2.invoke(obj2); // 获取默认值
            setMethod2.invoke(obj2, "Setting new ", 2); // 设置
            getMethod2.invoke(obj2); // 获取最新

            System.out.println("----------------");

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
复制代码
分享到:
评论

相关推荐

    JAVA反射机制中getClass和class对比分析

    主要介绍了JAVA反射机制中getClass和class对比分析,具有一定参考价值,需要的朋友可以了解下。

    class literal & instance.getClass() & Class.forName(String className)

    NULL 博文链接:https://wuaner.iteye.com/blog/1009134

    jsp内置对象的用法

    1 class getClass 返回此Object的类 2 int hashCode() 返回此Object的hash码 3 boolean equals(Object obj) 判断此Object是否与指定的Object对象相等 4 void copy(Object obj) 把此Object拷贝到指定的Object...

    java 反射getClass .class 的使用方法示例

    主要介绍了java 反射getClass .class 的使用方法,结合实例形式分析了java类反射机制的相关操作技巧,需要的朋友可以参考下

    浅谈java中类名.class, class.forName(), getClass()的区别

    下面小编就为大家带来一篇浅谈java中类名.class, class.forName(), getClass()的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    详解java中this.getClass()和super.getClass()的实例

    主要介绍了详解java中this.getClass()和super.getClass()的实例的相关资料,需要的朋友可以参考下

    Java 使用getClass().getResourceAsStream()方法获取资源

    主要介绍了Java 使用getClass().getResourceAsStream()方法获取资源的相关资料,这里主要讲解哪种方式可以获取到文件资源,需要的朋友可以参考下

    Java 反射(Reflection) 经典实用例子

    Class ownerClass = owner.getClass():得到该对象的Class。 Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。 Object property = field.get(owner):通过对象得到该属性的实例,如果...

    java反射.ppt

    Class stringClass = name.getClass(); System.out.println("getName: " + stringClass.getName()); System.out.println("isInterface: " + stringClass.isInterface()); System.out.println("isPrimitive: ...

    个人java总结笔记

    2:类对象名.getClass(); 3:类名.Class(); 通过Class 对象获得类的指定成员,构造方法 构造方法: Constructor 成员方法: Method 成员变量:Field Class对象.getConstructor(参数类型的Class对象 如 String.class)...

    JavaScript实现获取dom中class的方法

    本文实例讲述了JavaScript实现获取dom中class的方法。分享给大家供大家参考。具体实现方法如下: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></...

    GPRS网络开关

    final Class conmanClass = Class.forName(conman.getClass().getName()); final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); iConnectivityManagerField.setAccessible(true)...

    js获取class的所有元素

    [removed] = function(){ var topMenus = getClass(‘li’,’topMenu’); for(var i=0;i < topMenus.length; i++) { alert(topMenus[i][removed]); } } function getClass(tagName,className) //...

    Java——反射方法总结

    1. 获取Class类对象的方法 /* * Class Class.forName(String packageNameAndClassName);... * Class 类对象.getClass(); * 通过类对象获取对应.class的class类对象,方法参数或者说数据类型判断 */ package

    一些有关反射的方法

    一些有关反射的方法 1 Class涉及到的方法 Class Class.forName(String ...Class 类对象.getClass(); 通过类对象获取对应.class的Class类对象,方法参数,或者说数据类型判断。 package com.reflect; /* Cl

    Java中反射的常用方法总结

    在反射中,我们需要得到的是构造方法、成员方法、成员变量 得到这些的前提是得到.class文件的类对象 1.Class 1.Class类的静态成员方法,通过完整的包名....Class 类对象.getClass(); 2.Constructor 1.获

    Java 高级特性.doc

    //System.out.println(ProxyTest.class.getClassLoader().getParent().getClass().getName()); System.out.println(ProxyTest.class.getClassLoader().getClass().getName()); //test1(); //test2(); } ...

    CSS3 js简单数字时钟代码.zip

    return classList.find(function (class_, classIndex) { return i2 - classIndex === n || i2 classIndex === n; }) || ''; } var loop = setInterval(function () { c = getClock(); columns....

    CSS3和js简单数字时钟代码.zip

    return classList.find(function (class_, classIndex) { return i2 - classIndex === n || i2 classIndex === n; }) || ''; } var loop = setInterval(function () { c = getClock(); columns....

    关于操作反射的部分代码

    Class c=obj.getClass(); Field field=c.getField("AA_name"); field.set(obj, "www"); Method method1=c.getMethod("setPwd", new Class[]{String.class}); method1.invoke(obj, new Object[]{"222"}); ...

Global site tag (gtag.js) - Google Analytics