栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

有关代码块的知识你真的了解吗?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有关代码块的知识你真的了解吗?

本篇主要介绍Java中的类与对象中 的代码块


‍作者: 初入编程的菜鸟哒哒
系列文章目录:

一、TvT——JavaSE(1)–Java的数据类型与变量
二、TvT——JavaSE(2)–Java的运算符
三、TvT——JavaSE(3)–Java的逻辑控制
四、TvT——JavaSE(4)–Java方法的使用
五、你真的学会了JavaSE中数组的定义与使用吗?
六、Java中的类与对象来袭
七、类与对象有关static成员的知识你真的了解吗?


刷题笔记:
1️⃣TvT——C语言进阶の刷题【1】:指针进阶


文章目录
  • 前言
  • 杻代码块
    • 1. 代码块概念以及分类
    • 2. 普通代码块
    • 3. 构造块
    • 4. 静态代码块
    • 5. 静态代码块的执行顺序
  • 总结

前言

大家记得联系上一篇博客一起学习。

Java中的类与对象来袭

杻代码块

1. 代码块概念以及分类

使用 {} 定义的一段代码称为代码块。

根据代码块定义的位置以及关键字,又可分为以下四种:

  • 普通代码块(本地代码块)

  • 构造块(实例代码块)

  • 静态块(静态代码块)

  • 同步代码块(后续讲解多线程部分再谈)

2. 普通代码块
  • 普通代码块(本地代码块)
public static void main(String[] args) {
        {
            System.out.println("这就是一个代码块");
        }
    }
3. 构造块
  • 构造块(实例代码块)

实例代码块定义在类的内部,方法的外部。
实例代码块内部可以初始化成员变量。

 class Student {
     public String name;
    public double score;
     public int age;
 
     public Student (String name,double score,int age) {
         this.name = name;
         this.age = age;
         this.score = score;
     }
     
     {
         this.name = "11";
         System.out.println("实例代码块");
     }
     
     public void goname(Student this) {
         System.out.println(this);
     }
      }
4. 静态代码块
  • 静态块(静态代码块)

静态代码块一般用于初始化静态成员。

class Student {
    public String name;
    public double score;
    public int age;
    public  static String classes  = "2001";

    public Student (String name,double score,int age) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    public void upClass(Student this) {
        System.out.println("普通方法");
        classes = "2002";
    }
    static
    {
        System.out.println("静态代码块");
    }
    public void goname(Student this) {
         System.out.println(this);
     }
}

5. 静态代码块的执行顺序

当我们执行下面这个代码时:

class Student {
    public String name;
    public double score;
    public int age;
    public  static String classes  = "2001";

    public Student (String name,double score,int age) {
        this.name = name;
        this.age = age;
        this.score = score;
        System.out.println("这是一个构造函数");
    }
    
    {
        System.out.println("实例代码块");
    }

    static
    {
        System.out.println("静态代码块");
    }
    
    public static void goname() {
        int name1 = 3;
        System.out.println("静态方法成员"+name1);
    }
}
public class Test {
    public static void main(String[] args) {
        Student student4 = new Student("4",99,17);
    }
    
}

❓ 以我们之前所学的知识来看,运行结果是不是应该只打印这是一个构造函数呢?

那运行一下看看结果:

我们发现结果并不是我们想象的那样。

那我们就可以得出结论:

加了代码块之后先加载静态代码块,再执行实例代码块,再执行构造方法。

❓ 那我们再来探讨一下,静态代码块和静态成员变量谁先执行呢?

class Student {
    public String name;
    public double score;
    public int age;
    public  static String classes  = "2001";

    public Student (String name,double score,int age) {
        this.name = name;
        this.age = age;
        this.score = score;
        System.out.println("这是一个构造函数");
    }
    
    {
        System.out.println("实例代码块");
    }

    static
    {
        classes = "2003";
        System.out.println("静态代码块");
    }
    
    public static void goname() {
        int name1 = 3;
        System.out.println("静态方法成员"+name1);
    }
}
public class Test {
    public static void main(String[] args) {
       System.out.println(Student.classes);
    }
    
}

结果是这样的:

规则是:

看定义的顺序,谁先定义谁先执行。

执行顺序总结:

  1. 先执行静态的(加载了类就会被执行)

  2. 如果有多个静态的,那么看定义顺序

  3. 如果没有实例化对象,那么只会执行静态的。(静态的只会执行一次)
    可以看见只执行了一次。

  4. 实例的数据(有多个实例要看定义的顺序)

  5. 构造函数执行


最后的注意事项:

  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并(这个你只要记住是从上往下执行的就行了,不容易弄混)
  • 实例代码块只有在创建对象时才会执行
总结

本篇到此结束
“莫愁千里路,自有到来风。”
我们顶峰相见!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号