众所周知static字段是在类加载的时候完成初始化过程的。
而final字段呢。
在类加载时给予空间而不是对其进行初始化。
例如
private final String strFinal="ok";
加载时给一个String类型空间大小,栈中的strFinal引用指向这个空间。
初始化时也就是调用类的构造器时。将“ok”初始化。
下面的代码展示了:
public class DemoB {
private static DemoB demoB = new DemoB();
public final String strFinal="final字段初始化";
public DemoB() {
}
public static void main(String[] args) {
System.out.println(demoB.strCommon);
}
}
首先static中创建对象demoB。就会调用构造器DemoB(),DemoB()会初始化其中的final
String strFinal字段。进而实现初始化。
还有另外的一段代码也可以说明
public class DemoB {
private static DemoB demoB = new DemoB();
public String strCommon;
public final String strFinal;
public DemoB() {
strFinal = "final字段初始化";
}
public static void main(String[] args) {
System.out.println(demoB.strCommon);
}
}
若有错误。望大家不吝赐教。
分享到:
相关推荐
以下是对`final`变量初始化的详细分析: 1. **定义时初始化**: `final`变量可以在定义时直接赋值,这是最常见的方式。例如: ```java final int a1 = 1; ``` 这里的`a1`在定义时就被赋予了初始值1,之后不能...
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
- 遇到静态字段(非final)并对其进行访问; - 遇到静态方法的调用; - 使用反射方式调用类; - 初始化子类时,如果父类未初始化,则先初始化父类。 了解这些初始化顺序有助于开发者更好地控制程序的行为,避免...
1. 基本类型的静态字段和引用类型的静态字段(如果它们是常量,即final且已初始化):这些字段在类加载时按声明顺序初始化。 2. 静态初始化块:当类第一次被加载时执行,按块的顺序执行。 3. 实例字段:在构造器内部...
3. 显示初始化:执行实例变量的显示赋值代码,这是在源代码中对实例变量的直接赋值。 4. 构造器执行:调用对应的构造器,执行构造器内部的代码。每个构造器都会隐式地在其开始处调用父类的构造器(通过super()或...
在Java中,初始化是一个关键的步骤,它涉及到对变量、类和对象的设定初始值。初始化在程序运行前或运行时进行,确保数据和结构准备就绪以便后续操作。教程将深入讲解以下几个核心知识点: 1. **基本类型变量初始化*...
- 在多线程环境下,`final`字段具有特殊的含义,它们可以被JVM保证初始化的安全性。一旦对象的构造完成,`final`字段的值就会被锁定,不会受到并发的影响。 7. **final和效率** - Java虚拟机(JVM)可以对`final`...
`<clinit>`方法是由编译器自动创建的,用于初始化类的静态变量(包括final常量)和静态块。静态变量的初始化顺序按照它们在源代码中的出现顺序进行,而静态块则是在类加载时按顺序执行的。例如,在`JvmTest.java`和`...
final 关键字对初始化的影响主要体现在以下几个方面: 1. final 实例变量的初始化 ```java public class Test { final int x = 10; } ``` 2. final 实例变量的初始化顺序 ```java public class Test { final int ...
- 访问类的静态字段(不包括被final修饰且已初始化的常量)。 - 调用类的静态方法。 - 反射调用类的构造器、字段或方法。 - 初始化子类时,会先初始化父类。 - JSP应用加载对应页面的类。 三、加载器的父委托机制 ...
综上所述,FinalData格式化后100%数据恢复 V2.0.1是一款高效实用的数据恢复工具,尤其适合对速度和易用性有要求的用户。然而,为了最大程度地保护数据,预防总是优于治疗,定期备份和谨慎操作仍然是最重要的。
Java并发编程中,AtomicIntegerFieldUpdater 是一个非常重要的工具类,它是Java并发包(concurrent.atomic)下的一个原子更新器,主要用于确保对某个实例对象中的int类型字段进行原子操作。这个类的设计目的是在不改变...
类初始化是Java虚拟机对类进行初始化的过程。类初始化由两部分组成:静态变量的显示初始化代码和静态代码块。在类初始化时,Java虚拟机会先初始化父类,然后再初始化当前类。每一个类只会初始化一次,并且初始化的...
final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前必须被初始化。 static 关键字是 Java 中的一种访问修饰符,用于修饰变量、方法和块...
有三种方式初始化final成员变量:直接在声明时进行显示初始化、在构造方法中初始化(非静态常量)、在实例代码块中初始化(非静态常量)。注意,这三种方式只能选择其一。final成员变量常用于表示不可变的状态信息。...
ClassFinal的工作原理可能包括以下几点:首先,它会对输入的`.class`文件进行读取,然后通过特定的加密算法对字节码进行变换,使得原始的指令序列变得难以理解。加密后的字节码在Java虚拟机(JVM)加载时,需要经过...
与Java的`final`不同,`readonly`字段可以在构造函数中初始化,允许运行时的初始值。 #### 3. `readonly`和`const`的区别 `const`是编译时的常量,而`readonly`是运行时的只读字段。`const`常量是静态的,不需要`...
- `final`字段也满足Java内存模型(JMM)的"初始化完成"条件,这意味着其他线程能正确地看到`final`字段的初始化值。 6. **`final`与`this`引用** - 在构造器中,`final`关键字可以用于限制`this`的使用,防止...
`static`变量也称为类变量,它在类加载时初始化,并且对所有实例共享同一份拷贝。这使得`static`变量非常适合存储不会随实例变化的信息,如常量或者计数器。 示例: ```java public class MyClass { public static...