学习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优化)。

相关推荐
garuda herb1 分钟前
生成专题页Blog--建立并返回 MySQL 数据库连接
python·mysql
ONE_SIX_MIX5 分钟前
qwenpaw-plugin-file-tools QwenPaw增强文件工具 更新 v1.1.1
python·qwenpaw
AOwhisky9 分钟前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
woshihuanglaoshi24 分钟前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
码农学院27 分钟前
GEO与SEO协同:从传统搜索到生成式搜索的平滑迁移路径
服务器·前端·python
程序员羽痕28 分钟前
基于 Django + PyTorch 的中文字体识别系统
pytorch·python·django
灯澜忆梦9 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-9 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-10 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
世人万千丶10 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