一个运行时的Java虚拟机(JVM)负责运行一个Java程序。 当启动一个Java程序时,一个虚拟机实例诞生;当程序关闭退出,这个虚拟机实例也就随之消亡。 如果在同一台计算机上同时运行多个Java程序,将得到多个Java虚拟机实例,每个Java程序都运行于它自己的Java虚拟机实例中。 在如下几种情 ...
分类:
其他好文 时间:
2018-01-12 19:40:47
阅读次数:
155
先来看一个例子: 输出结果是多少呢?也许很多人会犯错吧 运行一下吧: 这里涉及到类的加载和初始化过程: 1、类在被主动调用时,触发类的加载,jvm查找并加载类的二进制数据到内存 2、jvm检查class文件的正确性,因为防止恶意手动生成的class文件 3、为类的静态变量分配内存,并初始化默认值。 ...
分类:
编程语言 时间:
2018-01-02 01:17:30
阅读次数:
246
1、类的加载 (1)当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化; (2)加载:就是指将class文件读入内存,并为之创建一个Class对象,任何类被使用时系统都会建立一个Class对象; (3)连接 ①验证:是否有正确的内部结构,并和 ...
分类:
其他好文 时间:
2017-12-31 23:26:46
阅读次数:
151
Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。 Java类的加载是动态的,它并不会一 ...
分类:
其他好文 时间:
2017-12-16 15:56:14
阅读次数:
130
1.静态代码块 给类初始化,随着类的加载而执行,只执行一次(注:仅创建类的引用(即只申明)并不会触动对该类的加载) 2.(显示初始化块)构造代码块 给对象初始化, 3.构造函数--给对应对象初始化 4.this 以下内容总代码: ...
分类:
编程语言 时间:
2017-12-13 02:12:40
阅读次数:
132
配套详解视频 局部代码块与初始化代码块 面向对象-静态代码块 代码块总结 组合关系与类的加载 静态代码块及字段初始化练习 一、什么是代码块 在类中或方法当中 使用{}括起来的一段代码 就称它是一个代码块 在代码块当中定义的变量我们称是局部变量,在外面是没有办法使用的。这里定义的a就是一个局部变量 代 ...
分类:
编程语言 时间:
2017-12-11 11:17:21
阅读次数:
113
对象创建 在语言层面,创建一个对象通常仅一个new关键字就可以解决了,但是在虚拟机中,对象的创建要经过一个复杂的过程。 方法区中的常量池 当虚拟机遇到一个new关键字时,首先去方法区中的常量池中找有没有这个类的符号引用,并检查这个符号代表的类是否已经被加载、解析和初始化过,如果没有先执行类的加载过程 ...
分类:
编程语言 时间:
2017-11-27 01:22:07
阅读次数:
152
Person person = new Person();为例进行说明。 1).因为new用到了Person.class,所以会先找到Person.class文件,并加载到内存中; 2).执行该类中的static代码块,如果有的话,给Person.class类进行初始化; 3).在堆内存中开辟空间分 ...
分类:
其他好文 时间:
2017-11-26 16:48:09
阅读次数:
129
类加载器:负责将.class文件加载到内存中,并为之生成对应的Class对象。 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。 加载 就是指将class文件读入内存,并为之创建一个Class对象。 任何类被使用时系统都会建立一 ...
分类:
其他好文 时间:
2017-11-24 19:01:50
阅读次数:
130
对象创建方法: JVM遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、连接和初始化过。 如果没有,那必须先执行相应的类的加载过程。 对象的内存分配: 对象所需内存的大小在类加载完成后便完全确定(对象内存布局),为对象分配空 ...
分类:
其他好文 时间:
2017-11-19 14:53:19
阅读次数:
112