包如何为 类 和接口提供安全性?

How packages provide security for classes and interfaces?

在阅读 java 中的软件包时,我发现了

中软件包的 imp 功能

java 表示

为 类 和 interfaces.So 提供外部人员无法提供的安全保障 直接访问它,但如何? 我还没有使用过这个功能,我很想知道它。

问题含糊不清,但这是使用包提供安全性的一种方式...

如果一个变量是受保护的,只有它的子class和同一个包中的class可以访问它。如果您想增加安全性,这会很有用,因为您只能使添加到包中的文件能够访问 class.

中的变量

示例:

假设我是一个银行程序。我有一个名为 balance 的受保护变量。如果变量是 public,那么有人可以编写一个程序来访问 class 并随心所欲地改变余额。但由于它受到保护,只有我放在银行包中的文件才能访问变量以更改它。

软件包不提供任何有意义的安全性。但是,它们确实有助于通过 "package private" 访问支持模块化:

package com.example;

public class Example {
    int someMethod() { ... }
}

someMethod 的访问权限是包私有的,这意味着它只对 com.example 包中的其他 类 可见。您可以用同样的方式控制字段、类 和界面的可见性。

请注意,对于大多数 Java 应用程序而言,这不是可靠的安全机制。应用程序很容易使用反射来解决大多数(如果不是全部)基于访问修饰符的访问限制。阻止这种情况的唯一方法是 运行 禁用反射 API 的安全沙箱中的不受信任代码。