静态、构造、局部代码块 构造方法

总结


一、静态代码块(最大优先级)
  • 静态代码块随着【类】的加载而执行,且只执行一次(至于类什么时候加载,这是一个高深的问题)
  • 静态代码块的作用:给【类】,而非对象,进行初始化
  • 在Java工程的入口类中,静态代码块优先于 public static void main(String[] args)  函数执行
二、构造代码块与构造函数:
  • 构造代码块是和构造函数同级的用 { } 包起来的一个代码块
  • 构造函数每执行一次(即new一个对象),构造代码块就运行一次
  • 构造代码块总是优先于构造函数而执行,有多个构造代码块时,相互之间是按代码块的位置顺序先后执行的
  • 构造函数是给对象进行针对性的初始化(有参或无参)的,而构造代码块是给所有对象进行通用初始化(无参)的
  • 个人觉得不建议使用构造代码块,如果有需要,完全可以用构造函数去实现相应逻辑,这样结构更清晰
三、局部代码块:
  • 作用:控制变量的生命周期,基本没啥用
  • 在程序中,若当我们已经使用完 x 并且在接下来的代码中不会再用到x,那么就没必要再让 x 在内存中占用空间了,这种情况下,可以将 x 及其所涉及到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。
  • 注意:在局部代码块中定义的变量在后面不能再使用,但若是在局部代码块前面定义的变量,在局部代码块zhon

测试代码




public class Test {

    static {

        System.out.println("Test中的静态代码块");//1

    }

    public static void main(String[] args) {

        {

            int x = 5;//此变量仅在局部代码块内部可用

            System.out.println("Test中的局部代码块");//2

        }

        System.out.println("**************************");

        System.out.println(Person.country);//4。没有创建对象,只会加载Person中的静态代码块

        Person.show();//静态代码块仅加载一次

        System.out.println("**************************");

        new Person().speak();//创建了对象,会先调用构造代码块

        System.out.println("**************************");

        System.err.println(new Person("我是旺财").name);//每次创建对象都会调用构造代码块

    }

}

//*************************************************************************************

class Person {

    public static String country = "Person的静态成员变量";

    public String name;

    public int age;

    public void cry() {

        System.out.println("构造代码块1中调用的方法");

    }

    public void speak() {

        System.out.println("Person的普通方法");

    }

    public static void show() {

        System.out.println("这是一个静态方法");

    }

    //构造代码块:给所有对象进行初始化,每产生一个对象就运行一次。这个不是很建议使用,因为可能会忽视它的存在。

    {

        System.out.println("Person的构造代码块1");

        cry();

        age = 0;

    }

    //构造函数:给对象进行针对性的初始化

    public Person() {

        this("我是白乾涛");

    }

    public Person(String name) {

        this.name = name;

    }

    //构造代码块会根据位置按顺序执行

    {

        System.out.println("Person的构造代码块2");

    }

    //静态代码块:随着类的加载而执行,无论放在哪,都优先执行,而且只执行一次。

    static {

        System.out.println("Person的静态代码块");//3

    }

}  

来自为知笔记(Wiz)

时间: 2024-08-06 20:07:42

静态、构造、局部代码块 构造方法的相关文章

Java中的局部代码块、构造代码块、静态代码块

局部代码块: 作用:控制变量的生命周期: 在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失. 表现形式,以代码体现如下: class TestDemo { public static void main(String[] args) { { int x = 9; System.out.println(x); } Sy

静态代码块,构造代码块,局部代码块演示

public class Test{ static int num; static int numObj;//记录有多少个对象产生! static{//静态代码块, 是用来给类进行初始化的! //num = 10; ++num; num *=12;//没有进入静态代码块之前,num的初始化值是0 System.out.println(num); //main(null);//静态代码块中可以调用main, 想一想也是, 大家都是静态的嘛! } //先执行构造代码段, 然后指行构造函数 {//这叫

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

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

【code block】局部代码块+构造代码块+静态代码块

1.局部代码块 位置:位于类的方法中 表示方法:{} 作用:控制变量的生命周期,减少内存消耗 demo: public class LocalCode { public static void main(String [] args){ int y = 10; { int x = 20; System.out.println(x); } System.out.println(y);//运行到此时x变量已被垃圾收集 } } 2.构造代码块 位置:位于类中 表示方法:{} 作用:用于给每个对象进行初

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

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("构造代码块中的代码执行"

java中静态代码块(static{...}),局部代码块(方法中{...}),构造代码块(类中{...})区别。

1.局部代码块: 格式:在方法中{局部代码块执行语句} 局部代码块,又叫普通代码块.它是作用在方法中的代码块. 作用:是控制变量的生命周期. 在程序中当我们定义完成一个局部变量x之后,并且在接下来的代码中,不想再用到它时,那么就没必要让x在内存中继续占用空间.因此就有了局部代码块. 2.构造代码块: 格式:在类中{构造代码块执行语句} 作用:就是给所有对象进行初始化. 注意几点: 1)每次创建对象他都会执行. 2)构造代码快是优于构造函数执行. 3)构造代码块与构造函数的区别是:构造代码块是给所

构造代码块/局部代码块/静态代码块

构造代码块 直接在类中定义且没有加static关键字的代码块称为{}构造代码; 作用:给对象统一初始化数据 例子:随处可见: Test test = new Test(6); 局部代码块 典型例子:while/ for循环 静态代码块 典型例子:单例设计模式中,喜欢用这个作为控制外界进行创建新实例的反面例子(因为只要调用基类里面的方法,这个静态代码块都要被调用,加了private也毫无意义)! private static Singleton instance = new Singleton()

局部代码块和构造代码块

局部代码块 1 package com_package2; 2 3 public class Person3Demo { 4 public static void main(String[]args) 5 { 6 Person3 p = new Person3(); 7 p.speak(); 8 Person3 p1 = new Person3("hejinjin",23); 9 p1.speak(); 10 Person3 p2 = new Person3("hejinji

面试趣闻之java 代码块 静态代码块 构造方法 执行顺序

初级程序员总会遇到这样的问题,代码块 静态代码块 构造方法 执行顺序 父类 public class ClassSup { public ClassSup(){ System.out.println("父类构造器"); } static { System.out.println("父类静态代码块"); } { System.out.println("父类代码块"); } public void mathod01(){ System.out.pri