Java的包、final关键字以及代码块

server/2024/11/26 21:29:36/

Java的包、final关键字以及代码块

一、包

包的作用

​ 包就是文件夹,用来管理各种不同功能的Java类

包名的书写规则

​ 公司域名反写 + 包的作用,需要全部英文小写,见名知意

什么是全类名

​ 包名 + 类名

使用其他类的规则

  • 使用同一个包中的类时,不需要导包(import + 包名)
  • 使用java.lang包(java的核心包)中的类时,不需要导包
  • 其他情况都需要导包
  • 如果同时使用两个包中的同名类,需要用全类名

二、final关键字

final 关键字在 Java 中具有多种用途,具体来说:

  • final修饰方法:最终方法,不能被重写
  • final修饰类:最终类,不能被继承
  • final修饰变量:是常量,不能被修改
    • 基本数据类型:变量的值不能修改
    • 引用数据类型:地址值不能修改,内部的属性值可以修改

1.修饰变量

  • 当一个变量被声明为 final,它的值一旦被赋值后就不能再更改。对于基本数据类型,这意味着它的值不可变;对于引用数据类型,它的引用不可变,但可以修改引用的对象的内容。
java">public class test {private final static int P = 5;// 相当于c语言中的宏定义public static void main(String[] args) {// 基本数据类型:变量的值不能修改final double PI = 3.145926;// PI = 3.14;  报错,final修饰则无法更改// 引用数据类型:地址值不能修改,内部的属性值可以修改final int[] arr = {1, 3, 6, 4, 9, 10};arr[2] = 100;arr[4] = 200;for (int i : arr) {System.out.println(i);}final Student s = new Student("小明", 20);System.out.println(s.getName() + ", " + s.getAge());s.setName("王五");System.out.println(s.getName() + ", " + s.getAge());}
}

2.修饰方法

  • final 修饰的方法不能被子类重写。这样可以保护方法的实现,确保其行为不会被改变。
java">class Base {final void show() {System.out.println("Final method in Base");}
}class Derived extends Base {// void show() { // 编译错误,不能重写 final 方法//     System.out.println("Trying to override");// }
}

3.修饰类

  • final 修饰的类不能被继承。这确保了类的实现不被改变,适用于某些设计模式或需要严格控制类的场合。
java">final class FinalClass {// 类的实现
}// class AnotherClass extends FinalClass { // 编译错误,不能继承 final 类
// }

final修饰出的常量:

​ 在实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性

常量的命名规范

  • 单个单词:全部大写
  • 多个单词:全部大写,单词之间用下划线隔开

细节

  • final修饰的变量是基本数据类型:那么变量存储的数据值不能发生改变
  • final修饰的变量是引用数据类型:那么变量存储的地址值不能发生改变,对象内部的可以改变

三、代码块

  • 局部代码块
  • 构造代码块
  • 静态代码块

局部代码块:

​ 写在方法里面的代码块,提前结束变量的生命周期,且局部代码块里面的变量也就只能在局部代码块里面使用(用于节约内存,目前不怎么使用)

java">public static void main(String[] args) {{int a = 10;System.out.println(a);}// System.out.println(a); 会报错
}

构造代码块:

​ 是在一个类中写在成员位置的代码块,当要创建本类对象时,它则会 优先于构造方法执行,因此可以把多个构造方法重复的代码写在构造代码块

java">public class Student {private String name;private int age;// 构造代码块:// 1.写在成员位置的代码块// 2.作用:可以把多个构造方法中重复的代码抽取出来// 3.执行时间:我们再创建本类对象时会先执行构造代码块再执行构造方法{System.out.println("准备创建类了");}public Student() {System.out.println("空参构造");}public Student(String name, int age) {this.name = name;this.age = age;System.out.println("全参构造");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}class Test {public static void main(String[] args) {// 创建对象Student s = new Student();Student s2 = new Student("张三", 20);}
}

输出为结果

在这里插入图片描述

目前构造代码块也不怎么使用了,面对构造方法中重复的代码则可以用以下两个方法取代它:

  • 使用this关键字
java">public class Student {private String name;private int age;public Student() {this(null, 0);System.out.println("空参构造");}public Student(String name, int age) {System.out.println("开始创建对象了");this.name = name;this.age = age;System.out.println("全参构造");}
}
  • 调用外部的方法
