【java】静态代码块

静态代码块

  • 格式:

    static

    {

    静态代码块中的执行语句

    }

  • 特点:

    随着类的加载而执行,只执行一次,用于给类进行初始化,并优先于主函数执行

    考虑如下java语句

class StaticCode
{
    static
    {
        System.out.println("a");
    }
}
public class Demo {
    static
    {
        System.out.println("b");
    }
    public static void main(String[] args)
    {
        new StaticCode();
        new StaticCode();
        System.out.println("end");
    }
    static
    {
        System.out.println("c");
    }
  
}

输出结果为:

b

c

a      <==虽然有两个调用StaticCode的语句,但是因为其中只包含静态代码块,而静态代码块只执行

一次,所以只输出一个a

end

只有涉及到类中的内容的时候,类才会加载,静态代码块才会执行

StaticCode m = null;   <==类没有被加载

s = new StaticCode();  <==类被加载了,因为用到了类中的构造函数StaticCode(),所以静态代码块

会被执行

所以判断一个类有没有被加载,可以用静态代码块来验证

class StaticCode
{
    StaticCode()
    {
        System.out.println("c");
    }
    static
    {
        System.out.println("a");            I
    }
    
    {
        System.out.println("b");            II
    }
    
    StaticCode(int x)
    {
        System.out.println("hah");          III
    }
    
    public static void test()
    {
        System.out.println("succeed");
    }
}
public class Demo {
    
    public static void main(String[] args)
    {
        new StaticCode(5);
    }
    
  
}

I    -----  静态代码块给类进行初始化

II   -----  构造代码块给对象进行初始化

III  -----  构造函数给对应对象进行初始化

输出结果:

a

b

hah

注意:静态代码块只可以访问静态变量

构造代码块可以访问到

时间: 2024-11-13 12:33:43

【java】静态代码块的相关文章

Java静态代码块、构造代码块、构造方法的执行顺序

Java静态代码块.构造代码块.构造方法的执行顺序 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法

java基础--java静态代码块和静态方法的区别、static用法

转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化) 静态方法:需要在项目启动的时候就初始化,在不创建对象的情况下,这种代码是被动执行的(静态方法在类加载的时候 就已经加载 可以用类名直接调用) 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 使用类的静态方

Java静态代码块,扫盲贴

一个类可以使用不包含在任何方法体中的静态代码块.当类被载入时,静态代码块被执行,且只执行一次.导致类被载入的操作包括:使用任何类的静态属性或方法,新建类的对象(声明类的对象不会导致静态代码块被执行).静态代码块经常用来进行类属性的初始化.请看下面的测试: class Person { public Person() { System.out.println("1.public Person()"); } static { System.out.println("2.Perso

Java静态代码块和非静态代码块、类加载、构造对象的机制

温故而知新,代码块这东西时间一长一些东西容易忘记,比如静态代码块.非静态代码款.静态成员变量初始化.动态成员变量初始化.构造方法调用.类加载等等的顺序机制是怎么样的? 话不多说了,一个例子足以说明一切: package com.collectiontest; import org.junit.Test; public class BasicTest { @Test public void testBlock() { System.out.println("m1:"); Mimi m1=

Java静态代码块

static{ //代码 } 在加载类的时候,会执行静态代码块-->非静态代码块--->构造函数 http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html http://www.cnblogs.com/o-andy-o/archive/2011/12/28/2304959.html

JAVA 静态代码块的简单运用

package Code504;/*静态代码块的格式:public class 类名称{ static { //静态代码块的内容 }}特点:当第一次使用本类时,静态代码块执行唯一的一次. */public class CodeStatic { public static void main(String[] args) { CodePerson one = new CodePerson(); CodePerson two = new CodePerson(); }}创建一个类↓ 代码运行↓ 根据

JAVA静态代码块的作用及执行顺序

一般情况下,如果有些代码必须在项目启动的时候就执行,需要使用静态代码块.这种代码是主动执行的,需要在项目启动的时候就初始化. 有些代码是在不创建对象的情况下,由其他程序来调用,需要使用静态方法.这种代码是被动执行的. 静态方法在类加载的时候就已经加载,可以用类名直接调用 比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的,而静态方法是被调用的时候才执行的. 区别很简单:静态代码块,在虚拟机加载类的时候就会加载执行,而且只执行一次:非静态代码块,在创建对象的时候(

Java静态代码块、代码块及构造函数执行顺序

根据以下程序进行分析 定义一个父类 package sas.LearnJava; public class ExcuteOrderTest { { System.out.println("我是在父类开始的普通代码块!"); } public ExcuteOrderTest() { System.out.println("我是父类的无参构造函数!"); } public void showSomething() { System.out.println("我

关于Java静态代码块、初始化块、构造函数的调用顺寻问题?

public class ClassA { public ClassA(){ System.out.println("A 构造..."); } { System.out.println("this is A...."); } static{ System.out.println("A static..."); } } public class ClassB extends ClassA{ public ClassB(){ System.out.p

java静态代码块 类加载顺序问题。

class B extends Object { static {System.out.println("Load B");} public B(){System.out.println("Create B");} } class A extends B { static {System.out.println("Load A");} public A(){ System.out.println("Create A");} }