-
2021-12-20 19:52:23更多相关内容
-
java类中的代码块-静态代码块和非静态代码块
2022-02-11 18:30:10静态代码块和非静态代码块的描述 代码块的作用 在类或者对象执行代码块,初始化属性的时候,可以写逻辑。静态代码块,只能直接定义静态属性 代码块的执行顺序:由父及子,静态先行展开全文 -
Java中静态代码块,非静态代码块,构造函数的执行顺序
2020-09-01 09:25:32非静态代码块:是用来初始化类的实例信息,在创建对象的时候就会被执行,且每创建一个对象都会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,非静态初始化块会在构造函数执行...静态代码块:是用来初始化类的信息,在类被加载的时候就会被执行,且只执行一次。执行优先级高于非静态的初始化块。
非静态代码块:是用来初始化类的实例信息,在创建对象的时候就会被执行,且每创建一个对象都会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。
构造方法:是用来创建对象的。
一、同类中静态代码块,非静态代码块,构造方法的执行顺序
执行顺序:静态代码块>非静态代码块>构造方法
即:程序在执行时,首先执行静态代码块,且只执行一次。接下来再创建对象时(new),首先执行非静态代码块,再执行构造方法。
示例1:
代码:
package com.csu.marden; public class Demo { static{ System.out.println("static"); } { System.out.println("no static"); } Demo5(){ System.out.println("constructor"); } public static void main(String[] args) { } }
执行结果:
分析:
上述Demo类包含静态代码块,非静态代码块和构造方法。但是该类中没有具体的执行,只完成了类的加载,即只有静态代码块在类加载的时候被执行,且只执行一次。由于没有对类的实例化,所有非静态代码块和构造方法均未执行。
示例2:
代码:
package com.csu.marden; public class Demo5 { static{ System.out.println("static"); } { System.out.println("no static"); } Demo5(){ System.out.println("constructor"); } public static void main(String[] args) { Demo demo=new Demo(); } }
执行结果:
分析:
上述Demo类包含静态代码块,非静态代码块和构造方法。上述代码首先完成了类加载,即静态代码块执行,且仅执行一次。然后创建了该类的实例,首先执行了非静态代码块,然后执行了构造方法。
示例3:
代码:
package com.csu.marden; public class Demo5 { static{ System.out.println("static"); } { System.out.println("no static"); } Demo5(){ System.out.println("constructor"); } public static void main(String[] args) { Demo demo1=new Demo(); Demo demo2=new Demo(); } }
执行结果:
分析:
上述Demo类包含静态代码块,非静态代码块和构造方法。上述代码首先完成了类加载,即静态代码块执行,且仅执行一次。然后创建了该类的两个实例,首先执行了非静态代码块,然后执行了构造方法。并且非静态代码块和构造方法,在每次创建新的对象时,都会被执行一次。
二、父类和子类中静态代码块,非静态代码块,构造方法的执行顺序
在Java继承中,父类子类构造方法、静态代码块、非静态代码块的执行顺序:
父类静态代码块 > 子类静态代码块 > 父类非静态代码块 > 父类构造方法 > 子类非静态代码块 > 子类构造方法
示例1:
代码:
//父类 public class Parent { static String name = "hello"; { System.out.println("parent-no-block"); } static { System.out.println("parent-static"); } public Parent() { System.out.println("parent-constructor"); } } //子类 public class Child extends Parent { static String childName = "hello"; { System.out.println("child-no-static"); } static { System.out.println("child-static"); } public Child() { System.out.println("child-constructor"); } } //测试类 public class Demo { public static void main(String[] args) { new Child(); } }
执行结果:
分析:
Java继承体系中,若子类继承了父类,在创建子类的时候,首先会调用父类的构造方法和非静态代码块完成类实例的初始化,然后调用子类的构造方法和非静态代码块完成类实例的初始化(子类需要根据父类的构造方法生成)。
所以在执行时(创建子类对象时),首先加载父类,即执行父类的静态代码块,且只执行一次,然后加载子类,即执行子类的静态代码块,同样只执行一次。然后执行父类的非静态代码块和构造方法完成父类实例的初始化,最后执行子类的非静态代码块和构造方法完成子类实例的初始化。
示例2:
代码:
//父类 public class Parent { static String name = "hello"; { System.out.println("parent-no-block"); } static { System.out.println("parent-static"); } public Parent() { System.out.println("parent-constructor"); } } //子类 public class Child extends Parent { static String childName = "hello"; { System.out.println("child-no-static"); } static { System.out.println("child-static"); } public Child() { System.out.println("child-constructor"); } } //测试类 public class Demo { public static void main(String[] args) { new Child(); new Child(); } }
执行结果:
分析:
在执行时(创建子类对象时),首先加载父类,即执行父类的静态代码块,且只执行一次,然后加载子类,即执行子类的静态代码块,同样只执行一次。然后执行父类的非静态代码块和构造方法完成父类实例的初始化,最后执行子类的非静态代码块和构造方法完成子类实例的初始化。由于本例中创建了两个子类对象,所以执行两次父类非静态代码块和构造函数,子类非静态代码块和构造函数。
-
Java的静态代码块、非静态代码块、构造函数
2021-01-12 21:17:21Java的静态代码块、非静态代码块、构造函数的简单的java代码 -
Java中的静态变量、静态方法与静态代码块
2020-12-22 20:36:54而非静态代码则在类的使用阶段(也是实例化一个类的时候)才会被初始化。 静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。 静态变量有两种情况: ● 静态... -
java静态代码块与非静态代码块.doc
2021-09-30 23:05:14java静态代码块与非静态代码块.doc -
java静态代码块与非静态代码块比较
2018-10-23 00:20:45得出结论1:非静态代码块不会在调用方法与成员时执行. 结论2:非静态代码块在创建实例时执行 结论3:非静态代码块每次创建实例时执行,而静态代码块只执行一次 结论4:静态代码块优先非静态代码块优先...得出结论1:非静态代码块不会在调用方法与成员时执行.
结论2:非静态代码块在创建实例时执行
结论3:非静态代码块每次创建实例时执行,而静态代码块只执行一次
结论4:静态代码块优先非静态代码块优先构造函数,无论如何访问类(实例化,调用函数,成员),都会执行静态代码块
-
java静态代码块与非静态代码块参照.pdf
2021-11-30 03:21:08java静态代码块与非静态代码块参照.pdf -
java静态代码块、非静态代码块、构造器执行顺序
2015-11-23 11:47:42java静态代码块、非静态代码块、构造器执行顺序 1)有静态代码块,先执行父类静态代码块,再执行子类静态代码块; 2)有非静态代码块,先执行父类非静态代码块,父类构造器,再执行子类非静态代码块,子类构造器 -
java中静态代码块详解
2021-02-26 12:43:02今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一下,依旧按照为什么?是什么?怎么用?的思想,去学习。【为什么?】先说说代码中为什么要使用这种写法吧,还记得静态代码块的特点吗?... -
Java-静态代码块、非静态代码块、静态方法,非静态方法
2019-09-04 19:33:12执行顺序:静态代码块--非静态代码块--默认构造方法--普通方法 使用地方:非静态代码块可在普通方法中定义(不过作用不大)。静态代码块必须在类中进行 使用场景:静态代码块可用来初始化一些项目最常用的变量或对象... -
Java静态代码块与非静态代码块面试题
2018-06-06 15:53:09java静态代码块面试题 public class Father { static{ System.out.println("Father___的静态代码块&amp... -
java静态和非静态代码块的执行顺序
2015-11-19 22:39:481、静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。 2、在静态方法里面只能直接调用同类... -
java中静态和非静态代码块
2017-11-18 21:34:37java中经常有一些静态块,这是用来在生成类之前进行的...非静态语句代码块 } 异同点 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋 值 -
完全理解Java中静态代码块,静态方法,静态变量,非静态代码块,非静态变量,构造函数初始化顺序
2019-06-30 22:12:211、静态代码块(静态初始化块,静态域): 使用static关键字和{}声明的代码块,格式如下: public class People{ static{ System.out.println("静态代码块"); } } 作用: 需要在项目启动时就执行的代码... -
Java中静态代码块、非静态代码块、构造函数的执行顺序与作用
2015-07-16 18:09:55一、观察一段源码与结果 public class StaticDemo { private static int i=1; static { System.out.println("static前代码块执行顺序...System.out.println("非static代码块执行顺序为"+i); i=i+1; } public StaticDem -
静态代码块和非静态代码块的区别
2018-06-02 16:19:34摘自原文小结:1、静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。2、在静态方法里面只能直接... -
静态代码块、非静态代码块、构造方法的执行顺序
2019-05-07 09:19:07总结: 在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。...static{}静态代码块与{}非静态... -
Java子类与父类中静态代码块、非静态代码块、构造函数的执行顺序一览表
2018-11-02 15:44:42③父类非静态代码块>>④父类构造函数>>⑤子类非静态代码块>>⑥子类构造函数 大致总结: 父类早于子类,静态早于非静态,非静态早于构造函数。 1、验证代码 package ... -
静态代码块与非静态代码块的区别(Java)
2018-07-29 13:46:15静态代码块是以static修饰的代码块,反之没有用static修饰的代码块为非静态代码块,如下所示: 静态代码块: static{ 若干代码 } 非静态代码块: { 若干代码 } 它们之间的区别主要如下: 静态代码块在... -
java之静态、非静态代码块详解
2019-08-14 11:52:00java中我们通常将static修饰的代码块,称为静态代码块,随类存在,仅在类初始化时执行一次,那么类在什么时候初始化,主要有以下六种: 1)创建类的实例,也就是new一个对象 2)访问某个类或接口的静态变量,... -
Java初始化块(静态代码块和非静态代码块)
2018-03-19 10:24:41 ...与构造器作用非常类似的是初始化块,它也可以对Java对象进行初始化操作。 初始化块  ... -
Java 构造方法、代码块和静态代码块的执行顺序以及子父类执行顺序
2022-01-20 22:20:09构造、代码块、变量的执行顺序 -
java中静态代码块,非静态代码块,构造函数之间的执行顺序
2016-03-15 16:05:33它们之间的执行顺序为:静态代码块—>非静态代码块—>构造方法。静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码... -
java中静态代码块、静态方法、static关键字详解
2016-04-10 21:40:21最近在准备面试,复习java基础知识,对java中和static关键字相关的静态方法、静态代码块、非静态代码块、静态成员变量的用法进行了详细的总结。 1. 静态成员变量 声明为static关键词修饰的变量叫做静态成员变量,也... -
Static静态代码块以及各代码块之间的执行顺序
2022-01-01 14:41:18在Java中,Static静态代码块、构造代码块、普通代码块、构造函数的执行顺序是一个java学习者必须掌握的基础,本篇博客旨在让大家能清除了解它们之间的执行顺序。 代码块的分类 基本上代码块分为三种:Static静态代码... -
Java类中的静态属性、静态代码块块、非静态属性、非静态代码块块、构造函数在初始化时的执行顺序
2018-06-08 16:27:20序言 前几天在复习J2SE的时候,看到了这个Java类在new的过程中,静态域、静态块、非静态域、非静态块、构造函数的执行... 实现自身的静态属性和静态代码块。 注意:它们两个的执行顺序根据自身出现的顺序决定2... -
java类中静态域、块,非静态域、块,构造函数的初始化顺序
2011-11-21 15:05:11java类中静态域、块,非静态域、块,构造函数的初始化顺序,通过本例子,能够清楚了解到java类的初始化顺序