【JAVA学习之路 | 基础篇】类的成员--代码块

简介: 【JAVA学习之路 | 基础篇】类的成员--代码块

1.代码块作用.

(1). 用于初始化类或对象的信息,即初始化类或对象的成员变量.

2.代码块格式

(1). 非静态代码块格式 :

{

        //代码区

}

(2). 静态代码块格式

static {

        //代码区

}

3.使用与区别

(1). 静态代码块 :

  • 随着类的加载而执行.
  • 由于类的加载只会执行一次,故静态代码块的执行,也只会有一次.
  • 作用 : 用来初始化类的信息.
  • 内部可以声明变量,调用属性或方法,编写输出语句等操作.
  • 静态代码块的执行要先与非静态代码块的执行.(只有当类被加载到内存中,才能创造对象)
  • 如果声明有多个静态代码块,则按照声明的先后顺序执行.
  • 静态代码块内部只能调用静态结构(静态的属性或方法),而不能调用非静态的结构(实例的属性或实例方法).

(2). 非静态代码块 :

  • 随着对象的创建而执行.
  • 每创建一个对象,便执行一次非静态代码块
  • 作用 : 初始化对象的信息.
  • 内部可以声明变量,调用属性或方法,编写输出语句等操作.
  • 如果声明有多个非静态代码块,则按照声明的先后顺序执行.
  • 非静态代码块内部可以调用非静态结构,也可以调用非静态结构.(此时类已被加载,故可以调用非静态结构)

4.发现的问题

问题 : (1).static静态代码块中声明的变量并不能用static修饰,否则会报错.

答 : 静态代码块是在类加载的时执行的,静态变量是在类加载时初始化的,如果在静态代码块中使用static修饰变量,会导致变量重复初始化,从而引发错误。

解决 : 可以将变量声明为非静态变量,并在静态代码块中进行初始化。

class Person {
    static {
        int i = 9;
        System.out.println(i);
    }
}

5.代码执行顺序

1.默认复制   ---   2.显式赋值    --3.构造器赋值   --4.代码块赋值   --5.通过对象.方法(set方法)赋值.

执行顺序为  :  1 - 2 / 4 - 3 - 5

public class ExerText {
    public static void main(String[] args) {
        Exer p = new Exer();
        System.out.println(p.i);
        //输出i为5
    }
}
class Exer {
    //显式赋值
    int i = 3;
    //构造器赋值
    public Exer() {
        i = 5;
    }
    //代码块赋值
    {
        i = 9;
    }
}
相关文章
|
3天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
16 1
|
3天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
11 0
java基础(13)String类
|
3天前
|
Java
java的class类
java的class类
15 5
|
3天前
|
Java 数据处理
Java Scanner 类详解
`Scanner` 类是 Java 中 `java.util` 包提供的强大工具,用于从多种输入源(如键盘、文件、字符串)读取数据。本文详细介绍如何创建 `Scanner` 对象并使用其常用方法(如 `next()`, `nextInt()`, `nextLine()` 等)。通过示例代码展示如何从标准输入、字符串及文件中读取数据,并进行输入验证。使用时需注意关闭 `Scanner` 以释放资源,并确保输入类型匹配,避免异常。掌握 `Scanner` 可显著提升程序的数据处理能力。
|
3天前
|
Java 索引
java基础扫盲-String类常用的方法
java基础扫盲-String类常用的方法
|
1月前
|
Java 开发者
奇迹时刻!探索 Java 多线程的奇幻之旅:Thread 类和 Runnable 接口的惊人对决
【8月更文挑战第13天】Java的多线程特性能显著提升程序性能与响应性。本文通过示例代码详细解析了两种核心实现方式:Thread类与Runnable接口。Thread类适用于简单场景,直接定义线程行为;Runnable接口则更适合复杂的项目结构,尤其在需要继承其他类时,能保持代码的清晰与模块化。理解两者差异有助于开发者在实际应用中做出合理选择,构建高效稳定的多线程程序。
46 7
|
1月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
1月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。
|
3月前
|
Java
Java中,有两种主要的方式来创建和管理线程:`Thread`类和`Runnable`接口。
【6月更文挑战第24天】Java创建线程有两种方式:`Thread`类和`Runnable`接口。`Thread`直接继承受限于单继承,适合简单情况;`Runnable`实现接口可多继承,利于资源共享和任务复用。推荐使用`Runnable`以提高灵活性。启动线程需调用`start()`,`Thread`直接启动,`Runnable`需通过`Thread`实例启动。根据项目需求选择适当方式。
48 2
|
2月前
|
Java 开发者