二、JAVA类加载顺序
JAVA类加载顺序:
1).按代码顺序递归加载静态成员/代码块,先父类再本类;
2).按代码顺序递归加载非静态成员/代码块,先父类再本类;
3).按代码顺序递归调用构造函数,先父类再本类;
JAVA类加时机:
1).调用静态成员时,加载静态成员所在的类及父类;
2).第一次new对象时加载(第二次new不再加载)
3).加载子类会先加载父类.有static和final修饰的成员不会被加载;当成常量使用;
link:http://www.hake.cc/a/biancheng/ruanjian/java/2011/0914/14333.html
public class Child extends Parent{
public final int age = 12;
@Override
public void init() {
System.out.println(age);
}
public Child(){
}
public static void main(String...args){
Child c =
new Child();
System.out.println(c.age);
}
}
class Parent{
public void init(){
System.out.println("init in Parent");
}
public Parent(){
this.init();
}
}
这里输出的都是12,但调试的时候显示第一个是0。不知道为什么,哪位牛人知道请告知,谢谢。
分享到:
相关推荐
Java final 变量详解 Java 中的 final 变量是指不能被改变的变量,它有三个方面的作用:修饰变量、修饰方法和修饰类。...但是,final 变量的使用也需要遵守一定的规则,例如变量的初始化顺序、内存分配方式等。
以下是对`final`变量初始化的详细分析: 1. **定义时初始化**: `final`变量可以在定义时直接赋值,这是最常见的方式。例如: ```java final int a1 = 1; ``` 这里的`a1`在定义时就被赋予了初始值1,之后不能...
在Java编程语言中,程序初始化的顺序是一个关键概念,它涉及到类加载、对象创建以及执行流程的安排。了解这些顺序对于编写高效、无错误的代码至关重要。以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**...
7. **final变量初始化**:final变量一旦被赋值,就不能再改变。如果final变量引用的是对象,那么对象的内容可以改变,但引用本身不能改变。 8. **匿名内部类初始化**:在Java中,可以创建没有名字的内部类,它们...
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
final关键字也可以用于方法内的局部变量,这使得变量一旦初始化就不能再次赋值。例如: ```java public static String testMethod(final String suffix) { final String key = "prev" + suffix; return key; }...
Java代码的初始化流程是编程者在开发过程中需要深入了解的关键环节,它涉及到类加载、静态变量初始化、构造函数执行等多个步骤。下面将详细讲解这个过程。 首先,Java代码的执行始于类加载。当程序运行时,Java...
在Java编程语言中,常量和变量是两个基础且重要的概念。...合理地声明、初始化和使用常量与变量,能帮助我们编写出清晰、可维护的代码。在实际编程中,还需根据需求选择合适的数据类型,并注意变量的作用域和生命周期。
如果`final`变量在声明时没有赋值,那么它被称为“空白最终变量”或“未初始化的final变量”。这样的变量必须在构造函数中进行初始化,或者对于静态的`final`变量,可以在静态初始化块中初始化。例如: ```java ...
1. **不可变性**:当`final`用于局部变量时,确保该变量一旦被初始化后,就不能再改变其值。这有助于维护代码的稳定性和安全性,特别是在多线程环境中,防止意外修改。 2. **匿名内部类与final**:在Java中,如果一...
当一个变量被声明为`final`时,它的值一旦被初始化后就不能再改变。这适用于局部变量、成员变量(包括静态变量)以及方法参数。例如: ```java public class FinalDemo { final int constant = 10; // final成员...
1. final 修饰变量:表示该变量一旦被初始化,程序无法修改变量的值,该变量变成了一个常量。注意,系统不会默认为它初始化,只有两种初始化的方式:在定义处和构造方法中对其初始化。 2. final 修饰方法中的参数...
- `final`修饰的局部变量一旦初始化后,就不能再改变其值。这有助于防止意外修改,增加代码的可预测性和安全性。 - 类级(静态)常量通常也用`final`修饰,例如`public static final`,这样的变量被称为常量,如...
本篇文章将深入探讨C++和Java中变量和成员初始化的差异,并通过具体的代码示例进行对比。 在C++中,初始化顺序遵循以下规则: 1. 静态成员变量:无论它们在哪里定义,静态成员变量都按照声明的顺序初始化。 2. 非...
变量初始化优先于任何方法,包括构造函数。静态变量在类加载时初始化,然后是静态代码块,接着是非静态变量和非静态代码块,最后是构造函数。 6. **内联优化和多态**: `final`方法能够被编译器进行内联优化,...
final 变量定义的时候,可以先声明,而不给初值,这中变量也称为 final 空白,无论什么情况,编译器都确保空白 final 在使用之前必须被初始化。 二、static 关键字 static 关键字在 Java 中用于修饰变量和方法,...
对于成员变量,`final`变量在构造函数中或初始化块中赋值,静态`final`变量则通常在类加载时初始化。如果未显式赋值,系统会赋予默认值,例如`int`类型的默认值是0。`final`变量的内存分配与其他变量不同,常量保存...
6. 未初始化的 `final` 变量被称为“空白 final 变量”,在编译时必须赋值。 了解这些 `final` 关键字的知识点对于编写高效、安全的 Java 代码至关重要,特别是在设计不可变类和保证代码行为不变性时。通过正确使用...
* final 变量的初始化:final 变量必须由程序员显示初始化,系统不会对 final 变量进行隐式初始化。 二、Spring 框架 * @Autowired 和 @Resource 的区别:@Autowired 按 byType 自动注入,而 @Resource 默认按 by...
实例级别的`final`变量则属于每个对象实例,它们的值在对象创建时初始化,之后不能再改变。 现在我们来看`static`关键字。`static`修饰符用于表示类级别的成员,这些成员与类本身相关联,而不是类的实例。这意味着...