java中静态代码块与构造方法执行顺序判断的示例分析-创新互联

这篇文章将为大家详细讲解有关java中静态代码块与构造方法执行顺序判断的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的桂平网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存。所以静态的会优先非静态的。

执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步:

1,super语句,可能出现以下三种情况:

      1)构造方法体的第一行是this语句,则不会执行隐式三步,

      2)构造方法体的第一行是super语句,则调用相应的父类的构造方法,

      3)构造方法体的第一行既不是this语句也不是super语句,则隐式调用super(),即其父类的默认构造方法,这也是为什么一个父类通常要提供默认构造方法的原因;

2,初始化非静态变量;

3,构造代码块。

由此可知,构造代码块优先于构造方法的方法体,但是this关键字跟super关键字不能同时出现,而且只能在代码的第一行。如果出现了this关键字,隐式三步就不会执行。

先看看下面几个类,然后判断它们的输出:

public class A {

 static{
  System.out.print(1);
 }
 public A(){
  System.out.print(2);
 }
 }

 public class B extends A{

 static{
  System.out.print("a");
 }
 public B(){
  System.out.print("b");
 }
 }

 public class C {

 public static void main(String[] args){
  A a = new B();
  a = new B();
 }
 }

父类与子类执行的先后顺序

静态变量的执行特性

方法重写(override)的注意事项

1.当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:

父类静态代码块 > 子类静态代码块

父类构造函数 > 子类构造函数(先有父亲,后有孩子)

如果是多级继承关系的话,最高层的父类首先执行,然后依次递减

总结:静态优先执行,父类优先执行

注意:静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次

2.在调用类中的方法时,在方法体执行之前,首先要对类中的成员变量进行赋值,如果代码中没有赋具体的值,也有默认值。成员变量的赋值顺序按照前后顺序进行。

如果有既有直接赋值,也有构造方法赋值,那么根据先后顺序执行

3.重写(Override) 重载(Overload)

重载是方法名字,返回类型一致,唯一不同的是方法的参数不同(参数类型不同,或者参数类型不同)

重写:

  • 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致

  • 子类抛出的异常不能超过父类相应的方法抛出的异常

  • 子类方法的访问级别不能低于父类相应方法的访问级别(public,package,protected, private)

多态:

父类的引用指向了子类的对象,调用时执行的方法也是子类的方法,父类的方法并不会被执行,

所谓多态就是父类或者接口类型的引用可以指向子类或者实现该接口的类的实例(对象),

看了上面的说明,大家也应该知道上面的程序输出结果了。

输出结果为:1a2b2b

关于“java中静态代码块与构造方法执行顺序判断的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


分享标题:java中静态代码块与构造方法执行顺序判断的示例分析-创新互联
标题链接:http://pwwzsj.com/article/ddjgoo.html