精华内容
下载资源
问答
  • 2021-12-20 19:52:23

    静态代码块和非静态代码块什么时候执行?

    静态代码块随着类的加载而加载,非静态代码块随着对象的加载而加载
    所以静态代码块再调用类的时候执行。非静态代码块创建对象时或者通过反射获取其类信息的时候执行

    更多相关内容
  • 静态代码块和非静态代码块的描述 代码块的作用 在类或者对象执行代码块,初始化属性的时候,可以写逻辑。静态代码块,只能直接定义静态属性 代码块的执行顺序:由父及子,静态先行

    静态代码块和非静态代码块的描述

    在这里插入图片描述

    代码块的作用

    在类或者对象执行代码块,初始化属性的时候,可以写逻辑。静态代码块,只能直接定义静态属性
    在这里插入图片描述
    代码块的执行顺序:由父及子,静态先行
    在这里插入图片描述


    在这里插入图片描述

    展开全文
  • 非静态代码块:是用来初始化类的实例信息,在创建对象的时候就会被执行,且每创建一个对象都会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,非静态初始化块会在构造函数执行...

    静态代码块:是用来初始化类的信息,在类被加载的时候就会被执行,且只执行一次。执行优先级高于非静态的初始化块。

    非静态代码块:是用来初始化类的实例信息,在创建对象的时候就会被执行,且每创建一个对象都会被执行一次。执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。

    构造方法:是用来创建对象的。

    一、同类中静态代码块,非静态代码块,构造方法的执行顺序

    执行顺序:静态代码块>非静态代码块>构造方法

    即:程序在执行时,首先执行静态代码块,且只执行一次。接下来再创建对象时(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的静态代码块、非静态代码块、构造函数的简单的java代码
  • 非静态代码则在类的使用阶段(也是实例化一个类的时候)才会被初始化。  静态变量  可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。  静态变量有两种情况:  ● 静态...
  • java静态代码块与非静态代码块.doc
  • java静态代码块与非静态代码块比较

    千次阅读 2018-10-23 00:20:45
    得出结论1:非静态代码块不会在调用方法与成员时执行.     结论2:非静态代码块在创建实例时执行   结论3:非静态代码块每次创建实例时执行,而静态代码块只执行一次 结论4:静态代码块优先非静态代码块优先...

     

    得出结论1:非静态代码块不会在调用方法与成员时执行.

     

     

    结论2:非静态代码块在创建实例时执行

     

    结论3:非静态代码块每次创建实例时执行,而静态代码块只执行一次

    结论4:静态代码块优先非静态代码块优先构造函数,无论如何访问类(实例化,调用函数,成员),都会执行静态代码块

    展开全文
  • java静态代码块与非静态代码块参照.pdf
  • java静态代码块、非静态代码块、构造器执行顺序 1)有静态代码块,先执行父类静态代码块,再执行子类静态代码块; 2)有非静态代码块,先执行父类非静态代码块,父类构造器,再执行子类非静态代码块,子类构造器
  • java静态代码块详解

    千次阅读 2021-02-26 12:43:02
    今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一下,依旧按照为什么?是什么?怎么用?的思想,去学习。【为什么?】先说说代码中为什么要使用这种写法吧,还记得静态代码块的特点吗?...
  • 执行顺序:静态代码块--非静态代码块--默认构造方法--普通方法 使用地方:非静态代码块可在普通方法中定义(不过作用不大)。静态代码块必须在类中进行 使用场景:静态代码块可用来初始化一些项目最常用的变量或对象...
  • java静态代码块面试题 public class Father { static{ System.out.println("Father___的静态代码块&amp...
  • java静态和非静态代码块的执行顺序

    千次阅读 2015-11-19 22:39:48
    1、静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。  2、在静态方法里面只能直接调用同类...
  • java中静态和非静态代码块

    千次阅读 2017-11-18 21:34:37
    java中经常有一些静态块,这是用来在生成类之前进行的...非静态语句代码块 } 异同点 相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋  值
  • 1、静态代码块(静态初始化块,静态域): 使用static关键字和{}声明的代码块,格式如下: public class People{ static{ System.out.println("静态代码块"); } } 作用: 需要在项目启动时就执行的代码...
  • 一、观察一段源码与结果 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、在静态方法里面只能直接...
  • 总结: 在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。...static{}静态代码块与{}非静态...
  • ③父类非静态代码块>>④父类构造函数>>⑤子类非静态代码块>>⑥子类构造函数 大致总结: 父类早于子类,静态早于非静态,非静态早于构造函数。 1、验证代码 package ...
  • 静态代码块是以static修饰的代码块,反之没有用static修饰的代码块为非静态代码块,如下所示: 静态代码块: static{ 若干代码 } 非静态代码块: { 若干代码 } 它们之间的区别主要如下: 静态代码块在...
  • java中我们通常将static修饰的代码块,称为静态代码块,随类存在,仅在类初始化时执行一次,那么类在什么时候初始化,主要有以下六种:  1)创建类的实例,也就是new一个对象  2)访问某个类或接口的静态变量,...
  •     ...与构造器作用非常类似的是初始化,它也可以对Java对象进行初始化操作。 初始化      &nbsp...
  • 构造、代码块、变量的执行顺序
  • 它们之间的执行顺序为:静态代码块—>非静态代码块—>构造方法。静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码...
  • 最近在准备面试,复习java基础知识,对java中和static关键字相关的静态方法、静态代码块、非静态代码块、静态成员变量的用法进行了详细的总结。 1. 静态成员变量 声明为static关键词修饰的变量叫做静态成员变量,也...
  • Java中,Static静态代码块、构造代码块、普通代码块、构造函数的执行顺序是一个java学习者必须掌握的基础,本篇博客旨在让大家能清除了解它们之间的执行顺序。 代码块的分类 基本上代码块分为三种:Static静态代码...
  • 序言 前几天在复习J2SE的时候,看到了这个Java类在new的过程中,静态域、静态块、非静态域、非静态块、构造函数的执行... 实现自身的静态属性和静态代码块。 注意:它们两个的执行顺序根据自身出现的顺序决定2...
  • java类中静态域、非静态域、,构造函数的初始化顺序,通过本例子,能够清楚了解到java类的初始化顺序

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,757
精华内容 80,302
关键字:

java非静态代码块

java 订阅