代码块01-Java

news2024/11/24 21:01:33

代码块01

  • 一、介绍
  • 二、语法
  • 三、好处
    • 举例
  • 四、使用细节
  • 五、练习
    • 题1
    • 题2

一、介绍

代码块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过包围起来。

但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。

二、语法

	[修饰符] {
		代码
	};
	
	注意:修饰符可选,要写的话,也只能写static
  1. 修饰符可选,要写的话,也只能写static。
  2. 代码块分为两类,使用static修饰的叫静态代码块,没有static修饰的,叫普通代码块。
  3. 逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断等)
  4. 分号 ; 号可以写上,也可以省略。

三、好处

  1. 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操作。
  2. 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
  3. 代码块调用的顺序优先于构造器

举例

代码块的快速入门 CodeBlock01.java

class Movie {
    private String name;
    private double price;
    private String director;
    //  三个构造器->构成重载

    public Movie(String name) {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
        this.name = name;
    }

    public Movie(String name, double price) {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
        this.name = name;
        this.price = price;
    }

    public Movie(String name, double price, String director) {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
        this.name = name;
        this.price = price;
        this.director = director;
    }
}

可以看到在每一个构造器中都有同样的代码
把相同的语句放在一个代码块中即可

    {
        System.out.println("电影屏幕打开……");
        System.out.println("广告开始……");
        System.out.println("电影正式开始……");
    }
    //这样不管调用哪一个构造器创建对象,都会先调用代码块
    public Movie(String name) {
        System.out.println("public Movie(String name)");
        this.name = name;
    }

    public Movie(String name, double price) {
        System.out.println("public Movie(String name, double price)");
        this.name = name;
        this.price = price;
    }

    public Movie(String name, double price, String director) {
        System.out.println("public Movie(String name, double price, String director)");
        this.name = name;
        this.price = price;
        this.director = director;
    }

在这里插入图片描述

(1) 不管调用哪个构造器创建对象,都会先调用代码块
(2) 代码块调用的顺序优先于构造器

四、使用细节

见上篇

五、练习

做题前先看代码块的使用细节。

题1

下面的代码输出什么?

class Person {
	public static int total;
	static {
		total = 100;
		System.out.println("in static block!");
	}
}

public class Test {
	public static void main(String[] args) {
		System.out.println("total = "+Person.total);
		System.out.println("total = "+ Person.total);
	}
}

我的答案:
in static block!
total = 100
total = 100

正确。
在这里插入图片描述

分析:① 直接访问类的静态成员(变量和方法)会使得类加载。类加载的时候静态代码块&静态变量初始化会执行。
② 静态代码块只在类加载的时候执行一次。

题2

public class CodeBlockExercise02 {
    public static void  main(String  str[])
    {
        Test a = new Test();//无参构造器
    }
}

class Sample
{
    Sample(String s)
    {
        System.out.println(s);
    }
    Sample()
    {
        System.out.println("Sample默认构造函数被调用");
    }
}
class Test{
    Sample sam1=new Sample("sam1成员初始化");//
    static Sample sam=new Sample("静态成员sam初始化 ");//
    static{
        System.out.println("static块执行");//
        if(sam==null)System.out.println("sam is null");
    }
    Test()//构造器
    {
        System.out.println("Test默认构造函数被调用");//
    }
}

我的答案:
(类加载)
静态成员sam初始化
static块执行
(new)
sam1成员初始化(普通变量)
Test默认构造函数被调用(构造器)

正确。
在这里插入图片描述

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1258441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZKP15.1 Secure ZK Circuits via Formal Methods

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) Motivation Bugs in blockchain software are extremely dangers and costly.Smart Contract Bugs, Blockchain Protocol Bugs,…

OSError: symbolic link privilege not held报错解决

本人情况介绍 本人在复现某个代码的时候,需要安装开源代码已经封装好的setup.py代码。具体安装的库具体如下。 fairseqpython3.6.0pytorch1.6.0File2ROUGE 在安装fairseq的时候遇见了如下问题。 Installing build dependencies … done Getting requirements to …

使用 Redis Zset 有序集合实现排行榜功能(SpringBoot环境)

目录 一、前言二、Redis Zset 的基本操作三、通过Redis 命令模拟排行榜功能3.1、排行榜生成3.2、排行榜查询 四、SpringBoot 使用 Redis Zset 有序集合实现排行榜功能 一、前言 排行榜功能是非常常见的需求,例如商品售卖排行榜单、游戏中的积分排行榜、配送员完单排…

原创文章生成器-批量原文高质量伪原创

在信息爆炸的时代,创作者们面临的挑战愈发严峻。写一篇原创文章,不仅需要脑洞大开,还得担心自己的文字是否能够迎合读者口味。原创文章生成器只需输入标题或关键词,即可轻松生成原创文章。而与此同时,147SEO改写软件也…

FLASK博客系列8——我也有后台管理

上次我们学习了如何往数据库里插入数据,显示我们自己的文章。 有些朋友可能会问,django有后台管理,插入不用这么麻烦,那flask有类似的吗?当然有,而且还挺多的。今天我们就用一个最常用的包来完成 flask-adm…

数据库系统原理与实践 笔记 #10

