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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adamjy 中级黑马   /  2014-4-21 23:44  /  1384 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 adamjy 于 2014-4-22 12:38 编辑

可通过如下三种方式得到Class对象,
  1. public class Demo{

  2.         public static void main(String[] args) throws Exception {
  3.                 Class<?> clazz1=null;
  4.         Class<?> clazz2=null;
  5.         Class<?> clazz3=null;
  6.         try {  
  7.                 //第一种方式
  8.                 clazz1=Class.forName("com.itheima.x");
  9.         } catch (ClassNotFoundException e) {
  10.                 // TODO: handle exception
  11.                 e.printStackTrace();
  12.         }
  13.         //第二种方式
  14.         clazz2=new Xx().getClass();     
  15.         //第三种方式
  16.         clazz3=Xx.class;                                 
  17.         }
  18. }

  19. class Xx{}
复制代码


请问这三种方式分别用在什么场合?哪个更省资源?

3 个回复

倒序浏览
第一种方式: clazz1=Class.forName("com.itheima.x");
这个一般应用于框架当中,你看看 struts , spring 等框架中 都有很多配置文件都配置了 class路径
框架就是根据这路径用个去调用程序员自己开发的类  然后实例化
第二种方式与第三种方法表达的意思是一样的 :
clazz2=new Xx().getClass()
clazz3=Xx.class;
但是不推荐使用第一种方法,类.class 效率高于  对象.getClass()
看到这方法, 很明显此方法就是用来获取该对象的字节码 ,至于用处
获取字节码的主要用处就是用于反射 在jdk很多对象当中都要根据字节码反射调用方法,生成对象 等
回复 使用道具 举报
获得一个类实例的Class对象有三种常用方法
*1、调用从Object类中继承来的方法public Class getClass()
*以下两种方法是获得某个指定类的Class对象(如果知道类实例的确切类型)
*2、利用Class类的static方法forName(String className(需要带包名)),注意这个方法抛出throws ClassNotFoundException  这种适合配置文件。都配置了 class路径
框架就是根据这路径用个去调用程序员自己开发的类  然后实例化
*3、利用类字面常量,类名.class,也会返回一个指定类的Class对象,它在编译时进行检查,不抛出任何异常
回复 使用道具 举报
整理了一下应用的方法,分享给楼主

Constructor   getConstructor(Class[]   params)  --   获得使用特殊的参数类型的公共构造函数,  
Constructor[]   getConstructors()  --   获得类的所有公共构造函数   
Constructor   getDeclaredConstructor(Class[]   params)  --   获得使用特定参数类型的构造函数(与接入级别无关)   
Constructor[]   getDeclaredConstructors()  --   获得类的所有构造函数(与接入级别无关)   
二.
Field     getField(String   name)  --   获得命名的公共字段   
Field[]   getFields()  --   获得类的所有公共字段   
Field     getDeclaredField(String   name)  --   获得类声明的命名的字段   
Field[]   getDeclaredFields()  --   获得类声明的所有字段   
三.
Method   getMethod(String   name,   Class[]   params)   --   使用特定的参数类型,获得命名的公共方法   
Method[]   getMethods()  --   获得类的所有公共方法   
Method     getDeclaredMethod(String   name,   Class[]   params)   --   使用特写的参数类型,获得类声明的命名的方法   
Method[]   getDeclaredMethods()     --   获得类声明的所有方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马