class :
加载:
连接:
初始化:
当final 变量不能确定时:
package com.wonders.javase.classloader;
import java.util.Random;
class FinalTest1 {
public static final int a = 2;
public static int c = 5;
static {
System.out.println("final test1");
}
}
class FinalTest2 {
public static final int b = new Random().nextInt(100);
static {
System.out.println("Final Test2 static block");
}
}
public class Test2 {
public static void main(String[] args) {
System.out.println(FinalTest1.a);
//System.out.println(FinalTest1.c);
System.out.println("========================");
System.out.println(FinalTest2.b);
}
}
结果:
2
========================
Final Test2 static block
36
而当final 变量是能确定为常量时:
package com.wonders.javase.classloader;
class Parent {
static int a = 1;
static {
System.out.println("parent static block");
}
public Parent() {
System.out.println("constructor parent");
}
}
class Child extends Parent {
static int b = 2;
static {
System.out.println("child static block ");
}
public Child() {
System.out.println("constructor child ");
}
}
public class Test1 {
public static void main(String[] args) {
System.out.println(Child.b);
new Child();
}
}
结果:
parent static block
child static block
2
constructor parent
constructor child
分享到:
相关推荐
类加载时机包括: * 创建类的实例,也就是 new 一个对象 * 访问某个类或接口的静态变量,或者对该静态变量赋值 * 调用类的静态方法 * 反射(Class.forName("com.lyj.load")) * 初始化一个类的子类(会首先初始化子...
在Java虚拟机(JVM)中,类的初始化和加载器的父委托机制是至关重要的概念,它们决定了类的生命周期和类加载的顺序。本文将深入探讨这两个主题,并结合命名空间等深层次的知识点进行讲解。 首先,我们来看类的初始...
- Java中的局部变量没有默认值,如果不初始化它们,在使用前将会导致编译错误。 - 这是为了保证程序的安全性和可靠性。 11. **不传递参数运行Java类时主方法的参数值:** - 如果运行Java类时不传递任何命令行...
类加载的过程包括加载、验证、准备、解析和初始化等步骤。 接口与抽象类是Java中两种不同的多态性实现方式。在【描述】中,它们的区别被强调。抽象类可以有非抽象方法,即可以提供方法的具体实现,而接口只能声明...
类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...
2. 扩展类加载器(Extension ClassLoader):负责加载JAVA_HOME\lib\ext目录中的,或通过java.ext.dirs系统变量指定路径中的类库。 3. 应用程序类加载器(Application ClassLoader):负责加载用户路径(classpath)...
类的加载通常发生在以下几种情况:创建新对象、继承、JVM指定启动类、访问静态变量或方法、使用`Class.forName()`以及对`static final`变量的引用。加载过程包括加载、连接(验证、准备、解析)和类的初始化(静态...
类加载子系统,也被称为Class Loader SubSystem,其主要任务是从文件系统或网络中加载Class Files,这些文件是Java类的二进制表示。每个Class File的开头都有一个特定的文件标识符,以确保文件的合法性。类加载器...
类的加载器(ClassLoader)在Java中扮演着重要的角色。它是Java虚拟机(JVM)的一部分,负责加载类的字节码到内存中,将其转化为Class对象。ClassLoader的层次结构通常包括引导类加载器(Bootstrap ClassLoader)、...
ResourceBundle是Java中的一种资源绑定器,提供了多种资源加载方式。Properties是Java中的一种属性配置文件,提供了多种属性设置和获取方式。 9. Exceptions Exceptions是Java中的异常处理机制,提供了try-catch-...
- **准备**: 给类的非`final`修饰的`static`变量分配内存空间,并进行默认初始化。 - **解析**: 将常量池内的符号引用替换成直接引用。直接引用指的是直接指向目标的指针或偏移量等。 3. **初始化阶段**: - 执行...
初始化有多种方式,如成员初始化块、构造器初始化块,以及初始化顺序规则。对象的作用域包括局部、成员和静态。this关键字用于引用当前对象,super用于访问父类的成员。 Java的访问控制权限有public、private、...
在Java中,Servlet的生命周期包括初始化、服务请求和销毁。抽象类可以定义抽象方法,而且不能实例化。ArrayList是线程不安全的集合,若要按自定义方式有序存放数据,需要在插入时使用比较器(Comparator)。 线程...
加载阶段找到类的字节码,验证确保字节码符合JVM规范,准备阶段为静态变量分配内存并初始化为默认值,解析则将符号引用转换为直接引用,初始化则执行类初始化方法()。 2. 栈内存与堆内存的区别 栈内存主要存储...
Java 类的加载过程主要包括加载、验证、准备、解析和初始化几个步骤。这个过程是由 Java 虚拟机的类加载器完成的。类的加载过程可以概括为以下几个阶段: 1. **加载(Loading):** 读取类的二进制数据到内存中。 ...
加载过程涉及找到类文件、读取二进制流、生成Class对象、解析符号引用以及初始化静态变量等步骤。 #### 7. 排序算法 排序算法是计算机科学的基础算法之一,常见的有: - 插入排序、希尔排序 - 冒泡排序、快速排序...
- **变量和常量**:定义、声明和初始化变量,以及使用final关键字声明常量。 - **运算符和表达式**:介绍算术、比较、逻辑、位、赋值等各类运算符,以及表达式的求值规则。 - **流程控制**:涉及if条件语句,...
- 初始化:`int[][] arr = {{1, 2}, {3, 4}};` #### 7. 流程控制语句 ##### 7.1 if-else语句 - 用于条件判断。 ##### 7.2 switch语句 - 用于多个条件分支的选择。 ##### 7.3 循环语句 - `while`循环 - `do......
- **加载过程:**加载、验证、准备、解析、初始化五个阶段。 - **双亲委派模型:**保证类的唯一性,提高系统的安全性。 #### 七、char型变量与中文字符 - **存储能力:**Java中`char`类型采用Unicode编码,占用16...