所谓代码块是指用{}括起来的一段代码,根据其位置和声明的不同,可以分为普通代码块、构造块、静态块、和同步代码块。如果在代码块前加上synchronized关键字,则此代码块就成为同步代码块
普通代码块(本地代码块)
定义在方法里面用{ }括起来的代码块(凡是用{ }括起来都叫代码块,只是没有细分),就是普通代码块,也叫本地代码块。(不多见,也不常用)
例如:
public class Test {
    public static void main(String[] args){
        {
            System.out.println("本地代码块!");    
        }
    }
}构造块(实例代码块)
实例代码块定义在类的内部,方法的外部,可以初始化实例的成员
例如:
class Student{
    //成员变量
    public String name;
    public int score;
    //类变量
    public static String classes = "火箭6班";
    //类方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正确
        System.out.println("类方法");
    }
    //成员方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //实例代码块
    {
        this.name = "jay";
        System.out.println("实例代码块!");
    }
}静态块(静态代码块)
静态代码块定义在类的内部,方法的外部,可以初始化实例的成员
例如:
class Student{
    //成员变量
    public String name;
    public int score;
    //类变量
    public static String classes = "火箭6班";
    //类方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正确
        System.out.println("类方法");
    }
    //成员方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //实例代码块
    {
        System.out.println("实例代码块!");
    }
    //静态代码块
    static{
        classes = "16班";
        System.out.println("静态代码块!");
    }他们之间有什么关系呢
例子
情况一:看如下代码会执行什么?
class Student{
    //成员变量
    public String name;
    public int score;
    //构造方法
    public Student(){
        System.out.println("构造方法!");
    }
    //类变量
    public static String classes = "火箭6班";
    //类方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正确
        System.out.println("类方法");
    }
    //成员方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //实例代码块
    {
        System.out.println("实例代码块!");
    }
    //静态代码块
    static{
        System.out.println("静态代码块!");
    }
}
public class Test {
    public static void main(String[] args){
        Student stu = new Student();
    }
}情况一运行结果:
情况二:看如下代码会执行什么?
class Student{
    //成员变量
    public String name;
    public int score;
    //构造方法
    public Student(){
        System.out.println("构造方法!");
    }
    //类变量
    public static String classes = "火箭6班";
    //类方法
    public static void fun1(){
        Student stu = new Student();
        stu.name = "jay";           //正确
        System.out.println("类方法");
    }
    //成员方法
    public void fun2(String name, int score){
        this.name = name;
        this.score = score;
    }
    //实例代码块
    {
        System.out.println("实例代码块!");
    }
    //静态代码块
    static{
        System.out.println("静态代码块!");
    }
}
public class Test {
    public static void main(String[] args){
        System.out.println(Student.classes);
    }
}情况二运行结果:
分析
- 他们执行的顺序是:静态代码块 -> 实例代码块 -> 构造方法(不论代码块的位置在哪,都是这个顺序!若有多个静态,看定义顺序即可)
 - 只要加载了类,静态代码块就会被执行
 - 若没有实例化对象只会执行静态的
 - 若有多个实例,须看定义顺序
 - 如果没有实例化对象,静态代码块只会执行一次
 
到此这篇关于Java浅析代码块与构造块及静态块三者之间的关系的文章就介绍到这了,更多相关Java 代码块 构造块 静态块内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:Java浅析代码块与构造块及静态块三者之间的关系
				
        
 
            
        
             猜你喜欢
        
	     - 深入了解Spring的事务传播机制 2023-06-02
 - ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
 - SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
 - Java中的日期时间处理及格式化处理 2023-04-18
 - JSP 制作验证码的实例详解 2023-07-30
 - JSP页面间传值问题实例简析 2023-08-03
 - Springboot整合minio实现文件服务的教程详解 2022-12-03
 - 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
 - Java实现顺序表的操作详解 2023-05-19
 - Spring Security权限想要细化到按钮实现示例 2023-03-07
 
						
						
						
						
						
				
				
				
				