1. import java.util.HashSet;
  2. import java.util.Iterator;
  3.  
  4. /**
  5. * Created by GOD on 2016/1/23.
  6. * Class对象的生成方式如下:
  7. 1.类名.class 说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象
  8. 2.Class.forName("类名字符串") (注:类名字符串是包名+类名) 说明:装入类,并做类的静态初始化,返回Class的对象
  9. 3.实例对象.getClass() 说明:对类进行静态初始化、非静态初始化;返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中)所属的类的Class的对象
  10. */
  11. public class ClassAndGetclass {
  12. public static void main(String[] args) throws ClassNotFoundException {
  13.  
  14. //测试.class
  15. Class testTypeClass = TestClassType.class;
  16. System.out.println("testTypeClass---" + testTypeClass);
  17. System.out.println("类装入内存完毕");
  18.  
  19. //测试Class.forName()
  20. Class testTypeForName = Class.forName("TestClassType");
  21. System.out.println("testTypeForName---" + testTypeForName);
  22.  
  23. //测试Object.getClass()
  24. TestClassType testTypeGetClass = new TestClassType();
  25. System.out.println("testTypeGetClass---" + testTypeGetClass.getClass());
  26.  
  27. HashSet hashSet = new HashSet();
  28. hashSet.add("s");
  29. Iterator iterator = hashSet.iterator();
  30. System.out.println(iterator.getClass().getName());
  31. System.out.println(Iterator.class.getName());
  32.  
  33. }
  34. }
  35.  
  36. class TestClassType {
  37. //构造函数
  38. public TestClassType() {
  39. System.out.println("----构造函数---");
  40. }
  41. //静态的参数初始化
  42. static {
  43. System.out.println("---静态的参数初始化---");
  44. }
  45. //非静态的参数初始化
  46. {
  47. System.out.println("----非静态的参数初始化---");
  48. }
  49. }

输出结果:

  1. testTypeClass---class TestClassType
  2. 类装入内存完毕
  3. ---静态的参数初始化---
  4. testTypeForName---class TestClassType
  5. ----非静态的参数初始化---
  6. ----构造函数---
  7. testTypeGetClass---class TestClassType
  8. java.util.HashMap$KeyIterator
  9. java.util.Iterator

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

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


  1. import java.util.*;
  2. import java.lang.reflect.*;
  3.  
  4. public class CSDN {
  5. public static void main(String args[]) throws Exception{
  6. Set s = new HashSet();
  7. s.add("foo");
  8. Iterator it = s.iterator();
  9. Class[] argsClass = new Class[0];
  10. Method m = Iterator.class.getMethod("hasNext",argsClass);
  11. System.out.println(m.invoke(it,argsClass));
  12. }
  13. }//可正常执行
  1. import java.util.*;
  2. import java.lang.reflect.*;
  3.  
  4. public class CSDN {
  5. public static void main(String args[]) throws Exception{
  6. Set s = new HashSet();
  7. s.add("foo");
  8. Iterator it = s.iterator();
  9. Class[] argsClass = new Class[0];
  10. Method m = it.getClass().getMethod("hasNext",argsClass);
  11. System.out.println(m.invoke(it,argsClass));
  12. }
  13. }
  14. //不能执行

理由同上: 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. 华硕本本重装系统后出现can not open file c:\RECOVERY.DAT

    华硕本本重装系统后出现can not open file c:\RECOVERY.DAT很多网友会觉得困惑,不知道为什么会这样,下面我就为大家来解决这个问题,方法一: 这个问题就出在华硕自带系统都是装 ...

  2. WEB前端常用网站收集

    WEB前端常用网站收集整理 w3school.w3schools 前端里.脚本之家.素材家园 17素材.frontopen NEC更好的CSS方案.一些常用的JS实例 Bootstrap  官网  h ...

  3. Python源代码目录组织结构

  4. class id 区别

    [1].id是唯一的,一个元素只能有一个,不能重复class可以重复 <div> <img src="" width="100%"/> ...

  5. ecshop底部版权修改和组成分析

    我们在ecshop二次开发和ecshop使用过程中,往往需要对ecshop底部进行处理和修改.比如ecshop底部版权问题,ecshop底部程序结构问题.也有很多朋友咨询ecshop底部的一些修改问题 ...

  6. SQL基础教程

    第一范式: 列仅包含原子值: 没有重复的组. 第二范式: 满足第一范式: 非部分函数依赖.(如果组合键中任何一列值改变,将导致非键列的值需要被更新) 那么,主键是一列(不是组合的)满足第二范式:所有列 ...

  7. [算法][包围盒]球,AABB,OBB

    参考地址请看图片水印:http://www.cnblogs.com/iamzhanglei/archive/2012/06/07/2539751.html http://blog.sina.com.c ...

  8. c#委托之最大

    public delegate int ceshi(object o1, object o2); static void Main(string[] args) { string[] a = { &q ...

  9. Get与Post的一些总结

    1.GET请求的数据会附在URL之后,POST把提交的数据则放置在是HTTP包的包体中. 2."GET方式提交的数据最多只能是1024字节这句话是错误的 URL不存在参数上限的问题,HTTP ...

  10. java提高篇---ArrayList

    一.ArrayList概述 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类 ...