A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马蒙蒙 黑马帝   /  2011-7-27 19:32  /  3377 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在反射中使用 getClass()可以得到返回一个对象的运行时类。他是继承自Object类。我想问的是:是不是在用到反射的代码中this.getClass与getClass()可以通用?

评分

参与人数 1技术分 +2 收起 理由
admin + 2 新人新气象!!

查看全部评分

8 个回复

倒序浏览
黑马网友  发表于 2011-7-27 19:37:04
沙发
不行,this代表自己本身~~~
this.getClass(),得到是一个class类型,而我们需要是类的Class类型。
回复 使用道具 举报
黑马网友  发表于 2011-7-27 19:39:48
藤椅
this是指当前对象。可以在类里边用来指实例化本类本类的某个对象。
就像常用的this.name = name;
但是不在自己类里this.getClass就不是一个概念了。
另外自己可以在类里写代码的话,意味着就是当前类,还getClass干啥呀
回复 使用道具 举报
黑马网友  发表于 2011-7-27 20:45:07
板凳
不可以
[color=Red]类名.class和实例.getClass()[/color]都是java.lan.Class的对象,前者是静态的,后者是动态的,也就是针对你的类实例来创建的信息,一般情况下使用完全相同,两者的区别在处理反射时就能体现出来,如[code=java]package cn.itcast.heima;
import java.util.*;
import java.lang.reflect.*;

public class CSDN {
    public static void main(String args[]) throws Exception{
        Set s = new HashSet();
        s.add("foo");
        Iterator it = s.iterator();
        Class[] argsClass = new Class[0];
        Method m = Iterator.class.getMethod("hasNext",argsClass);
        System.out.println(m.invoke(it,argsClass));
    }
}[/code]这个可以正常执行[code=java]package cn.itcast.heima;
import java.util.*;
import java.lang.reflect.*;

public class CSDN {
    public static void main(String args[]) throws Exception{
        Set s = new HashSet();
        s.add("foo");
        Iterator it = s.iterator();
        Class[] argsClass = new Class[0];
        Method m = it.getClass().getMethod("hasNext",argsClass);
        System.out.println(m.invoke(it,argsClass));
    }
}[/code]这个就不能正常执行了

评分

参与人数 1技术分 +1 收起 理由
admin + 1 你的实验可不能说明这个问题,有待探讨

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 21:58:30
报纸
由于getClass()在Object类中定义成了final类型,子类不能覆盖该方法,所以直接调用getClass()和this.getClass()其实都是调用从父类继承的getClass()方法,等效于调用super.getClass()方法。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 你的回答没问题,楼主应该摆他的代码

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 22:42:11
地板
楼主把你的疑问用代码摆出来,詹季春的代码让我有所启发,觉得大家还有必要多讨论讨论
回复 使用道具 举报
黑马网友  发表于 2011-7-28 10:43:11
7#
有啥 启发了  能讲讲吗?

用到反射的代码中this.getClass 根本就不能这么用,
要想这样用 也要通过某种方法吧 ,具体是什么方法呢??

楼主把代码粘出来看看
回复 使用道具 举报
黑马网友  发表于 2011-7-28 11:05:58
8#

回复 楼主 的帖子

this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用
this.getClass()??疑问??
回复 使用道具 举报
黑马网友  发表于 2011-7-29 16:01:14
9#
谢谢各位的回答,集思广益才能学到知识
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马