精华内容
下载资源
问答
  • Java中普通代码块和static代码块的区别。

    在类中用{}包起来,但是没有用static标识的就是普通代码块,比如:

    public class Test{
        {
            System.out.println("I am ordinary code block!");
        }
    }

    用static标识的代码块就是静态代码块,比如:

    public class Test{
        static {
            System.out.println("I am static code block!");
        }
    }

    再讲解它俩的区别时,我们先看个例子:

    public class Test{
        {
            System.out.println("I am ordinary code block!");
        }
        static {
            System.out.println("I am static code block!");
        }
        public static void main(String[] args) {
        }
    }

    这个例子会打印出什么东西呢?
    答案是:

    I am static block!

    我们修改一下main方法:

        public static void main(String[] args) {
            Test s = new Test();
        }

    再看执行结果:

    I am static code block!
    I am ordinary code block!

    普通代码块执行了,并且在static(静态)代码块执行之后执行,虽然static代码块在普通代码块之后,可以看出,static是在类加载时执行,并且只执行一次,而普通代码块是在类初始化时执行,当然也只是执行一次。
    那么是不是static代码块都会执行呢?
    并不是,这个就看类加载机制是否加载到这个类,比如我们虽然定义了一个类,我们的代码执行期间从来没有用过这个类的信息,即使我们用了类的静态变量,也不会触发static(静态代码块)的执行。
    举个例子:
    Base类:

    public class Base {
       static {
          System.out.println("super class init!");
       }
       public static final int VALUE =100;
    }

    main方法所在的类:

    public class Main {
        public static void main(String[] args) {
            System.out.println(Base.VALUE);
        }
    }

    打印结果:

    100

    有人会问,我们的main方法不是有Base.value这段代码么,这样Base类就被加载了么?
    实际上不是这样的,JVM为了执行效率高,会把静态变量直接插入代码执行代码中,而不会真正通过静态变量所在的类进行查找,这样,减少查找的过程,大大提高了代码的执行效率,感兴趣的可以看下JVM的内存模型。
    总结一下:
    1. 静态(static)代码块是在类加载阶段执行。
    2. 普通代码块只有在类第一次被初始化时才执行。
    3. 所以静态(static)代码块肯定是在普通代码块执行之前执行。
    4. 某些条件静态(static)代码不一定会执行,只有当静态(static)代码块所在的类被加载时,才执行。

    展开全文
  • static代码块、static变量、非static方法和构造器执行顺序 Java类的生命周期分为:装载、链接、初始化、使用、卸载。Java中经过static 修饰的成员有:静态常量,静态变量, 静态方法 ,还有就是静态代码块。 static...

    static代码块、static变量、非static方法和构造器执行顺序


    Java类的生命周期分为:装载、链接、初始化、使用、卸载。Java中经过static 修饰的成员有:静态常量,静态变量, 静态方法 ,还有就是静态代码块。

    1. static修饰的成员是跟着类走的,普通方法和成员变量是跟随对象走的。当类编译加载完成后还不一定存在对象,即还没有创建对象呢,这个时候其实static相关的东西已经初始化完成可以直接使用,因为static常量、static变量、static代码块都是在类“初始化”阶段的时候就分配好内存初始化成功了,而普通的变量和方法是在类的生命周期中的“使用”阶段才创建。静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。静态代码块不能包含this或者super,它们通常被用初始化静态变量。

    1. 静态关键字static和静态代码块、局部代码快、构造代码块简介: https://blog.csdn.net/u011809714/article/details/49495931

    1. 执行顺序:
      父类的静内容—>子类的静态内容—>父类非静态代码块—>父类构造器—>
      子类非静态代码块—>子类构造器。

    总结:

    1. static相关的东西在Java类的生命周期中是在“初始化”阶段就开始初始化所以比非静态的东西先执行。
    2. 非静态的东西在Java类的生命周期中是在“使用”阶段创建了对象使用的时候才执行所以肯定在静态相关的东西之后执行。
    3. 静态代码块和静态变量的执行顺序是根据代码书写的先后顺序执行的,尽量把静态变量书写在静态代码块之前。
    4. 非静态代码块是在构造器之前先执行的,经常用来对对象做一些公共的初始化操作。static 静态变量和静态代码块的执行顺序请参考:https://blog.csdn.net/a22422931/article/details/54669508
    展开全文
  • static代码块的执行时间

    千次阅读 2019-01-19 23:55:14
    执行static代码块  * 3. 初始化非static变量  * 4. 父类无参构造函数  * 5. 子类构造函数  *   * 6. 直接调用类的静态方法执行顺序是:  * 1)初始化static变量  * 2)执行static代码块  * 3)执行静态方法 ...

    /**
     * 对象初始化过程:
     * 1. 初始化static变量
     * 2. 执行static代码块
     * 3. 初始化非static变量
     * 4. 父类无参构造函数
     * 5. 子类构造函数
     * 
     * 6. 直接调用类的静态方法执行顺序是:
     *    1)初始化static变量
     *    2)执行static代码块
     *    3)执行静态方法  
     * 
     * @author yan
     *
     */

    展开全文
  • Static代码块(静态代码块)

    千次阅读 2019-08-20 10:06:56
    静态代码块的格式是: public class 类名称{ static{ //静态代码块的内容 } } 特点:当第一次用到本类时,静态代码块执行唯一的一次 静态内容总是优先于非静态,所以静态代码块比构造方法先执行 静态...

    静态代码块的格式是:

    public class 类名称{
    
    static{
    //静态代码块的内容
    
    	}
    }
    

    特点:当第一次用到本类时,静态代码块执行唯一的一次
    静态内容总是优先于非静态,所以静态代码块比构造方法先执行

    静态代码块的典型用途:
    用来一次性地对静态成员变量进行赋值

    package Demo03;
    
    public class Demo04Static {
    	public static void main(String[] args) {
    		
    		Person one = new Person();
    		
    		Person two = new Person();	
    	}
    }
    

    Person类

    package Demo03;
    
    public class Person {
    	
    	static{
    		System.out.println("静态代码块被执行!");
    	}
    	
    	public Person(){
    		System.out.println("构造方法执行!");
    	}
    
    }
    

    效果图:在这里插入图片描述

    展开全文
  •  那么在使用hibernate创建一个工具类(HibernateUtils),用于获取Session对象时需要将其放在static代码块中,  又因下边的每个方法需要使用SessionFactory对象sf,所以将其单独拆出放在方法外。 static代码块...
  • static代码块——初始化数据的利器

    千次阅读 2018-07-19 18:58:53
    在项目中用到了kafka来生产消息、消费消息,无论是生产还是消费,都需要配置对应的配置文件,而且需要在项目启动时,就去读取配置...如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个...
  • static代码块何时执行

    千次阅读 2015-10-11 20:32:05
    之前一直纠结类中static代码块什么时候执行,很多java开发者都回答在类装载时执行,也有人认为是在类第一次被使用时执行,直到看到了这篇文章: http://www.cnblogs.com/ivanfu/archive/2012/02/12/2347817.html 先...
  • 有时候需要在类加载时设定几个类的静态参数,我们可以在类的static代码块中给予赋值。在赋值过程中可能会访问项目路径下的config配置文件。 项目路径如下 我需要在Dao类里面加载resource/config.properties文件...
  • 为什么static代码块先执行,然后把数据给faceTexts? ![图片说明](https://img-ask.csdn.net/upload/201508/10/1439139889_347463.png) ![图片说明]...
  • java 理解static代码块的作用

    千次阅读 2014-11-12 12:05:04
    static代码块一般用于初始化类中的静态变量,该静态代码块在类加载过程中的初始化阶段执行,并且只执行一次。 使用static静态代码块进行初始化与直接在定义变量的时候初始化效果是一样的,但是它们的先后顺序...
  • 实现线程安全的单例设计模式的三种方式:... 使用static代码块实现线程安全 ---------------------------------------------------------------------------------------------------------------------------------...
  • Java中Static代码块与构造方法的初始化顺序是怎么样的呢? 举个例子,也是笔试题常考的一类题目。三个Class,分别是ClassA,ClassB,ClassC,其中B继承自A,C继承自B。public class ClassA { static{ System.out....
  • static代码块在什么时候执行

    千次阅读 2019-10-31 11:00:27
    一、误区:简单认为JAVA静态代码块在类被加载时就会自动执行。证错如下: class MyClass1 { static {//静态块 System.out.println("static block "); } } public class Main { Class[] classArray = { MyClas...
  • Java中static代码块,main函数,构造函数运行顺序 在
  • @Service public class AirService implements InitializingBean {... public static final Logger logger = LoggerFactory.getLogger(AirService.class); public static List<Integer> toBeUsedLis...
  • 如题,如果该类,如A, 在入口程序或者整个执行栈过程中,都不出现,那么A中的static成员变量,或者static代码块,都不会执行。static的方法更是只有在调用的时候,才会执行。 一般顺序:静态块----> 静态变量...
  • 一、[b]java类中 static静态代码块的执行次数[/b] 1、在类加载的init阶段,类的类构造器中会收集所有的static块和字段并执行,static块只执行一次,由JVM保证其只执行一次。 2、[b]直接看示例[/b] [code="...
  • } } 配置文件: 静态代码块读取配置文件: static { try { String participates = PropertiesUtil.getConfig("participates"); } catch (Exception e) { LOG.error("加载配置出错:{}", e.getMessage()); } }
  • 下面代码:public class Son{ Father father = new Father(); static{ System.out.println("Son static"); } public Son(){ System.out.println("Son()"); } }public class Father {
  • 关于static代码块只执行一次的问题

    千次阅读 2014-10-07 19:45:52
    今天编写AI程序时遇到一个问题,关键代码如下 public class Auto{ static Cell[][] temp = new Cell[Tetris.ROWS][Tetris.COLS]; static{ try{ temp = (Cell[][])Tetris.wall.clone(); }catch(Exception...
  • 1.jvm加载StaticBlock的main方法前,要看SubClass中是否有静态的变量和语句,如果有,先给这些静态的变量分配存储空间和执行静态语句(不是静态方法),且由于SubClass的父类中也有静态的变量,根据继承的特性,则先...
  • Static静态代码块以及各代码块之间的执行顺序

    万次阅读 多人点赞 2019-10-16 19:56:49
    在Java中,Static静态代码块、构造代码块、普通代码块、构造函数的执行顺序是一个java学习者必须掌握的基础,本篇博客旨在让大家能清除了解它们之间的执行顺序。 文章目录代码块的分类1、静态代码块(也叫静态块、...
  • static静态代码块加载和执行

    千次阅读 2018-09-14 11:02:49
    静态代码块,非静态代码块,无参构造,有参构造,这些代码片段分别在什么时候加载执行? 1.父类Father package com.java4all.test10; public class Father { static { System.out.println("father的静态...
  •  static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。  被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说...
  • static 块以及代码块执行顺序

    千次阅读 2016-03-16 16:17:03
    static块,普通代码块,构造代码块执行顺序
  • java静态代码块static {}的用法

    千次阅读 2016-08-11 11:05:54
    是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码...
  • Java和Android中,代码块static静态代码块的执行顺序有没有什么区别呢。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 558,882
精华内容 223,552
关键字:

static代码块