精华内容
下载资源
问答
  • 由于静态代码块在加载类的时候就执行了,并且只执行一次,静态方法被存储在方法区的静态域中,所以最先被执行。 静态代码块的作用:静态代码块的作用是初始化类的信息。 静态代码块的定义: static{ }; 注意:...

    请耐心看完,下面有代码解释

    先说执行顺序的结论:

    静态代码块--》构造代码块--》构造方法--》普通代码块

    如果有父类:

    父类静态方法—》子类静态方法—》父类构造代码块—》父类构造方法—》子类构造代码块—》子类构造方法

     

    1.为什么先执行静态代码块?:

    由于静态代码块在加载类的时候就执行了,并且只执行一次,静态方法被存储在方法区的静态域中,所以最先被执行。

    静态代码块的作用:静态代码块的作用是初始化的信息。

    静态代码块的定义:

    static{

    };

    注意:①,如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行。

              ②,在静态代码块可以给未赋值的final staic变量赋值。

    2.第二为什么构造代码块

    首先说一下构造代码块的定义域:

             在类中定义的实例变量以及直接用{}定义的都是构造代码块。

    原因:构造代码块的作用是初始化对象的信息,即对对象属性以及别的初始化。

    3.构造方法为什么第三执行

              原因:构造代码块是对对象初始化,由于类的构造方法是接收类的属性参数,构造代码块是对类进行初始化,那么构造方  法是对类属性的重新赋值,自然应该是在类的构造代码块之后执行。

    4.普通代码块(局部代码块):

              什么是普通代码块呢?

              普通代码块是在类的方法中的代码块是普通代码块。

              为什么普通代码块最后执行呢?

              原因:是类中方法的执行,那么应该是我们创建对象之后,调用类的方法的时候,才执行。而有时候,我们实例化了对      象,并不一定会执行它所有的方法。

    public class  Class1{
    	public static void main(String[] args) {
    		System.out.println("Hello World!");
    		One abc=new One(100);
    	    abc.ne();	
    }		
    }
    class One{
    		int i=10;          //构造代码块
    		static{            //静态代码块                                
    			System.out.println("这是静态代码块");
    		}
    		{                  //构造代码块
    			System.out.println("这是构造代码块");
    		}
    		public One(int i){            //构造方法
    			this.i=i;
    			System.out.println("这是构造函数"+i);
    			}
    		void ne(){                    //方法内的为普通代码块
    			i+=10;
    			System.out.println("这是普通方法代码块"+i);
    			}
    		
    		
    }
    
    
    
    
    	
    	 

    执行结果:

     

     

    如果这篇文章对你有用,请留下一个小小的赞。一起从小白成长

    展开全文
  • java中静态代码块详解

    万次阅读 多人点赞 2019-04-17 18:05:42
    今天在项目中看到这行代码,静态代码块,很久没用静态代码块了...对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。 【是...

    今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一下,

    依旧按照为什么?是什么?怎么用?的思想,去学习。

    【为什么?】

    先说说代码中为什么要使用这种写法吧,

    还记得静态代码块的特点吗?随着类的加载而执行,而且只执行一次

    对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。

     

    【是什么?】

       静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

    静态代码块写法,

    static{

    }

    对应的扩展下非静态代码块

    非静态代码块

    执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。

    写法:

    {

    }

    【怎么用?】

    在类中定义一个静态代码块就行了,然后在里面写对应的代码即可

    【扩展】

    一说到静态代码块,顺便扩展下相应的知识,在面试中可能会被面试官问到,

    静态代码块的执行顺序:静态代码块----->非静态代码块-------->构造函数

    但是面试中,面试官可能会连着其他知识点一起问,比如说继承,这边我就写个小列子,

    父类:

    子类:

    在子类中执行main方法,可以看到控制台打印出来的结果

    如果你想看静态代码块的特征,随着类的加载而执行,而且只执行一次,就在父类中new一个子类就可以看出来了。

    执行父类中的main方法,控制台打印

    然后跟上面的在子类中new一个sons类的结果进行对比,左图是父类执行main方法,右图是子类执行main方法,

    可以看出来,原本在子类中执行main方法,由于子类继承父类,所以父类中的静态代码块优先执行一次,

    但是在左图中,是在父类中执行了main方法,本身父类执行main方法就会执行一次静态代码块,但是在父类中main方法new了一次子类,按继承关系,父类中的静态代码块应该还会执行,但是控制台中却没有打印,这就是因为静态代码块的特征的原因所致,随着类的加载而执行,而且只执行一次

    如果还是不理解,以下代码更为直观

    展开全文
  • 经常说静态代码块先执行…原理如下 ... //是类级别的,只执行一次,编译器自动收集类中所有的static变量和static代码块 //中语句合并而成,编译器收集的顺序是由于程序源码顺序决定 // StaticTest s...

    经常说静态代码块先执行…原理如下

    	public static void main(String[] args) {
    		//为什么所谓的静态代码块先执行,是由于加载类<clinit>类构造方法,
    		//是类级别的,只执行一次,编译器自动收集类中所有的static变量和static代码块
    		//中语句合并而成,编译器收集的顺序是由于程序源码顺序决定
    //		StaticTest staticTest = new StaticTest();	
        }
    

    如下代码:static StaticTest st = new StaticTest();位置不同,执行的顺序依据类加载的不同而不同

    public class StaticTest {
        public static void main(String[] args) {
            staticFunction();
        } 
    //    在类的初始化阶段需要做的是执行类构造器<clinit>(),需要指出的是,
    //    类构造器本质上是编译器收集所有静态语句块和类变量的赋值语句按语句
    //    在源码中的顺序合并生成类构造器<clinit>()。
    //    因此,对上述程序而言,JVM将先执行第一条静态变量的赋值语句:
    //    static StaticTest st = new StaticTest();
    
        {   
        	System.out.println("我是构造代码块,我刚在前面");
        	// 实例代码块
            System.out.println("2");
        }
        //顺序(放在 new 静态实例前后)
        static {  
        	System.out.println("我是静态代码块,我刚在后面");
        	//静态代码块
            System.out.println("1");
        }
    
    
        StaticTest() {    // 实例构造器
            System.out.println("3");
            System.out.println("a=" + a + ",b=" + b);
        }
    
        public static void staticFunction() {   // 静态方法
            System.out.println("4");
        }
    
        int a = 110;    // 实例变量
        static int b = 112;     // 静态变量
        
    //   static StaticTest st = new StaticTest();
    }
    
    1. 初始化阶段是执行类构造器**< clinit >()方法的过程。< clinit >()方法是由编译器自动收集类中的所有类变量(也叫静态变量)的赋值动作静态语句块static{}**中的语句合并产生的。
    2. 编译器收集的顺序是由语句在源文件中出现的顺序所决定的
    3. init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,对非静态变量初始化;而clinit是类构造器方法,也就是在jvm进行类加载—–验证—-解析—–初始化,中的初始化阶段jvm会调用clinit方法。
      参考:https://blog.csdn.net/justloveyou_/article/details/72466105
      大佬的文章真的非常棒,强烈推荐。
    展开全文
  • java静态代码块详解

    2020-11-15 23:14:52
    对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。 【是什么?】 静态代码块:执行优先级高于非静态的初始化块,它会在...

     

    今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一下,

    依旧按照为什么?是什么?怎么用?的思想,去学习。

    【为什么?】

    先说说代码中为什么要使用这种写法吧,

    还记得静态代码块的特点吗?随着类的加载而执行,而且只执行一次

    对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。

     

    【是什么?】

       静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。

    静态代码块写法,

    static{

    }

    对应的扩展下非静态代码块

    非静态代码块

    执行的时候如果有静态初始化块,先执行静态初始化块再执行非静态初始化块,在每个对象生成时都会被执行一次,它可以初始化类的实例变量。非静态初始化块会在构造函数执行时,在构造函数主体代码执行之前被运行。

    写法:

    {

    }

    【怎么用?】

    在类中定义一个静态代码块就行了,然后在里面写对应的代码即可

    【扩展】

    一说到静态代码块,顺便扩展下相应的知识,在面试中可能会被面试官问到,

    静态代码块的执行顺序:静态代码块----->非静态代码块-------->构造函数

    但是面试中,面试官可能会连着其他知识点一起问,比如说继承,这边我就写个小列子,

    父类:

    子类:

    在子类中执行main方法,可以看到控制台打印出来的结果

    如果你想看静态代码块的特征,随着类的加载而执行,而且只执行一次,就在父类中new一个子类就可以看出来了。

    执行父类中的main方法,控制台打印

    然后跟上面的在子类中new一个sons类的结果进行对比,左图是父类执行main方法,右图是子类执行main方法,

    可以看出来,原本在子类中执行main方法,由于子类继承父类,所以父类中的静态代码块优先执行一次,

    但是在左图中,是在父类中执行了main方法,本身父类执行main方法就会执行一次静态代码块,但是在父类中main方法new了一次子类,按继承关系,父类中的静态代码块应该还会执行,但是控制台中却没有打印,这就是因为静态代码块的特征的原因所致,随着类的加载而执行,而且只执行一次

    如果还是不理解,以下代码更为直观

    展开全文
  • java中静态代码块

    2019-10-23 13:40:39
    今天在项目中看到这行代码,静态代码块,很久没用静态代码...对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。 【是什么...
  • 静态代码块是随着类的加载而执行,而且只执行一次 1、作用:可以给类初始化 2、应用场景:类不需要创建对象,但是需要初始化,这时可以将代码写静态 静态方法的调用就是 类名.方法名class Demo{ static void ...
  • 看下面这个例子,这是一个jdis连接池,首先我必须先加载配置文件才能继续其他工作,保证加载配置首先执行,而且静态代码块有一个作用就是随着类的加载而执行,而且只执行一次,我只需要在开始加载配置,而不需要...
  • 初始化块是干什么的呢? 初始化块是为了初始化数据的,也就是说数据赋初值。 什么时候用到初始化块? 每一个对象都对应自己的成员...a、静态初始化块只在对象加载的时候执行,并且只执行一次。 b、静态代码块
  • 静态代码块在类加载的时候执行,而且只执行一次。2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么?构造代码块调用顺序优先于构造方法,和方法的声明位置无关。...
  • A:静态代码块常用来执行类属性的初始化,且执行一次.2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 执行顺序:(优先级从高到低。)静态代码块>mian...
  • 代码块的详细讲解

    2021-05-09 17:36:39
    静态代码块中的代码会在类加载JVM时运行,且会被执行一次 JVM类加载分为5个过程:加载,验证,准备,解析,初始化。 2.什么时候使用静态代码块? 一般情况下,如果有些代码必须在项目启动时就执行,就需要使用...
  • java代码执行顺序详解

    千次阅读 多人点赞 2019-07-15 11:15:19
    静态代码块只执行一次,也就是说你不管创建的多少对象,静态代码只执行一次。 这是为什么啦? 因为static代码块只在类加载时执行,类是用类加载器来读取的,类加载器是带有一个缓存区的,它会把读取到的类缓存起来...
  • 一、关键字static和初始化的关系 我们思考一个问题,为什么会先走static呢?...2、非静态代码块静态代码块同时存在一个类中,这个类被初始化的时候,先执行静态代码块(并且精通代码块只执行一次) ** 如果父类
  • static静态

    2021-01-29 18:57:19
    static 静态方法和类一起加载,可以直接调用 static的主要意义是在于创建独立于具体对象的域变量或者...为什么说static可以用来优化程序性能,是因为它的特性:会在类加载的时候执行一次。因此,很多时候会将一些
  • 写此篇的缘由是由于在一次定义全局变量时,没有意识的去为其添加了static修饰符,以前对于static的理解仅仅停留在“类名.静态方法/变量”的调用上,那么为什么可以如此调用呢,今天就来深入学习一下这个特别的修饰符...
  • static与类加载

    2019-09-20 10:18:49
    2.为什么静态代码块只执行一次? 2.概念 类加载的时机 类加载的全过程是加载、验证、准备、解析和初始化这5个阶段。 那么什么时候需要开始类加载的初始化阶段?这个java虚拟机规范有严格的规定,有且仅有(这句...
  • 静态代码块在类加载时执行,并且只执行一次静态代码块在一个类中可以编写多个,并且遵循自上而下的顺序依次执行。 静态代码块的作用什么?怎么用?用在哪儿?什么时候用? 这当然和具体的需求有关,例如项目中...
  • 静态代码块在类加载时默认会执行一次,并且只执行一次。2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么?构造代码块优先于构造函数的调用。和方法声明的位置无关...
  • 大数据第五天作业

    2016-05-23 15:59:34
    1.文字阐述静态代码块的作用答:静态代码块只在类加载的时候执行一次,可以使用它来初始化资源文件,尤其是那种需一次加载资源文件2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造...
  • 文章目录1.构造方法调用2.包解决的问题2.1 创建2.2使用3.访问修饰符4.static修饰符4.1 修饰变量4.2 ...为什么static块只执行一次?8.注意 1.构造方法调用 调用本类构造,必须用this语句; 位置:必须写在 构造...
  • 当new时,他们的执行顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。 2. Map类有哪些...
  • 第五天作业

    2016-05-14 18:20:41
    静态代码块在类加载时被调用,用于类的初始化,且执行一次2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 构造代码块执行顺序先于构造函数 构造对象时 先...
  • 11.用.net做B/S结构的系统,您是用几层结构来开发,每层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层...
  • java基础第五天

    2016-05-22 22:00:44
    静态代码块在类加载的时候执行,而且只执行一次。2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么?(1)在main函数中创建new对象时,先 调用构造代码快,而后再...
  • 1、static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法。...为什么说static可以用来优化程序性能,是因为它的特性:会在类加载的时候执行一次。因此,很多时候会将一些需要进行一次
  • Java基础-整理

    2021-05-27 06:58:53
    static关键字还有个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且会...
  • 3.1.5 在if语句中使用代码块 86 3.1.6 嵌套的if语句 87 3.1.7 更多的关系运算符 90 3.1.8 逻辑运算符 93 3.1.9 条件运算符 97 3.1.10 运算符的优先级 99 3.2 多项选择问题 103 3.2.1 给多项选择使用else-if...
  • Static存在的意义,static主要意义是在于创建独立的具体对象的域变量或者方法,以至于即使没有创建对象...在类初次被加载的时候,会按照static的顺序来执行每个statci,并且执行一次为什么说static可以...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    2.9 使用Clang静态分析器 50 2.10 针对iPhone进行构建 51 2.10.1 安装开发配置 51 2.10.2 编辑应用程序标识符 51 2.10.3 设置Code Signing Identity 52 2.10.4 编译和运行Hello World应用程序 53 2.10.5 对...
  • 面试黑马题

    2013-08-10 10:10:11
    2.面向对象及举例说明  面向对象的三大特征...4.静态代码块,还有静态的作用,静态代码块的特点:随着类的加载而执行,并且运行一次,用于给类初始化  为什么静态不能访问非静态? 静态优先于对象存在,在有静态的时候,

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 141
精华内容 56
关键字:

静态代码块为什么只执行一次