精华内容
下载资源
问答
  • 静态代码块执行顺序

    2021-04-18 13:14:51
    虽然说不管是静态变量还是静态方法,这些都是java基础的知识了,但我发现还是有很多人不懂静态的原理,静态的属性遵循以下规则: ... System.out.println("1:静态代码块"); } public Main(){ ...

     

    虽然说不管是静态变量还是静态方法,这些都是java基础的知识了,但我发现还是有很多人不懂静态的原理,静态的属性遵循以下规则:

    1. 静态元素会在构造方法之前执行
    2. 静态元素从上到下按顺序执行
    3. 静态元素不需要初始化即可直接使用;

     

    1、静态元素会在构造方法之前执行,举个例子就知道啦;我们看看下面的代码

    public class Main {
        static{
            System.out.println("1:静态代码块");
       }
    
        public Main(){
            System.out.println("2:构造函数");
        }
    
        public static void main(String[] args) {
            // 初始化
            Main main = new Main();
            System.out.println("3 :main 方法");
        }
    }

    输出如下:

    通过例子我们可以知道,我们在类中加个一个静态方法块 static{} ,那么这个静态的方法块就一定会在类的初始化之前执行,

    需要注意的是,就算不初始化,这个static方法块也会执行,代码如下:

    public class Main {
        static{
            System.out.println("1:静态代码块");
            num = 2;
        }
        public static int num = 1;
    
        public Main(){
            System.out.println("2:构造函数");
        }
        public static void main(String[] args) {
    
        }
    }

    通过以上代码我们可以看到,以上的main方法没有任何代码,但是照样会打印静态代码块的字符;

     

    2、静态元素从上到下按顺序执行

      静态元素也是有执行顺序的,规则就是从上至下按顺序执行;多说无用,看代码:

    public class Main {
    
        public static int num = 1;  // 静态变量
    
        static{
            num = 2;
        }
    
        public static void main(String[] args) {
            System.out.println("静态变量的值为:"+num);
        }
    }

    打印结果如下:

    那么这时候我们把静态修饰的方法和属性换个位置

    替换位置后的代码如下:

    public class Main {
        
        static{
            num = 2;
        }
    
        public static int num = 1;  // 静态变量
    
        public static void main(String[] args) {
            System.out.println("静态变量的值为:"+num);
        }
    }

    打印结果也会发生变化

    通过以上举例说明了,静态变量和方法都是按顺序执行的;

     

    展开全文
  • 静态 代码块执行顺序

    2017-06-09 10:20:35
    package com.test; public class B { public static B t1 = new B(); public static B t2 = new B(); { System.out.println("构造"); } ...System.out.println("静态块"); } public stat
    package com.test;


    public class B {


    public static B t1 = new B();

    public static B t2 = new B();

    {
    System.out.println("构造块");
    }

    static{
    System.out.println("静态块");
    }

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


    }


    打印

    构造块
    构造块
    静态块
    构造块


    说明

    由此可见,实例化子类的时候,若此类未被加载过,首先加载是父类的类对象,然后加载子类的类对象,接着实例化父类,最后实例化子类,若此类被加载过,不再加载父类和子类的类对象。

    接下来是加载顺序,当加载类对象时,首先初始化静态属性,然后执行静态块;当实例化对象时,首先执行构造块(直接写在类中的代码块),然后执行构造方法。至于各静态块和静态属性初始化哪个些执行,是按代码的先后顺序。属性、构造块(也就是上面的实例块)、构造方法之间的执行顺序(但构造块一定会在构造方法前执行),也是按代码的先后顺序。

    欢迎加入我的qq群:425783133
    展开全文
  • 下面小编就为大家带来一篇Java 普通代码块静态代码块执行顺序(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 静态代码块执行顺序 -----> 先抛结论: 静态代码块先于构造方法执行,创建子类对象时父类静态代码块先于子类静态代码块执行。 public class PracticeTest03 { public static void main(String[] args) { Cat ...

    静态代码块执行顺序

    -----> 先抛结论: 静态代码块先于构造方法执行,创建子类对象时父类静态代码块先于子类静态代码块执行。

    public class PracticeTest03 {
        public static void main(String[] args) {
             Cat cat = new Cat();
        }
    
    }
    class Animal{
        public Animal() {
            System.out.println("Animal的构造方法执行");
        }
    
        static{
            System.out.println("Animal的静态代码块执行");
        }
    }
    class Cat extends Animal{
        public Cat() {
            super();//默认有一个super()方法,会调用父类构造方法
            System.out.println("Cat的构造方法执行");
        }
    
        static {
            System.out.println("Cat的静态代码块执行");
        }
    }
    执行结果:
    			1.Animal的静态代码块执行
    			2.Cat的静态代码块执行
    			3.Animal的构造方法执行
    			4.Cat的构造方法执行
    
    
    
    展开全文
  • 构造代码块 和 静态代码块执行顺序和次数 public class B { public static B t1 = new B(); public static B t2 = new B(); { System.out.println("构造块"); } static { System.out.println("静态块"); }...

    构造代码块 和 静态代码块执行顺序和次数

    public class B {
    	public static B t1 = new B();
    	public static B t2 = new B();
    	{
    		System.out.println("构造块");
    	}
    	static {
    		System.out.println("静态块");
    	}
    
    	public static void main(String[] args) {
    		System.out.println("--------");
    		B b = new B();
    	}
    }
    
    输出结果:
    构造块
    构造块
    静态块
    --------
    构造块
    

    小结:代码执行顺序,先执行静态代码,从上往下依次执行,
    执行第一个static,创建了t1静态对象,执行构造代码块,输出“构造块”;
    执行第二个static,创建了t2静态对象,执行构造代码块,输出“构造块”;
    执行第三个static,静态代码块,输出“静态块”;
    执行住函数,输出“--------”;
    创建b对象,执行构造代码块,输出“构造块”;

    静态代码块只执行一次
    构造代码块创建几次对象执行几次
    
    展开全文
  • Java中构造方法,构造代码块和静态代码块执行顺序详解 前言: 构造方法,构造代码块和静态代码块的执行顺序是一个常见的面试题,精通Java的人都知道执行顺序为:“静态代码块——>构造方法——>构造代码块”,...
  • java静态代码块执行顺序

    千次阅读 2017-03-14 16:39:13
    静态代码块执行顺序测试: A类: public class A { static{ System.out.println("static A"); } { System.out.println("not static A"); } } B类:public class B extends A { static{ System.out....
  • 对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态...
  • 面试小结(关于静态代码块执行顺序) 先上代码: 这里有个A类 public class A{ static{ System.out.println(1); } public A(){ System.out.println(2); } 这里有个B类继承了A类 public ...
  • 静态代码块>mian方法>构造代码块>构造方法。 其中静态代码块执行一次。构造代码块在每次创建对象是都会执行。 1 普通代码块 1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通...
  • 先上代码 public class Test { public static void main(String args[]){ System.out.println("main"); b(); } static int b2 = 8; static Test tee = new Test(); static { System.out.println(...
  • 静态代码块执行顺序是按照写的顺序执行的吗?静态变量的定义和初始化的顺序和静态代码块的顺序有关系吗? 静态代码块的执行先后顺序是什么样的呢? publicclassTest{ static{ cnt=6; } staticintcnt=100...
  • class A { public A(){ System.out.println("A constructor.");...//非静态代码块 { System.out.print("A block-->"); } //静态代码块 static{ System.out.print("A static block-->"); } } cl...
  • 新建一个类,里面含有静态代码块,非静态代码块以及构造函数public class Parent { private final static String TAG = "MainActivity"; static { Log.e(TAG, "父类的静态代码块"); } { Log.e(TAG, "父类的非静态...
  • 理论 静态代码块: ...2. 每创建一个对象,即每载入一个对象,非静态代码块执行一次 静态方法: 1. 被调用,才执行。 2. 静态方法属于类,即加载完类就可以调用 3. 加载完对象,也可以用对象调用的...
  • 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动...
  • public class Father { public static final ... static{ System.out.println("父类静态代码执行了"); } { System.out.println("父类非静态代码执行了"); } Father(){ System.out.println("父类构造方法"); } ...
  • 关于Static代码块执行顺序,应该是面试官必问题之一; 我们写一段代码来具体分析其执行顺序: 调用代码: public class Client { public static void main(String[] args) { Son son = new Son(); son.running...
  • 先给出代码,大家可以先思考一下将会打印什么内容: public class StaticTest { public static void main(String[] args) { staticFunction(); System.out.println("main中b:"+b); } static StaticTest static...
  • 1 class B { 2 3 public B() { 4 super(); 5 System.out.println("构造器B"); 6 } 7 { 8 System.out.println("普通的代码块B"); 9 } 10 static{ 11 ...
  • 父类 package FuZi; public class Fu { public Fu() { ... System.out.println("父类静态代码块,字节码文件加载即执行,只执行一次"); } public void Fathers(){ System.out.println("父类公有方法");

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,973
精华内容 1,589
关键字:

静态代码块执行顺序