java代码块的用法

简介: java代码块的用法

代码块


1 代码块的概念及其分类


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


分类:代码块有以下四种:


普通代码块

构造块/实例代码块

静态代码块

同步代码块(后续会讲)


本篇文章主要讲解实例代码静态代码块


2 实例代码块


2.1 概念及其定义方式


概念:定义在类中的代码块(不加修饰符)称之为实例代码块。


class Student{
    int age;
    String name;
    { }
}


上面那段代码的第五行就定义了一个实例代码块,实例代码块可用于初始化实例成员。


例如:


class Student{
    int age;
    String name;
    {
        age = 18;
        name = "李四";
    }
    public void fun(){
        System.out.println(name+" "+age);
    }
}
public class Test1 {
    public static void main(String[] args) {
        Student student = new Student();
        student.fun();
    }
}


上段代码在实例代码块中对成员变量age和name进行了初始化并打印。


注意:实例代码块只有在创建对象时才会执行。


3 静态代码块


3.1 概念及其定义方式


概念:使用static定义的代码块称为静态代码块。


定义方式:静态代码块可以通过以下方式定义:


class Student{
    int age;
    String name;
    static String classes;
    static {
        classes = "三班";
        System.out.println(classes);
    }
}
public class Test1 {
    public static void main(String[] args) {
        Student student = new Student();
    }
}


下面的6-9行段代码(如下)就定义了一个静态代码块。


static {
        classes = "三班";
        System.out.println(classes);
    }


注意:


1.静态代码块可用于初始化静态成员变量,但是不能访问非静态成员。例如:


class Student{
int age;
String name;
static String classes;
static {
  classes = "三班";
  System.out.println(classes);
  age = 18;
}
}
public class Test1 {
public static void main(String[] args) {
  Student student = new Student();
}
}


这段代码的第8行就会报错。


2.若一个类中含有多个静态代码块,则按其定义的先后顺序执行。


class Student{
 int age;
 String name;
 static String classes;
 static {
     System.out.println("这是第一个静态代码块");
 }
 static {
     System.out.println("这是第二个静态代码块");
 }
}
public class Test1 {
 public static void main(String[] args) {
     Student student = new Student();
 }
}


执行结果如下:


234538bcd69c8f3d12183f98370135bf_e533079a30b444e9a9d021456085c369.png


4 用法注意点:


注意:


1.当一个类中同时出现了静态代码块,实例代码块,构造方法,那么这三者的执行顺序是:静态代码块>实例代码块>构造方法,与其定义的前后顺序无关。


例如:


class Student{
 int age =18;
 String name = "李四";
 public void set(int age,String name)
 {
     this.age  = age;
     this.name =name;
 }
 static
 {
     System.out.println("这是第一个静态代码块");
 }
 {
     System.out.println("这是一个实例化代码块");
 }
 public Student(int age)
 {        
     System.out.println("这是一个打印年龄的构造方法");
 }
}
public class Test1 {
 public static void main(String[] args) {
     Student student = new Student(17);  
 }
}


运行结果:


01aed512446a02580c7f57983a84b2f9_3ad07fbce39643e59b3c08a346178ada.png


当我们改变这三者的定义的前后顺序,我们会发现,其运行结果相同。


2.静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的。


3.静态代码块不管生成多少个对象,其只会执行一次。


例如:


class Student{
 int age =18;
 String name = "李四";
 public void set(int age,String name)
 {
     this.age  = age;
     this.name =name;
 }
 static
 {
     System.out.println("这是第一个静态代码块");
 }
 static{
     System.out.println("这是二个静态代码块");
 }
 {
     System.out.println("这是一个实例化代码块");
 }
 {
     System.out.println("这是二个实例化代码块");
 }
 public Student(int age)//
 {
     this("李四");//用于调用另一个构造方法
     System.out.println("这是一个打印年龄的构造方法");
 }
 public Student(String name){
     System.out.println("这是一个打印名字的构造方法");
 }
}
public class Test1 {
 public static void main(String[] args) {
     Student student = new Student(17);
     Student student1 = new Student(17);       
 }
}


运行结果:


08815bae87cf2c12f6c351fe6d16c1ed_730f7cb997f248bbad431c08475aa3b9.png


当我们第一次创建对象时,两个静态代码块的内容都执行了,但是,当我们第二次创建对象时,并没有再次执行静态代码块中的内容,可见:静态代码块不管生成多少个对象,其只会执行一次。

本章的内容就到这里啦,若有不足,欢迎评论区指正,最后,希望大佬们多多三连吧,下期见!


相关文章
|
4月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
67 12
|
23天前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
|
1月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
24 3
|
2月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
|
2月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
|
2月前
|
安全 Java
Java switch case隐藏用法
在 Java 中,`switch` 语句是一种多分支选择结构,常用于根据变量值执行不同代码块。除基本用法外,它还有多种进阶技巧,如使用字符串(Java 7 开始支持)、多个 `case` 共享代码块、不使用 `break` 实现 “fall-through”、使用枚举类型、使用表达式(Java 12 及以上)、组合条件以及使用标签等。这些技巧使代码更加简洁、清晰且高效。
|
3月前
|
Java 数据处理
Java IO 接口(Input)究竟隐藏着怎样的神秘用法?快来一探究竟,解锁高效编程新境界!
【8月更文挑战第22天】Java的输入输出(IO)操作至关重要,它支持从多种来源读取数据,如文件、网络等。常用输入流包括`FileInputStream`,适用于按字节读取文件;结合`BufferedInputStream`可提升读取效率。此外,通过`Socket`和相关输入流,还能实现网络数据读取。合理选用这些流能有效支持程序的数据处理需求。
46 2
|
3月前
|
Java 程序员 API
从代码中寻找平衡:’java代码块和具体的代码应用
Java 8 引入的 Lambda 表达式是一项革命性特性,使编写简洁、灵活且易维护的代码成为可能。Lambda 表达式作为一种匿名函数,支持任意数量参数和返回值,其基本语法为 `(parameters) -> expression` 或 `(parameters) -> { statements; }`。
36 0
|
3月前
|
Java
【Java】代码块
【Java】代码块
|
4月前
|
Java
java中return,break以及continue的用法
java中return,break以及continue的用法
47 10