java初始化顺序
A. java 先初始化和赋值
Java在变量初始化是按照变量的定义顺序进行先后初始化的。先定义的变量不能使用后定义的变量进行初始化,因为此时后定义的变量还没有初始化,如果直接使用后定义的变量进行初始化,编译时会有错误,但是有一种方法可以使用后定义的变量初始化先定义的变量,那就是使用静态函数。
见代码:
public class StaticInit {
public static void main(String[] args) {
Test test = new Test();
}
}
class Test {
static Class1 class1 = new Class1(getName());
static Class2 class2 = new Class2();
static String getName()
{
return class2.getName();
}
}
class Class1 {
String name = "class1";
public Class1() {
System.out.println(name);
}
public Class1(String name1) {
System.out.println(name1 + name);
}
}
class Class2 {
String name = "class2";
public Class2() {
System.out.println(name);
}
public Class2(String name2) {
if(name2 == null)
System.out.println("NULL"+name);
else
System.out.println(name2+name);
}
public String getName() {
return name;
}
}
B. Java 构造方法初始化顺序
初始化子类,调用子类有参的时候默认情况下也是先去调用父类的无参构造,除非你在子类的构造方法中使用super来指明调用父类中的哪个构造方法。
C. Java:类成员的初始化顺序 类加载 疑问(如图)
一段程序的完整执行过程是先编译,然后加载到jvm,然后初始化,然后你才能使用(当然中间还有需要细节)。初始化是执行类构造器方法的过程,类构造器方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的(不是类的构造方法)。所以,简而言之,一个类在初始化的时候,会先执行它的静态代码块,当然,如果这个类有父类的话,同样的道理,如果发现该父类没有初始化,则需要先对其父类进行初始化,再对该类进行初始化。
至于一个类在什么时候初始化,简单的说,当程序第一次用到这个类时候就会对其进行初始化(前提是其没有进行过初始化)。
D. Java 继承与初始化
因为是静态方法。
JAVA初始化顺序
1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
其他说明:
2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
E. 在Java中,成员变量和局部变量分别是什么时候初始化,哪个顺序在前跪求各位前辈指点
成员变量相当于你的名字,出生就有,如果你父母来不及取,默认是宝宝。局部变量相当于你在公司或者学校的外号,进公司或学校才有,出了公司和学校就没了,而如果没有人给你取外号,那么你就没有外号,没有默认值。
成员变量在类存在的时候就已经初始化了,局部变量只有该方法被调用的时候才初始化。局部变量一定要赋初值,否则报错,成员变量如果不赋初值,系统默认给。
F. 请问java构造函数如何初始化成员变量的啊
java构造函数如何初始化成员变量的方式如下:
初始化顺序依据转换后对应的class类成员变量的初始化顺序依次执行,所以所有的静态成员变量都是先声明,后执行赋值的,而且赋值的顺序也是依照源代码对静态成员变量初始化的顺序进行的,注意:定义一个成员变量并直接初始化与在静态代码块中进行初始化是等价的,都是依据它们在源代码中定义的顺序进行的。
G. java中创建对象了,显示初始化值和构造函数初始化对象的区别先后执行顺序是什么
两个都可以初始化值,本质上没有区别,不同的是执行的先后。构造方法初始化值时需要包含有参的构造方法,创建对象时使用Object obj = new Object(arg1,arg2)的形式,你说的显示初始化值应该是使用set方法吧,比如obj.setArg1(arg1)的形式。执行顺序肯定是构造方法的形式要在前了,因为在对象创建之后就会给属性赋值,而set方法形式赋值只会在你调用set方法时才会赋值。
再插一点题外话:其实在对象创建时成员变量已经初始化了,只是初始化的都是变量对应类型的默认值,比如int类型的默认值是0,引用类型默认值是null,boolean类型默认值是false。
H. Java程序初始化的顺序是怎样的
Java程序初始化工作可以在许多不同的代码块中来完成(例如静态代码块,构造函数等),它们执行的顺序如下:
父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。
I. Java中类的初始化顺序是什么
执行顺序应该是:首先是父类静态块 --> 然后是子类静态块 --> 父类自由块 --> 父类构造函数块 --> 子类自由块 --> 子类构造函数块