今天探索吧就给我们广大朋友来聊聊java方法执行顺序执行,以下关于观点希望能帮助到您找到想要的答案。
java,静态方法为什么不能调用类成员?
优质回答楼主想问的应该是不用调用成员变量吧
首先,这涉及到代码执行优先级的问题,在一个Java类中,存在的代码形式有静态代码块(花括号{}包裹住的代码片段),静态方法,构造函数,成员方法。不同形式的代码执行顺序不同:
1、静态代码块:当类被载入时,静态代码块被执行,且只被执行一次,静态代码块常用来执行类属性的初始化。
2、静态方法(也叫类方法):在类加载的时候,在不创建对象的情况下执行,可以直接用类名调用。
两者的区别是静态代码块是主动执行的,静态方法是被动执行,只有被调用时才执行。
3、构造函数在创建对象的时候执行。
4、成员方法在被调用的时候执行。
总结:Java代码执行先后顺序:静态代码块>静态方法>构造函数=非静态代码块。
在了解执行顺序后,楼主的问题就很容易解答了。
从层级上看,静态方法属于类级别,成员变量属于对象级别。同时静态方法也先于构造函数执行,内存也没给类成员分配空间,说白就是都不存在,你静态方法调用一个不存在的变量肯定不行的呀。
Java构造函数,构造代码块和静态代码块的区别
优质回答构造函数:执行时间比构造代码块时间晚,也是在对象初始化的时候运行。没有返回值,构造函数名称和类名一致。
构造代码块:执行时间比静态代码块晚,比构造函数早,和构造函数一样,只在对象初始化的时候运行。没有名字、参数和返回值。
静态代码块:最早执行,类被载入内存时执行,只执行一次。没有名字、参数和返回值,有关键字static。
静态代码块只会在类被载入内存时加载一次,是最先执行的,然后是构造代码块,最后才是构造函数。构造代码块和构造函数都是在对象创建的时候执行,有几个对象就会执行几次。
java 类中定义一个类,这两个类构造函数先后问题
优质回答JAVA初始化顺序
1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
其他说明:
2 、类只有在使用New调用创建的时候才会被JAVA类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
你这里C继承A,所以顺序是:
A的属性初始化-->A的构造-->C的属性初始化(此时new B()调用了B的构造)-->C的构造
java 类加载先后顺序
优质回答1.父类静态代码块;
2.子类静态代码块;
3.父类非静态代码块;
4.父类构造函数;
5.子类非静态代码块;
6.子类构造函数;
举例:
public class ExA {
static {
System.out.println("父类静态代码块。");
}
public ExA() {
System.out.println("父类构造函数。");
}
{
System.out.println("父类非静态代码块。");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类静态代码块。");
}
{
System.out.println("子类非静态代码块。");
}
public ExB() {
System.out.println("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
了解了上面的内容,相信你已经知道在面对java方法执行顺序执行时,你应该怎么做了。如果你还需要更深入的认识,可以看看探索吧的其他内容。