java反射一直没有弄明白的一个问题:
  
   例如,String  st
     st 与String.class 到底什么关系?
java 反射

解决方案 »

  1.   

    string.class 就是获得string类的各方面信息。虽然st也会包含了string类的部分信息,但不全。其次,st是被静态定义的实例。假设你想创建一个实例,但又不知道这个类怎么构成的,比如有什么构造函数,什么函数及修饰符,这时需要用反射。
      

  2.   

    string.class其实就是string的类加载器。
      

  3.   

    st是一个String引用,因为你没有生成对象,所以st指向null。而String.class是获得String类的Class对象。
      

  4.   

    一个表示String对象,一个表示Class对象,你说有区别否。
      

  5.   

    楼主也是吧,我也刚从新手走过来,楼主的问题说明你细化思考,
    String st;其实是你定义了一个String类型的对象,此时这个对象没有指向任何引用,为null,如果试图去调用st的任何方法,会抛出NullPointerException。
    而String.class,其实返回的是String类型的字节码文件对象的引用,楼主应该见过.java文件被编译后是.class文件,String.class其实就是String.java编译后的字节码在内存中以对象存在的形式,它是唯一的,任何调用String.class的地方都返回相同字节码对象的引用
      

  6.   

    st 是String类的对象
    String.class 是Class类的对象
    每个类都有且只有一个Class类的对象,我们可以通过反射来得到对应的类的私有属性,私有构造方法,以及私有的方法等,当然公有的更不用说了,比如说单例模式中(保证对象唯一性),一般情况下我们在其他程序中不能创建新的对象(因为构造方法设置私有了),但是我们可以通过反射来得到很多对象。
    而反射就需要用到Class类了。
      

  7.   


    言简意赅
    st表示在内存中的一个空引用
    class表示了一个类所具有的特征
    两者完全独立的概念
    楼主感受一下
      

  8.   


    言简意赅
    st表示在内存中的一个空引用
    class表示了一个类所具有的特征
    两者完全独立的概念
    楼主感受一下
    Class还可以这样理解: java语言是面向对象的,所有的事物都可以抽象成一个类,比如人,动物,老师,学生,猪,猫狗等等,那么,所有的类也应该能被抽象成一个类,就是Class
      

  9.   

    class A {
      public staitic String TT;
    }A a
    a与A.TT是什么关系?
      

  10.   

    1.String st:st是String类型变量,是对String对象的引用
    2.Sting.class表示String类所具有成员
      

  11.   

    String.class是获得String类的Class对象
      

  12.   

    简单点说,String.class 就是String的二进制的类文件,权限比String大,可以调用String中的私有方法(若果有)。或者看做类的另一种形式。一样的可以创建对象,然后调用其方法。