文章目录 数据库系统原理与实践 笔记 #10存储管理与索引(续)数据字典存储系统元数据的关系表示 数据缓冲区存储访问缓冲区管理器缓冲区替换策略 顺序索引基本概念索引技术评价指标顺序索引稠密索引稀疏索引索引多级索引辅助索引主索引与辅助索引多码索引 B树索引B树索引文件B树…

机器学习的复习笔记2-回归

一、什么是回归 机器学习中的回归是一种预测性分析任务,旨在找出因变量(目标变量)和自变量(预测变量)之间的关系。与分类问题不同,回归问题关注的是预测连续型或数值型数据,如温度、年龄、薪水…

如何通过内网穿透实现远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

mysql文本类型的最大长度限制

mysql支持很多类型&#xff0c;不同的文本有不同的长度限制。可以根据实际需要进行选择。 TINYBLOB, TINYTEXT L 1 bytes, where L < 2^8 (255 Bytes) BLOB, TEXT L 2 bytes, where L < 2^16 (64 Kilobytes) MEDIUMBLOB, MEDIUMTEXT L 3 b…

怎样禁止邮件发送附件

入侵电子邮件并获取其承载信息成为网络攻击的主要目标之一&#xff0c;因此&#xff0c;掌握基本的电子邮件安全常识显得尤为重要。 “涉密不上网&#xff0c;上网不涉密”是国家秘密安全底线&#xff0c;电子邮件作为互联网应用之一&#xff0c;绝不能存储、传输涉密信息和敏感…

Docker-简介、基本操作

目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…

骑行三家村赏红杉之旅:挑战与汗水共存,美景和惊喜同行的路线

2023年11月25日&#xff0c;一个冬日里阳光明媚的周末&#xff0c;校长骑行队的骑友们相约&#xff0c;共同踏上了骑行三家村赏红杉林的旅程。这次骑行路线从大观公园门口开始&#xff0c;途径大观湿地公园、干勾尾、碧鸡关加油站、太平、水沟盖板路、明朗、绝望坡、山顶、三家…

SWT技巧

实现控件的刷新 问题可以简化如下&#xff0c;点击上方按钮&#xff0c;使下方按钮移动&#xff0c;但要求在监听事件里新建按钮对象&#xff0c;而不是使用原来的按钮&#xff08;原来的按钮被移除了&#xff09;。 解决代码如下&#xff1a; public class TestUI {protecte…

阻塞队列及简单实现,生产者消费者模型

文章目录 阻塞队列阻塞队列是什么生产者消费者模型阻塞队列的实现 阻塞队列 阻塞队列是什么 阻塞队列是一种特殊的队列. 也遵守 “先进先出” 的原则. 当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素当队列空的时候, 继续出队列也会阻塞, 直到有其他线…

B 树和 B+树 的区别

文章目录 B 树和 B树 的区别 B 树和 B树 的区别 了解二叉树、AVL 树、B 树的概念 B 树和 B树的应用场景 B 树是一种多路平衡查找树&#xff0c;为了更形象的理解。 二叉树&#xff0c;每个节点支持两个分支的树结构&#xff0c;相比于单向链表&#xff0c;多了一个分支。 …

边缘计算网关:智能制造的“智慧大脑”

一、智能制造的崛起 随着科技的飞速发展&#xff0c;智能制造已经成为了制造业的新趋势。智能制造不仅能够提高生产效率&#xff0c;降低生产成本&#xff0c;还能够实现个性化定制&#xff0c;满足消费者多样化的需求。然而&#xff0c;智能制造的实现离不开大量的数据处理和分…

警惕!AI正在“吞食”你的数据

视觉中国供图 □ 科普时报记者 陈 杰 AI大模型的热度&#xff0c;已然开始从产业向日常生活渗透&#xff0c;并引起不小的舆论旋涡。近日&#xff0c;网友指出国内某智能办软件有拿用户数据“投喂”AI之嫌&#xff0c;引发口水的同时&#xff0c;再度把公众对AI的关注转移到数…

AWR294x收发器的干扰抑制(TI文档)

摘要&#xff1a; AWR294x收发器是一种集成的片上雷达设备&#xff0c;不仅具有RF&#xff0c;模拟和ADC电路&#xff0c;而且在芯片上还有许多处理器核。它有一个专门的雷达信号处理加速器(称为硬件加速器或HWA)&#xff0c;具有能够探测和减缓雷达-雷达干扰的特点。本文档介绍…

MySQL死锁,死锁产生的4个必要条件,死锁案例, 如何避免死锁

文章目录 MySQL死锁了怎么办&#xff08;死锁的产生及解决方案&#xff09;&#xff1f;1、 死锁与产生死锁的四个必要条件1.1 什么是死锁1.2 死锁产生的4个必要条件 2、死锁案例2.1 表锁死锁2.2 行锁死锁2.3 共享锁转换为排他锁 3、死锁排查4、 如何避免死锁5、死锁的排查6、 …

抖音餐饮门店点餐外卖小程序作用是什么

餐饮从业商家、各种餐品饮料线下门店众多&#xff0c;随着线上订餐、团购、预约、点餐等方式发展&#xff0c;线下门店经营痛点明显&#xff0c;不少商家选择搭建餐饮门店小程序一方面是品牌传播拓客及提升服务效率&#xff0c;另一方面则是赋能客户完善消费及覆盖进店前后路径…