关于java类的执行顺序

关于java类的执行顺序,第1张

呵呵 跟放在前后没有关系的,

你写这部分代码叫做 源代码,计算机执行的其实不是源代码,而是字节码。

因此当你执行时,计算机要先做处理,把源代码转换为字节码。

“ 难道java代码的执行顺序不是自上而下吗? 初学,见笑了! ”

java代码执行的确是自上而下,呵呵 但是指的是函数内部代码,也就是从main函数的第一句开始执行 以此类推 到最后一句 当然了,有些代码是执行不到的因为有分支结构和循环结构

比如

if(true)

{

//A

}else

{

//B

}

这里B代码就执行不到

不是类代码也是自上而下运行的,嘿嘿

package org;

public class Demo {

public static void main(String[] args) throws Throwable {

/

步骤 1

首先声明并初实例了一个A类的对象:a

程序则进入了类A当中

/

A a = new A();

/

步骤 5

通过以上步骤的判断,程序的执行顺序就显而易见了~~~

下面是执行顺序:

类AA 静态属性 b2 ---------结果:2

类AA 静态块 static{} ----结果:4

类A 静态属性 b2 ----------结果:6

类AA 非静态属性 b1 -------结果:3

类AA 非静态方法 AA() -----结果:1

类A 非静态属性 b1 --------结果:5

类A 非静态方法 A() -------结果:7

/

}

}

class AA {

/

步骤 3

类AA中存在着:

1个静态属性 b2

1个静态块 static{}

一个非静态属性 b1

一个构造方法 AA()

/

public AA() {

Systemoutprintln("1");

}

public static B b2 = new B("2");

private B b1 = new B("3");

static {

B b3 = new B("4");

}

}

class A extends AA {

/

步骤 2

因为类A继承自类AA

所以当类A被实例化的时候会先执行类A的父类(AA)

程序会对比类A和其父类AA

此时则是程序执行编译顺序的关键所在

属性的优先级要大于方法的优先级

静态属性的优先级要大于非静态属性

静态方法(包括静态块)的优先级要大于非静态方法(包括构造方法)

总结起来就是:静态属性>非静态属性>静态方法>非静态方法

而在子类与父类中的执行编译顺序则为:(由上至下)

(父类)静态属性

(父类)静态方法

(子类)静态属性

(子类)静态方法

(父类)非静态属性

(父类)非静态方法

(子类)非静态属性

(子类)非静态方法

所以程序进入到了类AA中并与类A进行比较!!

/

/

步骤 4

类A中存在着:

一个静态属性 b2

一个非静态属性 b1

一个构造函数 A()

/

private B b1 = new B("5");

private static B b2 = new B("6");

public A() {

Systemoutprintln("7");

}

}

class B {

public B(String str) {

Systemoutprintln(str);

}

}

不知道我的解释你能不能理解~~ 希望对你会有帮助!!

如果哪里没看懂就补充问题吧~~我经常来的!!祝你好运!!

类的实例化过程:

1。首先执行父类的静态初始化块、静态属性定义,执行顺序与源代码书写顺序相同。

2。然后执行子类的静态初始化块、静态属性定义,执行顺序与源代码书写顺序相同。

3。执行父类的普通初始化块、普通属性定义、构造函数,它们执行的顺序为,先执行普通初始化块、普通属性定义,执行顺序与源代码书写顺序相同。然后再执行构造函数。

4。执行子类的普通初始化块、普通属性定义、构造函数,它们执行的顺序为,先执行普通初始化块、普通属性定义,执行顺序与源代码书写顺序相同。然后再执行构造函数。

5。注意初始化时的方法重写的情况。

6。以上执行的理解:当系统在第一次使用某个类时,将会加载并初始化它,在类的准备阶段,系统将会为该类的类属性分配内存空间,并指定默认默认值。初始化后,系统将在堆内存为这个类分配一块内存空间。当创建第二个此类的对象时,因为它已经存在堆内存中,所以不再需要对这个类进行初始化。

java中同一层次的语句是按先后顺序执行还是同时执行,这个要分情况讨论。

1、执行顺序如下:

初始化->条件表达式->语句->增量->条件表示式->语句-增量->->条件表达式。

在执行的时候,初始化语句只执行一次,后续按照条件表达式进行判断,如果符合条件,则执行[语句],然后执行增量。再根据条件表示式进行判断,重复上面过程。

这两个方法在被调用的时候运行,不主动调用的话他们谁也不运行

举例说明:

//定义一个类A

class A{

//先写第一个非main方法

void method_A(){Systemoutprintln("A");}

//再写第二个非main方法

void method_B(){Systemoutprintln("B");}

}

public class Test(){//程序

public static void main(){

A a = new A();

amethod_B();//调用method_B(),method_B()就执行了打印出B,和写的顺序没有关系

amethod_A();//同理,后调用amethod_A(),就后打印A,如果不调用amethod_A(),那么A就永远不会被打印

}

}

以上就是关于关于java类的执行顺序全部的内容,包括:关于java类的执行顺序、java程序执行顺序的问题、麻烦解释一下这个java程序的执行流程,详细一点,谢谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9320248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存