java">public class Student {private String name;private int age;public Student() {调用方法();System.out.println("空参构造");}public Student(String name, int age) {调用方法();this.name = name;this.age = age;System.out.println("全参构造");}
}

静态代码块:

格式static{}

特点:需要通过 static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次

使用场景:在类加载的时候,做一些数据初始化的时候使用(例:在一个平台登录时刚开始只执行一次登录或注册操作,之后的一些功能可以重复出现)

定义与执行时机

  • 静态代码块在类被加载到 JVM 时执行,并且只会执行一次。它在所有的构造函数和实例初始化块之前运行。

示例

java">class Example {static {// 静态代码块System.out.println("Static block executed.");}public Example() {System.out.println("Constructor executed.");}public static void main(String[] args) {new Example();new Example();}
}

在这个例子中,静态代码块会在 main 方法之前执行,只会输出一次 “Static block executed.”,而构造函数会在每次创建对象时执行。

用途

  • 初始化静态变量:可以用来初始化类的静态变量。
  • 执行一些逻辑:可以用来执行一些需要在类加载时运行的逻辑,比如读取配置文件、注册驱动等。

可以有多个静态代码块

  • 如果类中有多个静态代码块,它们的执行顺序是从上到下的。
java">class Example {static {System.out.println("First static block.");}static {System.out.println("Second static block.");}public static void main(String[] args) {// 输出顺序将是:// First static block.// Second static block.}
}

与实例代码块的区别

  • 实例代码块在创建对象时执行,每次创建对象都会执行,而静态代码块只在类加载时执行一次。

http://www.ppmy.cn/server/137805.html

相关文章

录屏天花板,录课新玩法,人像+一切,PPT/PDF/视频/网页,也可即可录

上新啦 📱💻 录屏也能录课的万能神器——超级推荐! 你是不是也在找一款能高效录屏、录课、轻松剪辑的小工具?作为一名需要频繁录制屏幕和课程内容的老师(或内容创作者),我找到了这个宝藏App&…

青少年编程与数学 02-003 Go语言网络编程 02课题、网络分层模型

青少年编程与数学 02-003 Go语言网络编程 02课题、网络分层模型 课题摘要:一、网络分层模型(一)OSI七层模型(Open Systems Interconnection Model)(二)TCP/IP四层模型(Transmission Control Pro…

Gorilla Mk1机器人:CubeMars电机加持,助力高空作业新突破

在澳大利亚输电网络的高空作业领域,一款由Crest Robotics研发的创新机器人正悄然改变着工作方式。这款名为Gorilla Mk1的机器人,凭借先进的技术和精密的动力系统,在高压输电线路的维护和检修作业中提供了前所未有的安全性和高效性。而这背后&…

Docker | 通过commit操作实例来认识镜像底层实现的原理以及学会打包镜像

镜像底层实现的原理 docker 镜像镜像是什么?分层的镜像UnionFS(联合文件系统)为什么Docker镜像要采用这种分层结构呢?打包镜像 docker commit ⭐⭐ubuntu安装vim docker 镜像 镜像是什么? 是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容&…

Java/Springboot使用iText生成PDF

iText是一个用于创建和操作PDF文档的Java库。 常见使用步骤和示例如下&#xff1a; 1. 添加依赖 如果使用Maven项目&#xff0c;在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</ar…

HTML鼠标移动的波浪线动画——页面将会初始化一个Canvas元素,并使用JavaScript代码在Canvas上绘制响应鼠标移动的波浪线动画

代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Wave Animation</title><style&…

用sdcc给51单片机编译C程序

学习单片机大部分人用的是Keil uVision&#xff0c;虽然好用&#xff0c;可大部分人用的是盗版&#xff0c;其实单片机程序小的话&#xff0c;完全可以用文本编辑器&#xff08;推荐notepad)编写&#xff0c;然后用免费的sdcc来编译&#xff0c;下面介绍一下大致的过程。 sdcc…

Python单元测试:`unittest`框架详解

unittest是Python标准库中的一个单元测试框架&#xff0c;它是基于Java的JUnit框架开发的。unittest支持自动化测试&#xff0c;设置和关闭代码以供测试&#xff0c;聚合测试到集合中以及独立的测试脚本运行。 unittest的主要特点 测试用例&#xff1a;通过继承unittest.Test…