学习Java39天

包 (Package)

一、包的基本概念

  • 定义 :包本质上是文件系统中的文件夹 ,用于对Java类进行分门别类的管理。

  • 作用

    1. 组织与管理:将功能相似或相关的类组织在一起,结构清晰。

    2. 避免命名冲突:不同包中可以存在同名类。

    3. 访问控制 :与访问权限修饰符(public, protected, 默认, private)结合,提供不同级别的访问保护。

    4. 便于维护:项目规模扩大时,良好的包结构能使代码更易理解和维护。

二、包名的命名规范

遵循 "公司域名反写 + 项目/模块名 + 功能分类" 的原则。

  • 全部英文小写

  • 见名知意

  • 使用点 . 分隔层级,对应文件系统的目录结构。

  • 示例

    • com.google.android.utils (Google公司的Android项目工具类包)

    • org.apache.commons.io (Apache Commons项目的IO工具包)

    • cn.itcast.student.manager (传智播客的学生管理模块)

三、导包 (Import) 规则

当在一个类中使用另一个包中的类时,需要明确类的来源。

情况 是否需要导包 (import) 示例
使用同一个包下的类 不需要 com.example.A 类中使用 com.example.B
使用 java.lang 包下的类 不需要 String, System, Math
使用不同包下的类 需要 com.test.Main 中使用 java.util.Date
使用同名类(来自不同包) 不能直接导包,必须使用全类名 同时用到 java.sql.Datejava.util.Date

全类名 (Fully Qualified Name) :包名 + 类名。例如:java.util.Scanner

示例

java

复制代码
package com.example.ui;

// 导包:使用不同包下的类
import java.util.ArrayList;
import java.util.Scanner;

// 使用同名类:必须使用全类名
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());

public class Main {
    public static void main(String[] args) {
        // 同一包下的类,无需导包
        Helper helper = new Helper();
        
        // java.lang 包下的类,无需导包
        String str = "Hello";
        
        // 导包后使用
        Scanner sc = new Scanner(System.in);
        ArrayList<String> list = new ArrayList<>();
    }
}

final 关键字

final 意为"最终的",可以修饰方法变量

一、修饰类

  • 含义 :被 final 修饰的类称为 最终类

  • 特点不能被继承(没有子类)。

  • 目的:防止类被修改或扩展,保证类的安全性和稳定性。

  • 常见示例String 类、System 类、Scanner 类等都是 final 类。

java

复制代码
final class MyFinalClass {
    // 类内容
}
// class SubClass extends MyFinalClass {} // 编译错误!不能继承final类

二、修饰方法

  • 含义 :被 final 修饰的方法称为 最终方法

  • 特点不能被重写 (Override)

  • 目的:防止子类修改该方法的实现,锁定方法行为。

  • 注意 :一个类如果是 final 的,那么它的所有方法都隐式地是 final 的(因为无法被继承)。

java

复制代码
class Parent {
    public final void show() {
        System.out.println("这是最终方法,不能被子类改变");
    }
}
class Child extends Parent {
    // @Override
    // public void show() {} // 编译错误!不能重写final方法
}

三、修饰变量(常量)

  • 含义 :被 final 修饰的变量称为 常量 (Constant)

  • 核心规则只能被赋值一次,之后值不能再改变。

1. 常量的命名规范
  • 单个单词 :全部大写,如 MAX_VALUE, PI

  • 多个单词 :全部大写,单词间用下划线 _ 连接,如 MAX_SPEED, FILE_PATH

  • 目的:提高代码可读性,一眼就能识别出是常量。

2. 常量在开发中的应用

常量的值通常在程序运行期间不会改变,常用作:

  • 系统配置信息:数据库连接字符串、文件路径、默认配置等。

  • 数学或物理常量:π、光速等。

  • 状态码或标志位:成功/失败代码。

  • 好处:集中管理,一处修改,全局生效;避免魔法数字,提高代码可维护性。

java

复制代码
public class AppConfig {
    // 系统配置常量
    public static final String DB_URL = "jdbc:mysql://localhost:3306/mydb";
    public static final int MAX_CONNECTIONS = 100;
    
    // 业务常量
    public static final int ORDER_STATUS_PENDING = 0;
    public static final int ORDER_STATUS_PAID = 1;
}
3. final修饰变量的细节(非常重要)
变量类型 final的作用 示例与说明
基本数据类型变量 存储的数据值不能改变 final int x = 10; x = 20; // 编译错误!
引用数据类型变量 存储的地址值(引用)不能改变 ,但对象内部的状态可以改变 final Student s = new Student("张三"); s = new Student("李四"); // 错误!不能改变引用 s.setName("王五"); // 正确!可以修改对象属性

引用类型final的示例

java

复制代码
class Person {
    private String name;
    public Person(String name) { this.name = name; }
    public void setName(String name) { this.name = name; }
    public String getName() { return name; }
}

public class Test {
    public static void main(String[] args) {
        final Person p = new Person("Alice");
        
        // p = new Person("Bob"); // 编译错误!不能改变p指向的地址
        
        // 但可以修改p所指向对象的内部状态
        p.setName("Cathy"); // 这是允许的!
        System.out.println(p.getName()); // 输出:Cathy
        
        final int[] arr = {1, 2, 3};
        // arr = new int[]{4,5,6}; // 错误!不能改变引用
        arr[0] = 100; // 正确!可以修改数组元素
        System.out.println(arr[0]); // 输出:100
    }
}

四、final 使用总结

  1. final 类:安全、稳定、无需考虑继承的类。

  2. final 方法:锁定方法实现,防止被意外修改。

  3. final 变量

    • 局部常量:在方法内部使用。

    • 成员常量 :必须在声明时初始化 或在所有构造方法中初始化

    • 静态常量 :通常与 static 结合使用,如 public static final

  4. 设计思想final 体现了"不变性"的设计,能增强代码的安全性、可预测性和性能(便于JVM优化)。

相关推荐
曲幽2 小时前
FastAPI搭档Pydantic:从参数验证到数据转换的全链路实战
python·fastapi·web·path·field·query·pydantic·basemodel·response_model
Reenrr2 小时前
C++学习
开发语言·c++·学习
望忆2 小时前
关于《SaviorRec: Semantic-Behavior Alignment for Cold-StartRecommendation》的学习
学习
进阶小白猿2 小时前
Java技术八股学习Day18
java·开发语言·学习
丝斯20112 小时前
AI学习笔记整理(49)——大模型应用开发框架:LangChain
人工智能·笔记·学习
saoys2 小时前
Opencv 学习笔记:循环读取文件夹中图片并动态展示
笔记·opencv·学习
Halo_tjn2 小时前
基于Java的相关知识点
java·开发语言·windows·python·算法
ghostmen2 小时前
SpringBoot + Vue 实现 Python 在线调试器 - 技术方案文档
java·python·vue·springboot
草原上唱山歌3 小时前
推荐使用的C++ IDE
开发语言·c++·ide