关于构造代码块、局部代码块和静态代码块的作用和区别

构造代码块:

  直接在类中定义且没有加static关键字的代码块称为{}构造代码;

  作用:给对象统一初始化数据

public class Demo1 {
    public static void main(String[] args) {
        Test test = new Test(3);  //构造代码块会在构造函数被调用时执行, 且在这个例子中比"this.id=id;"语句先执行,作用是给对象统一初始化数据;
        System.out.println(test);
    }
}

class Test{
    int id;
    String name;

    {
        this.id= 5;
        this.name = "测试";
        System.out.println("这是构造代码块");
    }

    Test(int id){
        this.id = id;
    }

    public String toString(){

        return "name: "+this.name +"  ,   "+"id: "+ this.id ;

    }
}

构造代码块注意点:
  1:java编译器编译java类时,会先将成员属性的声明放到类的前端

  2:成员变量的初始化工作放到构造函数中

  3:如果类中有构造代码块,java编译器在编译时会先将构造代码块中的代码移到构造函数中执行,
         构造函数中原有的代码最后执行
       
  4:成员属性的初始化和构造代码块的执行顺序是根据原码中的位置执行

局部代码块:

在函数中的代码块、

作用:在方法中,如果要缩短变量的寿命,可以使用

     方法中,某段代码之后,都不再使用某个变量(这个变量有可能是一个很大的Map集合,很占内存),则可以将其定义到局部代码块中,及时结束其生命周期,释放空间!

public class Demo1 {
    public static void main(String[] args) {
        Test test = new Test();
        test.run();
    }
}

class Test{
    int id;
    String name;

    void run(){

        {

            for(int i = 0;i < 3; i++){
                System.out.println(i);
            }

            System.out.println("我是局部代码块,变量i出了局部代码块就没有任何作用");
        }

        System.out.println("我是普通函数");
    }

}

静态代码块:

在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
public class Demo1 {
    public static void main(String[] args) {

        new Test();

    }
}

class Test{
    int id;
    String name;

    static{
        System.out.println("我是静态代码块");
    }

}
时间: 2024-10-07 04:17:30

关于构造代码块、局部代码块和静态代码块的作用和区别的相关文章

java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数

一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构 Cat继承Animal Runner里包含main函数,程序入口 Sing类主要用来打印执行顺序的序列号 二.代码 public class Animal { Sing s1=new Sing(1,"animal\tnot static field"); static Sing s2=new Sing(2,&q

构造函数,构造代码块和静态代码块的先后顺序和运用

在自学到java面向对象时,知道有静态代码块,构造代码块和构造函数的存在,如果说构造函数是初始化对象,那么其他2者又是怎么使用,又有什么区别呢.简单的举了下面的例子: 1 package 面向对象; 2 3 class Child 4 { 5 private String country; 6 private String name; 7 Child(String name)//构造函数. 8 { 9 this.name=name; 10 System.out.println(this.name

浅析Java中的构造代码块、静态代码块与构造方法

构造代码块.静态代码块与构造方法是三种不同的代码块,那么他们到底有什么区别呢? 一.简单认识一下构造代码块.静态代码块与构造方法 class A { //构造代码块 { System.out.println("构造代码块A"); } //静态代码块 static { System.out.println("静态代码块A"); } //构造方法 public A() { System.out.println("构造方法A"); } } 二.弄清三者

Java构造器,构造代码块,静态代码块的执行顺序

构造器 与类同名且没有返回值,用来初始化类属性: 构造器又分为无参构造器和有参构造器 1.1:无参构造器 public class Contruction{ //...属性... public Contruction(){}//无参构造器,不写,系统会自动添加 } 1.2:有参构造器 public class Contruction { private int i; public Contruction( int i){ /*有参构造器,如果你定义了一个有参数的构造器, 那么你在实例化对象的时候

两个案例,解读静态代码块和构造代码块

一.对静态代码块和非静态代码块进行简单的总结 1.静态代码块: 静态代码块是在当类被载入(内存)时最先被调用的,且之被执行一次,静态块常用来执行类属性的初始化.执行类的载入之前就会调用. 2.非静态代码块: 非静态代码块是在当类的对象被创建载入(内存)时最先被调用的,每创建一个对象,即每载入一个对象,非静态代码块都执行一次.执行类对象的载入之前就会调用. 3.静态方法.非静态方法:都是调用时,才执行的.静态方法属于类的,加载完类就可以调用静态方法:非静态方法是属于对象的,加载完对象就可以调用非静

关于java中普通代码块、构造代码块与静态代码块

1.普通代码块 public static void main(String[] args) { /*普通代码块: *直接定义在在方法或语句中出现”{普通代码的执行语句}“的就称为普通代码块. *普通代码块执行顺序由他们在代码中出现的次序决定--“先出现先执行” * */ { System.out.println("这里是普通代码块A"); } //new A(); { System.out.println("这里是普通代码块B"); } } 执行结果:这里是普通代

Java中的静态代码块和构造代码块

最近一在回顾Java中的一些知识,这里跟大家一起学习一下静态代码块,和构造代码块. 首先,代码就是巴拉巴拉一些定义呀,赋值啊,运算的一些java代码,用两个大括号括起来,就变成了神奇的代码块 { a=3; } static{ b=4; } 就像上面那个样子. 括号加了static修饰就变成了静态代码块,大家记住哦,只要加了static这个东西只后,后面那个东东就是静态的,而且只能操作静态的东东. 比如静态方法,静态变量,静态指针,当然java里没有指针. 然后我用了一个小代码去理解这两个概念,上

Java中普通代码块,构造代码块,静态代码块的代码示例及区分

//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 <span style="font-size:12px;">//普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行" public class CodeBlock01{ public static

构造函数,静态代码块,构造代码块

一.对静态代码块和非静态代码块进行简单的总结 1.静态代码块: 静态代码块是在当类被载入(内存)时最先被调用的,且之被执行一次,静态块常用来执行类属性的初始化.执行类的载入之前就会调用. 2.非静态代码块: 非静态代码块是在当类的对象被创建载入(内存)时最先被调用的,每创建一个对象,即每载入一个对象,非静态代码块都执行一次.执行类对象的载入之前就会调用. 3.静态方法.非静态方法:都是调用时,才执行的.静态方法属于类的,加载完类就可以调用静态方法:非静态方法是属于对象的,加载完对象就可以调用非静

JavaSE8基础 类中代码块与构造函数的执行顺序 静态代码块(only) -&gt; 构造代码块 -&gt; 构造方法

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) 代码: /* 静态代码块(only) -> 构造代码块 -> 构造方法 */ class Test { static{ //静态代码块中 System.out.println("静态代码块的代码执行,只执行一次"); } { System.out.println("构造代码块中的代码执行"