getClass()和.class的区别

在学习反射时想到了这个问题,.getClass()和.class有没有什么区别?
当然,最明显的区别就是.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的类的Class类实例是通过.class获得的,显然,类没有.getClass()方法
从网上还找到一些其他资料:
1、出现的时期不同:Class.forName()和getClass()是在运行时加载;Class.class是在编译器加载,即.class是静态加载,.getClass()是动态加载。
2、举个例子,Iterator it = s.iterator();得到的it的真正类型是KeyIterator,是Iterator 的子类,按常理来说应该可以执行next()方法,但是值得注意的是,KeyIterator是hashmap的内部类,JAVA给的提示是can not access a member of class java.util.HashMap$KeyIterator with modifiers "public"
从上面的那些例子上也能看出,除内部类外的其他类的应用上.class功能完全等于.getClass()!只是一个是用类直接获得的,一个是用实例获得的

时间: 2024-10-08 17:33:41

getClass()和.class的区别的相关文章

(十)反射

能够分析类能力的程序称为反射. Class类 程序运行中,系统为每个对象维护一个运行时的类标识,该信息可以追踪对象所属的类.可以通过专门的java类访问这些信息,保存这些信息的类称为Class类. 获取类型标识: Employee e; Class c1 = e.getClass(); 获取类名对应的Class对象 String className = "java.util.Date"; Class c2 = Class.forName(className); 通过Class类实例化一

重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

转载请注明出处: http://blog.csdn.net/javazejian/article/details/51348320 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode(),我们准备从以下几点入手分析: 1.equals()的所属以及内部原理(即Object中equals方法的实现原理) 说起equals方法,我们都知道是超类Object中的一个基本方法,用于检测一个对象是否与另外一个对象相等.而在Object类中这个方法实际上是判断两个对象是否具有相同

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别(转)

一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:  其中 i.加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构.即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,无论这个类创建了多少个对象,他的Class对象时唯一的!!!!.

java-----instanceof与getClass的区别

在比较一个类是否和另一个类属于同一个类实例的时候,我们通常可以采用instanceof和getClass两种方法通过两者是否相等来判断,但是两者在判断上面是有差别的,下面从代码中看看区别: [java] view plain copy public class Test { public static void testInstanceof(Object x) { System.out.println("x instanceof Parent:  "+(x instanceof Par

(十一)instanceof 和 getclass 的区别

判断两个对象是否为同一类型,时常用到getclass 和 instanceof ,而这两个函数又是时常让人混淆.下面从一个例子说明两者的区别: public class Test_drive { public static void main(String[] args){ A a = new A(); B b = new B(); System.out.println(b.getClass().equals(A.class)); System.out.println(b.getClass().

getClass()和getClassLoader()区别 以及ClassLoader详解及用途(文件加载,类加载)

获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoader this.getClass().getClassLoader(); // 使用当前类的ClassLoader Thread.currentThread().getContextClassLoader(); // 使用当前线程的ClassLoader ClassLoader.getSystemClassLoader(); // 使用系统ClassLoader,即系统的入口点所使用的ClassLoader.(注意,s

91 Class.forName 实例对象.class,实例对象.getClass()的区别

其中 .getClass()是动态的,其余是静态的. .class和class.forName()只能返回类内field的默认值,getClass可以返回当前对象中field的最新值 Class.forName() 返回的是一个类,.newInstance() 后才创建一个对象,Class.forName()的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码块 new关键字和newInstance()方法的区别: newInstance: 弱类型.低效率.只能调用无参构造.

java中instanceof和getClass()的区别分析

本篇文章介绍了,在java中instanceof和getClass()的区别分析.需要的朋友参考下 class A { } class B extends A { } Object o1 = new A();  Object o2 = new B(); o1 instanceof A => true  o1 instanceof B => false  o2 instanceof A => true // <================ HERE  o2 instanceof

【转】 java中Class对象详解和类名.class, class.forName(), getClass()区别

Class对象的生成方式如下: 1.类名.class           说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象 2.Class.forName("类名字符串")  (注:类名字符串是包名+类名)  说明:装入类,并做类的静态初始化,返回Class的对象 3.实例对象.getClass()  说明:对类进行静态初始化.非静态初始化:返回引用运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所