【java】类声明的两种形式

在 Java 中,类的声明有两种形式:

  1. public class Test

  2. class Test

它们的区别主要在于访问权限文件名的要求。下面我会详细解释这两种形式的区别。


1. public class Test

  • 访问权限

    • public 表示这个类是公共的,可以被其他包(package)中的类访问。

    • 如果没有 public,类的访问权限是包级私有(默认),只能被同一个包中的类访问。

  • 文件名的要求

    • 如果一个类被声明为 public,那么它的文件名必须与类名完全相同

    • 例如,public class Test 必须保存在 Test.java 文件中。

  • 使用场景

    • 当你希望这个类被其他包中的类使用时,需要声明为 public
示例

java

复制代码
// 文件 Test.java
public class Test {
    public void sayHello() {
        System.out.println("Hello!");
    }
}

2. class Test

  • 访问权限

    • 如果没有 public,类的访问权限是包级私有(默认),只能被同一个包中的类访问。

    • 其他包中的类无法访问这个类。

  • 文件名的要求

    • 文件名不需要与类名相同。

    • 一个 .java 文件中可以包含多个非 public 类,但只能有一个 public 类。

  • 使用场景

    • 当你希望这个类只在当前包中使用时,可以不声明为 public
示例

java

复制代码
// 文件 MyFile.java
class Test {
    void sayHello() {
        System.out.println("Hello!");
    }
}

class AnotherClass {
    // 其他代码
}

关键区别总结

特性 public class Test class Test
访问权限 公共的,可以被其他包访问 包级私有,只能被同一个包中的类访问
文件名要求 文件名必须与类名相同(Test.java 文件名可以与类名不同
一个文件中的数量 一个文件中只能有一个 public 一个文件中可以有多个非 public
使用场景 需要被其他包中的类访问时使用 只在当前包中使用时使用

举个例子

场景 1:public class Test

java

复制代码
// 文件 Test.java
public class Test {
    public void sayHello() {
        System.out.println("Hello!");
    }
}
  • 这个类可以被其他包中的类访问。

  • 文件名必须是 Test.java

场景 2:class Test

java

复制代码
// 文件 MyFile.java
class Test {
    void sayHello() {
        System.out.println("Hello!");
    }
}

class AnotherClass {
    // 其他代码
}
  • 这个类只能被同一个包中的类访问。

  • 文件名可以是 MyFile.java,不需要与类名相同。


总结

  • public class Test

    • 类是公共的,可以被其他包访问。

    • 文件名必须与类名相同。

  • class Test

    • 类是包级私有的,只能被同一个包中的类访问。

    • 文件名可以与类名不同。

选择哪种形式取决于你的需求:

  • 如果类需要被其他包访问,使用 public class

  • 如果类只在当前包中使用,使用 class

相关推荐
极客先躯2 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图
用户60648767188962 小时前
AI 抢不走的技能:用 Claude API 构建自动化工作流实战
java
我命由我123452 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
aXin_ya2 小时前
微服务第八天 Sentinel 四种分布式事务模式
java·数据库·微服务
Halo_tjn2 小时前
Java Set集合相关知识点
java·开发语言·算法
Linsk3 小时前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
许彰午3 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
zhouwy1133 小时前
Java 快速入门笔记:从基础语法到 Spring Boot 实战
java
极创信息3 小时前
信创产品认证怎么做?信创产品测试认证的主要流程
java·大数据·数据库·金融·软件工程
SamDeepThinking4 小时前
并发量就算只有2,该上锁还得上呀
java·后端·架构