精华内容
下载资源
问答
  • java中的非静态代码块和静态代码块

    非静态代码块如:

    	{
    		System.out.println("2");
    	}
    以上代码块就是非静态的代码块,请注意这里的方法名、作用域、返回值、参数一概没有,非静态代码块会在每次类被调用或者被实例化时就会被执行。

    静态代码块如:

    static {
    		System.out.println("3");
    	}
    上面的代码块就是静态的代码块,同样没有方法名、作用域、返回值以及参数,静态代码块类似于静态变量,不论类被调用多少次,该区域代码只在第一次时执行一次

    大家可以通过下面的代码做进一步的测试

    public class test1 {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new test1();
    		new test1();
    	}
    	
    	{
    		System.out.println("2");
    	}
    	static {
    		System.out.println("3");
    	}
    	
    	public test1(){
    		System.out.println("1");
    	}
    
    }
    输出结果为

    3
    2
    1
    2
    1

    从结果中发现静态代码块以及非静态代码块都会在构造函数前执行,首次访问时,静态代码块会在非静态代码块前执行



    展开全文
  • 今天有个同事问我关于代码块的问题 只记得静态代码块要提前执行 怕说错,查了资料,实测的一下,供大家参考 public class book { { System.out.println("这里是构造代码块");//所有类中有一个默认的构造函数,...

    今天有个同事问我关于代码块的问题   只记得静态代码块要提前执行 怕说错,查了资料,实测的一下,供大家参考

    public class book {

    {
    System.out.println("这里是构造代码块");//所有类中有一个默认的构造函数,这里的代码块为构造代码块,在类中的对象被创建时执行
    }
    public static void main(String[] args) {

    {
    System.out.println("这里是普通代码块A");
    }
    new book();//第二次类加载时静态代码块不执行
    new book();

    {
    System.out.println("这里是普通代码块B");
    }
    }
    static{
    System.out.println("这里是静态代码块");
    }
    }

    运行结果

    这里是静态代码块
    这里是普通代码块A
    这里是构造代码块//实例化时才创建 
    这里是构造代码块
    这里是普通代码块B



    静态代码块:每个静态代码块只会执行一次(类在内存中加载时执行,类在内存中加载后类已经存在)由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行。

    构造块:(直接在类中定义)且没有加static关键字的代码块称为{}构造代码块。

    构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

    子类父类有继承关系

    class book {

    {
    System.out.println("这里是父类构造代码块");
    }


    static {
    System.out.println("这里是父类静态代码块");
    }
    }

    class Englishbook extends book {


    {
    System.out.println("这里是子类构造代码块");
    }
    static {
    System.out.println("这里是子类静态代码块");
    }


    public static void main(String[] args) {


    {
    System.out.println("这里是子类普通代码块");
    }


    new Englishbook();
    new Englishbook();


    }
    }

    结果

    这里是父类静态代码块
    这里是子类静态代码块
    这里是子类普通代码块
    这里是父类构造代码块
    这里是子类构造代码块
    这里是父类构造代码块
    这里是子类构造代码块

    简单总结:父类静态代码块初始化时执行一次,只要在类里面,方法外面都属于构造代码块,子类每次new都会调用父类的构造代码块,普通代码块按顺序执行。

    Ps实践是检验真理的唯一标准

    展开全文
  • Java静态代码块和静态方法

    千次阅读 2018-07-19 10:47:41
    1 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化) 2 静态方法:需要在项目启动的时候就初始化,在不...

    1 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化)

    2 静态方法:需要在项目启动的时候就初始化,在不创建对象的情况下,这种代码是被动执行的(静态方法在类加载的时候就已经加载 可以用类名直接调用)。

    两者的区别是:静态代码块是自动执行的,

    静态方法是被调用的时候才执行的.


    静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次;
    
    非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次
    
    展开全文
  • Java 静态代码块和非静态代码块

    万次阅读 2016-08-10 21:09:42
    参考:http://uule.iteye.com/blog/1558891Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次。如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行...

    参考:http://uule.iteye.com/blog/1558891

    Java中的静态代码块是在虚拟机加载类的时候,就执行的,而且只执行一次。如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

    非静态代码块是在类new一个实例的时候执行,而且是每次new对象实例都会执行。

    代码的执行顺序

    1. 主调类的静态代码块
    2. 对象父类的静态代码块
    3. 对象的静态代码块
    4. 对象父类的非静态代码块
    5. 对象父类的构造函数
    6. 对象的非静态代码块
    7. 对象的构造函数

    示例代码

    public class StaticBlockTest1 {
    
        //主调类的非静态代码块
        {
            System.out.println("StaticBlockTest1 not static block");
        }
        //主调类的静态代码块
        static {
            System.out.println("StaticBlockTest1 static block");
        }
    
        public StaticBlockTest1(){
            System.out.println("constructor StaticBlockTest1");
        }
    
        public static void main(String[] args) {
            Children children = new Children();
            children.getValue();
        }
    
    }
    
    
    class Parent{
    
        private String name;
        private int age;
    
        //父类无参构造方法
        public Parent(){
            System.out.println("Parent constructor method");
            {
                System.out.println("Parent constructor method--> not static block");
            }
        }
        //父类的非静态代码块
        {
            System.out.println("Parent not static block");
            name = "zhangsan";
            age = 50;
        }
        //父类静态代码块
        static {
            System.out.println("Parent static block");
        }
    
        //父类有参构造方法
        public Parent(String name, int age) {
            System.out.println("Parent constructor method");
            this.name = "lishi";
            this.age = 51;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    class Children extends Parent{
        //子类静态代码块
        static {
            System.out.println("Children static block");
        }
    
        //子类非静态代码块
        {
            System.out.println("Children not static block");
        }
    
        //子类无参构造方法
        public Children(){
            System.out.println("Children constructor method");
        }
    
    
        public void getValue(){
            //this.setName("lisi");
            //this.setAge(51);
            System.out.println(this.getName() + this.getAge());
        }
    }

    输出结果

    StaticBlockTest1 static block   //主调类的静态代码块
    Parent static block             //父类的静态代码块
    Children static block           //子类的静态代码块
    Parent not static block         //父类的非静态代码块
    Parent constructor method       //父类的构造函数
    Parent constructor method--> not static block
    Children not static block       //主调类的非静态代码块
    Children constructor method     //主调类的构造函数
    zhangsan50                      //主调main方法

    总结:

    1. 按照前面提到的顺序执行
    2. 子类定义无参构造方法,调用的父类也是无参构造方法
    展开全文
  • java静态代码块与非静态代码块比较

    千次阅读 2018-10-23 00:20:45
    得出结论1:非静态代码块不会在调用方法与成员时执行.     结论2:非静态代码块在创建实例时...结论4:静态代码块优先非静态代码块优先构造函数,无论如何访问类(实例化,调用函数,成员),都会执行静态代码块 ...
  • Java静态代码块和静态方法的区别

    千次阅读 2017-07-06 10:41:16
    (一)Java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的...
  • 废话不多说,我们来介绍一下大家不经常接触到的静态代码块和构造代码块。1. 静态代码块随着类的加载而执行,只执行一次,并优先于主函数执行,是对类初始化的。public class Test { //静态代码块 static { System...
  • Java静态代码块和静态属性加载顺序

    千次阅读 2019-04-11 17:37:26
    Java静态代码块、静态属性、构造函数加载顺序 代码实例 //父类 public class B { public static B t1 = new B(); public static B t2 = new B(); public B(){ super(); System.out.println("B类构造块"); } ...
  • 知道java的初始化顺序为先执行父类的静态属性初始化(静态变量,静态初始化块,无先后顺序,按代码顺序执行初始化),然后执行子类的静态属性的初始化 之前做过如下面代码的笔试题...静态代码块"); } { Sy...
  • 除了说普通代码块,静态代码块,构造代码块的执行顺序外,还有静态方法,静态变量等,都放在一起的话,这个执行顺序,怎么确定。 我就实际弄个代码,看下执行顺序。 public class Line { static { System.out....
  • java静态代码块面试题 public class Father { static{ System.out.println("Father___的静态代码块&amp...
  • java静态代码块、非静态代码块、构造器执行顺序 1)有静态代码块,先执行父类静态代码块,再执行子类静态代码块; 2)有非静态代码块,先执行父类非静态代码块,父类构造器,再执行子类非静态代码块,子类构造器
  •     ...与构造器作用非常类似的是初始化,它也可以对Java对象进行初始化操作。 初始化      &nbsp...
  • public class TestStaticClass { public TestStaticClass(){ System.out.println("外部类的构造方法"); } static { System.out.println(&...外部类的静态代码块"); } { System.out.print...
  • 1. java中静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java中,使用{}括起来的代码称为代码块,代码块可以分为以下四种: (1)普通代码块:就是类中方法的方法体 public void xxx(){ //code } ...
  • 所谓的代码块是指使用“{}”括起来的一段代码,根据位置不同,代码块可以分为构造代码块、构造函数、静态代码块静态代码块:用staitc声明,jvm加载类时执行,仅执行一次 构造代码块:类中直接用 {} 定义,每一...
  • 构造代码块、静态代码块与构造方法是三种不同的代码块,那么他们到底有什么区别呢? 一、简单认识一下构造代码块、静态代码块与构造方法 class A { //构造代码块 { System.out.println("构造代码块A"); } //...
  • 今天突然有疑问Java类中静态方法static代码块哪个先执行,所以...静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性
  • 最近在准备面试,复习java基础知识,对java中和static关键字相关的静态方法、静态代码块、非静态代码块、静态成员变量的用法进行了详细的总结。 1. 静态成员变量 声明为static关键词修饰的变量叫做静态成员变量,也...
  • //Java静态代码块,普通代码块,构造代码块区别及代码示例 //执行顺序:(优先级从高到低)静态代码块>mian方法>构造代码块>构造方法。 //其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。 1 普通...
  • 转自 Java中普通代码块,构造代码块,静态代码块区别及代码示例 //执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。 其中静态代码块只执行一次。构造代码块在每次创建对象是...
  • (一)java 静态代码块 静态方法区别  一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的...
  • java静态代码块和代码块执行顺序

    千次阅读 2019-04-12 16:07:52
    java静态代码块和代码块执行顺序 先执行static方法,再执行普通方法,最后执行构造方法。 eg: package other; class B { public B() { super(); System.out.println("构造器B"); } { System.out.println...
  • 构造代码块与静态代码块1.构造代码块:每次创建对象时执行 2.静态代码块:JVM加载类(加载在运行之前)时执行,静态代码块只执行一次 3.public static B t1 = new B();也是静态代码块 4.执行顺序:静态代码块>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 308,936
精华内容 123,574
关键字:

java代码块和静态代码块

java 订阅