java执行顺序
发布时间: 2025-02-23 22:43:29
❶ java类的完整构造执行顺序
这里只说一个完整的结果 至于为什么是这样的顺序 可以参考我以前的文章 深入剖析java类的构造方式
- 如果父类有静态成员赋值或者静态初始化块 执行静态成员赋值和静态初始化块 如果类有静态成员赋值或者静态初始化块 执行静态成员赋值和静态初始化块 将类的成员赋予初值(原始类型的成员的值为规定值 例如int型为 float型为 f boolean型为false 对象类型的初始值为null) 如果构造方法中存在this()调用(可以是其它带参数的this()调用)则执行之 执行完毕后进入第 步继续执行 如果没有this调用则进行下一步 (这个有可能存在递归调用其它的构造方法) 执行显式的super()调用(可以是其它带参数的super()调用)或者隐式的super()调用(缺省构造方法) 此步骤又进入一个父类的构造过程并一直上推至Object对象的构造 执行类申明中的成员赋值和初始化块 执行构造方法中的其它语句
其中第 步是比较麻烦的 因为this调用实际上会调用类的另外一个构造方法 最终应该是执行类的某个构造方法 它可能会显示的调用super 但是无论是否调用super 最终都是执行super的 也就是父类的构造方法并一直这样递归到Object 所以在子类和父类的构造中 首先构造或者说执行的是父类的构造 但是它是由子类的构造方法调用的 先于构造方法的方法体里面的内容 这个是由编译器决定的 所以我感觉简单直观一些的顺序表述应该是
- 如果父类有静态成员赋值或者静态初始化块 执行静态成员赋值和静态初始化块 如果类有静态成员赋值或者静态初始化块 执行静态成员赋值和静态初始化块 将类的成员赋予初值(原始类型的成员的值为规定值 例如int型为 float型为 f boolean型为false 对象类型的初始值为null) 执行构造方法 并可能递归调用this() 最终先执行父类的构造方法并一直递归到Object的构造方法的执行 父类的构造方法执行完成后 执行类申明中的成员赋值和初始化块 执行构造方法中的其它语句
最终的简化顺序版本是
- 父类的静态成员赋值和静态块 子类的静态成员和静态块 父类的构造方法 父类的成员赋值和初始化块 父类的构造方法中的其它语句 子类的成员赋值和初始化块 子类的构造方法中的其它语句
❷ java中运算符的优先级顺序是怎样的
以下是一张常见的运算符优先级表,按照从高到低的顺序排列:
- 括号 ():具有最高优先级,可以优先执行。
- 算术运算符:+、-、*、/、%、++、--。这些运算符具有相对较高的优先级,它们通常在括号内运算完成后再执行。
- 身份运算符:!(逻辑非)、~(按位取反)、&(按位与)、|(按位或)、^(异或)。这些运算符的优先级高于算术运算符,但低于括号。
- 比较运算符:==、!=、>、<、≥、≤。这些运算符的优先级低于身份运算符,但高于算术运算符和括号。
- 赋值运算符:=, +=, -=, *=, /=, %=, <<, >>, &=, ^=, |=。这些运算符的优先级低于比较运算符和身份运算符,但高于括号。
值得注意的是,有些语言可能会根据特定的语法规则对运算符的优先级进行微调。此外,可以使用括号来改变运算的顺序,即使它们看起来并不符合默认的优先级顺序。这只是一张常见的运算符优先级表的一部分,具体的优先级可能会因编程语言和上下文而异。在编写代码时,建议查阅特定语言的文档以获取准确的运算符优先级信息。
❸ java中的return和finally谁先执行
finally先执行.
可以形象的说,方法在顺序化的一直往下走,
走着走着,发现了Rerurn(并未执行),它知道它快活不下去了,临死前.他就去找Finally,让Finally把事情做完.
这种情况在Debug的时候比较明显,走到Return所在行,就进Finally,然后在回到Rerurn,做返回
热点内容