类本质的是? 类的加载过程?

类本质的东西

  1. 类也是一个对象;
  2. Person对象的类型是Class类型,Class里面包含了*
  3. 类本身也是对象,是个Class类型的对象;简称类对象;
  4. 利用Person类对象 创建Person类型的对象;
  5. 利用Class类型创建Person类对象;
  6. //获取内存中的类对象
  7. Class c = [p class];
  8. Class c2 = [p2 class];
  9. 也可以用Person类来获取类对象;
  10. Class c3 = [Person Class];
  11. 我们要查看p和p2的类对象,就是利用类方法class获得,c和c2的类对象都是Person类,而Person类本身就是Class类型;
  12. class类型的数据就是class对象;class是一个类方法;
  13. 如果本身是指针,就不需要加&就可以打印地址;如果不是指针类型,就用&取地址;
  14. 类对象 == 类;
  15. 一个类也可以叫类对象,因为它本身也是通过Class类创建出来的;如
  16. Person *p = [[Person alloc]init];
  17. Class c = [p class];
  18. [c test];
  19. c *p2 = [[c new]init];
  20. 上面的语句都是成立的,

类的加载过程;

  1. 不掌握这个东西也可以开发;
  2. 下面的操作都是会先调用父类的方法;
  3. load是程序启动的时候调用;initialize是第一次使用类的时候调用;
  4. 调用子类的过程,会先调用父类的方法;如有3个类,a是父类,b是a的子类,c是b的子类,那么第一次使用b类的时候,会先加载3个类的load方法;然后调用父类的initialize的方法,再调用b类的initialize的方法;
  5. 如果有分类,就先调用分类的initilize方法;
  6. 当程序启动的时候,就会加载一次项目中所有的类,类加载完毕后就会调用+load方法
  7. + (void)load
  8. {
  9. }
  10. 当第一次使用这个类的时候,就会调用一次initialize方法;
  11. + (void)initialize
  12. {
  13. }
  14. 总结:
  15. 当程序启动是,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法,只会调用一次。
  16. 当第一次使用某个类时,就会调用当前类的+initialize方法;
  17. 先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)
  18. 先初始化父类,在初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法)
  19. 先加载父类,再加载子类;
  20. 先加载父类,再加载分类;
  21. Class c = [Person class];
  22. Person *p2 = [c new];
时间: 2024-11-03 21:34:15

类本质的是? 类的加载过程?的相关文章

(转)JVM类生命周期概述:加载时机与加载过程

原文地址: http://blog.csdn.net/justloveyou_/article/details/72466105 JVM类加载机制主要包括两个问题:类加载的时机与步骤 和 类加载的方式.本文主要阐述了第一个问题,关于类加载的方式等方面的内容,包括JVM预定义的类加载器.双亲委派模型等知识点, 一个Java对象的创建过程往往包括两个阶段:类初始化阶段 和 类实例化阶段. 注意,本文内容是以HotSpot虚拟机为基准的. 一.类加载机制概述 我们知道,一个.java文件在编译后会形成

JVM类生命周期概述:加载时机与加载过程

一个.java文件在编译后会形成相应的一个或多个Class文件,这些Class文件中描述了类的各种信息,并且它们最终都需要被加载到虚拟机中才能被运行和使用.事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的类加载机制.本文概述了JVM加载类的时机和生命周期,并结合典型案例重点介绍了类的初始化过程,进而了解JVM类加载机制. 一.类加载机制概述 我们知道,一个.java文件在编译后会形成相应的一个

java虚拟机学习(四)类的加载过程

类从虚拟机内存加载到从内存卸载,经历的生命周期是:加载,验证,准备,解析,初始化,使用,卸载这几个阶段, 其中验证,解析,初始化被称为 连接过程(Linking). (打算这块和类加载原理后再看class文件结构那篇) 除了解析和使用,其他的过程基本顺序就是这样, 解析可以是在初始化完成之后,这是为了运行时动态绑定. 在虚拟机规范中定义了5中情况(有且只有)必须对类进行初始化(之前进行过,加载,验证,准备): 1.碰到new,getstatic,putstatic,invokestatic这4条

JAVA类的加载过程

周末闲来无事,做个小例子去看一下JAVA代码初始化的过程 JAVA代码初始化分为两个步骤:类初始化,对象初始化. 类初始化 1 类初始化是指类加载器将类加载到内存时,对类成员的初始化过程(其中包括static修饰的变量). 2 对于加载完的类,它的类变量都会赋一个默认值,即使你定义时就赋值了. 3 例如int类型就是0,引用类型就是null. 对象初始化 1 其实和类初始化差不多,但是他通过构造函数对对象进行了赋值 其实简单来说 类初始化做了2件事情:1 把所有属性全部赋值为0或者NULL,2

spring启动component-scan类扫描加载过程---源码分析

有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring开始,中途会穿插自己通过newClassPathXmlApplicationContext 的区别和联系.

[jvm解析系列][九]类的加载过程和类的初始化。你的类该怎么执行?为什么需要ClassLoader?

通过前面好几章的或详细或不详细的介绍,我们终于把字节码的结构分析的差不多了.现在我们面临这样一个问题,如何运行一个字节码文件呢? 首先,java语言不同于其他的编译时需要进行链接工作的语言不通,java语言有一个很明显的特性,那就是动态加载,一个字节码的加载往往都是在程序运行的时候加载进来的,很多时候这种方式给我们带来了便利.虽然从某种意义上来说他可能消耗了一定的资源降低了性能. 类的生命周期? 没错,一个类的生命周期,在很多人眼里可能类天生都摆在那里了,随着程序生,随着程序死.但是事实情况并不

【Spring源码分析系列】启动component-scan类扫描加载过程

原文地址:http://blog.csdn.net/xieyuooo/article/details/9089441/ 在spring 3.0以上大家都一般会配置一个Servelet,如下所示: 1 <servlet> 2 <servlet-name>spring</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-clas

spring启动component-scan类扫描加载过程(转)

文章转自 http://www.it165.net/pro/html/201406/15205.html 有朋友最近问到了 spring 加载类的过程,尤其是基于 annotation 注解的加载过程,有些时候如果由于某些系统部署的问题,加载不到,很是不解!就针对这个问题,我这篇博客说说spring启动过程,用源码来说明,这部分内容也会在书中出现,只是表达方式会稍微有些区别,我将使用spring 3.0的版本来说明(虽然版本有所区别,但是变化并不是特别大),另外,这里会从WEB中使用spring

java 类的加载过程

ClassLoader的主要职责就是负责各种class文件到jvm中,ClassLoader是一个抽象的class,给定一个class文件的二进制名,ClassLoader会尝试加载并且在jvm中生成构建这个类的各个数据结构,然后使其分布在对应的内存区域中. 1类的加载过程简介 类的记载过程一般分为三个比较大的阶段,分别是加载阶段,连接阶段和初始化阶段,如下图所示 加载阶段:主要负责查找并且加载类的二进制数据文件,其实就是class文件. 连接阶段:连接阶段所做的工作比较多,细分的话还可以分为如