呵呵 跟放在前后没有关系的,
你写这部分代码叫做 源代码,计算机执行的其实不是源代码,而是字节码。
因此当你执行时,计算机要先做处理,把源代码转换为字节码。
“ 难道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 静态块 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程序的执行流程,详细一点,谢谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)