【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;
    }
}
相关文章
|
11天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
30 10
|
14天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
43 4
|
14天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
24 4
|
14天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
39 1
|
2月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
3月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
87 8
|
3月前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
43 3
|
Java 程序员 Go
Java基础6:代码块与代码加载顺序
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/80069472 这位大侠,这是我的公众号:程序员江湖。
|
28天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
85 17
|
2月前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者