import java.util.HashSet;
 import java.util.Iterator;

 /**
  * Created by GOD on 2016/1/23.
  * Class对象的生成方式如下:
  1.类名.class           说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象
  2.Class.forName("类名字符串")  (注:类名字符串是包名+类名)  说明:装入类,并做类的静态初始化,返回Class的对象
  3.实例对象.getClass()  说明:对类进行静态初始化、非静态初始化;返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
  */
 public class ClassAndGetclass {
     public static void main(String[] args) throws ClassNotFoundException {

 //测试.class
         Class testTypeClass = TestClassType.class;
         System.out.println("testTypeClass---" + testTypeClass);
         System.out.println("类装入内存完毕");

 //测试Class.forName()
         Class testTypeForName = Class.forName("TestClassType");
         System.out.println("testTypeForName---" + testTypeForName);

 //测试Object.getClass()
         TestClassType testTypeGetClass = new TestClassType();
         System.out.println("testTypeGetClass---" + testTypeGetClass.getClass());

         HashSet hashSet = new HashSet();
         hashSet.add("s");
         Iterator iterator = hashSet.iterator();
         System.out.println(iterator.getClass().getName());
         System.out.println(Iterator.class.getName());

     }
 }

 class TestClassType {
 //构造函数
     public TestClassType() {
         System.out.println("----构造函数---");
     }
 //静态的参数初始化
     static {
         System.out.println("---静态的参数初始化---");
     }
 //非静态的参数初始化
     {
         System.out.println("----非静态的参数初始化---");
     }
 }

输出结果:

testTypeClass---class TestClassType
类装入内存完毕
---静态的参数初始化---
testTypeForName---class TestClassType
----非静态的参数初始化---
----构造函数---
testTypeGetClass---class TestClassType
java.util.HashMap$KeyIterator
java.util.Iterator

生成Class对象的过程其实是如此的:

当 我们编写一个新的java类时,JVM就会帮我们编译成class对象,存放在同名的.class文件中。在运行时,当需要生成这个类的对象,JVM就会 检查此类是否已经装载内存中。若是没有装载,则把.class文件装入到内存中。若是装载,则根据class文件生成实例对象。


 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));
     }
 }//可正常执行
 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));
     }
 }
 //不能执行

理由同上: System.out.println(iterator.getClass().getName());  java.util.HashMap$KeyIterator

     System.out.println(Iterator.class.getName());       java.util.Iterator

java中类名.class、实例.getclass()区别的更多相关文章

  1. java中extends与implements的区别

    学了java很久了,久不用之后给同学解决一个java问题的时候,就卡在这个标题上了. 下面是java中extends与implements的区别: 1. 在类的声明中,通过关键字extends来创建一 ...

  2. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  3. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  4. java中堆和堆栈的区别

    java中堆和堆栈的区别(一) 1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取 ...

  5. 关于java中构造方法、实例初始化、静态初始化执行顺序

    在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...

  6. java中wait和sleep的区别

    文章目录 Wait和sleep的区别 唤醒wait和sleep java中wait和sleep的区别 在本篇文章中,我们将会讨论一下java中wait()和sleep()方法的区别.并讨论一下怎么使用 ...

  7. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  8. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  9. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  10. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

随机推荐

  1. PHP 加密的几种方式

    在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理. MD5 相 ...

  2. linux用户栈内核栈的设置---进程的创建: fork/execve【转】

    转自:http://blog.csdn.net/u011279649/article/details/18795547 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 应用层怎 ...

  3. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

    一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...

  4. Java 使用 Redis | 菜鸟教程

    入门教程: http://www.runoob.com/redis/redis-java.html 中文手册: http://redis.readthedocs.io/en/2.4/index.htm ...

  5. PHP 页面编码声明与用header或meta实现PHP页面编码的区别

    php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8&quo ...

  6. Houdini Krakatoa Render Plugin

    HDK真实个混蛋,都懒得写个解释.凭着函数英文意思猜测.. plugin sample video: 在极其残忍的开发环境,"Particle Voxel Render" 产生了( ...

  7. javascript对象(1)

    Array对象 创建语法:new Array();new Array(size);new Array(element0,element,element3,……,elementn); 具有的属性:con ...

  8. [转]iOS学习之UINavigationController详解与使用(二)页面切换和segmentedController

    转载地址:http://blog.csdn.net/totogo2010/article/details/7682433 iOS学习之UINavigationController详解与使用(一)添加U ...

  9. 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind

    最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...

  10. 20150604_Andriod 窗体PopupWindow动画

    参考地址: http://www.open-open.com/lib/view/open1378720752084.html http://www.jcodecraeer.com/a/anzhuoka ...