OptionalDouble java.lang.Object |—java.util.OptionalDouble public final class OptionalDouble extends Object 一个容器对象,可能包含也可能不包含双精度值。 如果存在值,isPresent() 将返回 true,而 getAsDouble() 将返回该值。 提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。 这是一个基于值的类; 在 OptionalDouble 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预测的结果,应该避免。 方法总结 修饰符和类型 方法 描述 static OptionalDouble empty() 返回一个空的 OptionalDouble 实例。 boolean equals(Object obj) 指示某个其他对象是否“等于”此 OptionalDouble。 double getAsDouble() 如果此 OptionalDouble 中存在值,则返回该值,否则抛出 NoSuchElementException。 int hashCode() 返回当前值的哈希码值(如果有);如果不存在值,则返回 0(零)。 void ifPresent(DoubleConsumer consumer) 如果存在值,则让指定的使用者接受该值,否则什么也不做。 boolean isPresent() 如果存在值,则返回 true,否则返回 false。 static OptionalDouble of(double value) 返回具有指定值的 OptionalDouble。 double orElse(double other) 如果存在则返回值,否则返回其他值。 double orElseGet(DoubleSupplier other) 如果存在则返回该值,否则调用其他值并返回该调用的结果。 <X extends Throwable>double orElseThrow(Supplier<X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。 String toString() 返回对象的字符串表示形式。 从类 java.lang.Object 继承的方法 clone, finalize, getClass, notify, notifyAll, wait, wait, wait 方法详情 empty public static OptionalDouble empty() 返回一个空的 OptionalDouble 实例。 此 OptionalDouble 不存在任何值。 返回: 一个空的 OptionalDouble。 of public static OptionalDouble of(double value) 返回具有指定值的 OptionalDouble。 参数: 参数名称 参数描述 value 存在的值 返回: 具有当前值的 OptionalDouble getAsDouble public double getAsDouble() 如果此 OptionalDouble 中存在值,则返回该值,否则抛出 NoSuchElementException。 返回: 此 OptionalDouble 持有的值 Throws: Throw名称 Throw描述 NoSuchElementException 如果不存在值 isPresent public boolean isPresent() 如果存在值,则返回 true,否则返回...
Optional java.lang.Object |—java.util.Optional<T& public final class Optional<T> extends Object 一个容器对象,可能包含也可能不包含非空值。 如果存在值,isPresent() 将返回 true,而 get() 将返回该值。 提供了依赖于包含值是否存在的其他方法,例如 orElse() (如果值不存在则返回默认值)和 ifPresent() (如果值存在则执行代码块)。 这是一个基于值的类; 在 Optional 的实例上使用身份敏感操作(包括引用相等 (==)、身份哈希码或同步)可能会产生不可预知的结果,应该避免。 方法总结 修饰符和类型 方法 描述 static <T> Optional<T> empty() 返回一个空的可选实例。 boolean equals(Object obj) 指示某个其他对象是否“equal”此 Optional。 OptionalT filter(Predicate<? super T> predicate) 如果存在一个值,并且该值与给定的谓词匹配,则返回一个描述该值的 Optional,否则返回一个空的 Optional。 <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) 如果存在值,则将提供的 Optional-bearing 映射函数应用于它,返回该结果,否则返回空 Optional。 T get() 如果此 Optional 中存在值,则返回该值,否则抛出 NoSuchElementException。 int hashCode() 返回当前值的哈希码值(如果有);如果不存在值,则返回 0(zero)。 void ifPresent(Consumer<? super T> consumer) 如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。 boolean isPresent() 如果存在值,则返回 true,否则返回 false。 <U> Optional<U> map(Function<? super T,? extends U> mapper) 如果存在值,则对其应用提供的映射函数,如果结果为非 null,则返回描述结果的 Optional。 static <T> Optional<T> of(T value) 返回具有指定当前非空值的 Optional。 static <T> Optional<T> ofNullable(T value) 返回一个描述指定值的 Optional,如果非 null,否则返回一个空 Optional。 T orElse(T other) 如果存在则返回值,否则返回其他值。 T orElseGet(Supplier<? extends T> other) 如果存在则返回该值,否则调用其他值并返回该调用的结果。 <X extends Throwable>T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在,则返回包含的值,否则抛出由提供的供应商创建的异常。 String toString() 返回此 Optional 适合调试的非空字符串表示形式。 从类 java.lang.Object 继承的方法 clone, finalize, getClass, notify, notifyAll, wait, wait, wait 方法详情 empty public static <T> Optional<T> empty() 返回一个空的可选实例。 此 Optional 没有值。 类型参数: 类型参数名称 类型参数描述 T 不存在值的类型 返回: 一个空的 Optional of public static <T> Optional<T> of(T value) 返回具有指定当前非空值的 Optional。 类型参数: 类型参数名称 类型参数描述 T 值的类别 参数: 参数名称 参数描述 value 要存在的值,它必须是非空的 返回: 一个含有该值的 Optional Throws:...
SimpleTimeZone java.lang.Object |—java.util.TimeZone |—|—java.util.SimpleTimeZone public class SimpleTimeZone extends TimeZone SimpleTimeZone 是 TimeZone 的具体子类,表示用于公历的时区。 该类保存与 GMT 的偏移量,称为原始偏移量,以及夏令时时间表的开始和结束规则。 由于它只为每个值保存单个值,因此它无法处理与 GMT 和夏令时计划的偏移量的历史变化,除了 setStartYear 方法可以指定夏令时计划开始生效的年份。 要构建具有夏令时时间表的 SimpleTimeZone,可以使用一组规则来描述时间表,即开始规则和结束规则。 夏令时开始或结束的日期由月份、月份和星期几值的组合指定。 月份值由 Calendar Calendar#MONTH 字段值表示,例如 Calendar#MARCH。 星期几值由 Calendar Calendar#DAY_OF_WEEK 值表示,例如 Calendar#SUNDAY。 值组合的含义如下。 准确的月份日期 要指定准确的月份日期,请将月份和月份日期设置为准确值,并将星期几设置为零。 例如,要指定 3 月 1 日,请将月份设置为 Calendar#MARCH,将 day-of-month 设置为 1,将 day-of-week 设置为 0。 星期几在一个月的某一天或之后要指定星期几在一个月的某一天或之后,请将月份设置为精确的月份值,将月份设置为应用规则的当天或之后的日期, 和星期几到一个负的 Calendar#DAY_OF_WEEK 字段值。 例如,要指定四月的第二个星期日,请将月份设置为 Calendar#APRIL,将日期设置为 8,将星期几设置为 -Calendar#SUNDAY。 星期几在一个月的某一天或之前 要指定一周中的某一天在一个月的某一天或之前,请将 day-of-month 和 day-of-week 设置为负值。 例如,要指定 3 月 21 日或之前的最后一个星期三,请将月份设置为 Calendar#MARCH,日期为 -21,星期几为 -Calendar#WEDNESDAY。 一个月的最后一周要指定一个月的最后一周,请将 day-of-week 设置为 Calendar#DAY_OF_WEEK 值,并将 day-of-month 设置为 -1。 例如,要指定 10 月的最后一个星期日,请将月份设置为 Calendar#OCTOBER,将星期几设置为 Calendar#SUNDAY,并将日期设置为 -1。 夏令时开始或结束的时间由一天中的毫秒值指定。 有三种指定时间的模式:WALL_TIME、STANDARD_TIME 和 UTC_TIME。 例如,如果夏令时在挂钟时间的凌晨 2:00 结束,则可以在 WALL_TIME 模式下指定为 7200000 毫秒。 在这种情况下,结束规则的挂钟时间与白天时间的含义相同。 以下是构造时区对象的参数示例。 // Base GMT offset: -8:00 // DST starts: at 2:00am in standard time // on the first Sunday in April // DST...
ServiceLoader java.lang.Object |—java.util.ServiceLoader<S& public final class ServiceLoader<S> extends Object implements Iterable<S> 一个简单的服务提供者加载工具。 服务是一组众所周知的接口和(通常是抽象的)类。 服务提供者是服务的具体实现。 提供者中的类通常实现服务本身中定义的类的接口和子类。 服务提供者可以以扩展的形式安装在 Java 平台的实现中,即将 jar 文件放置在任何常用的扩展目录中。 还可以通过将提供程序添加到应用程序的类路径或通过某些其他特定于平台的方式来使提供程序可用。 出于加载的目的,服务由单一类型表示,即单一接口或抽象类。 (可以使用具体类,但不建议这样做。)给定服务的提供者包含一个或多个具体类,这些具体类使用提供者特定的数据和代码扩展此服务类型。 提供者类通常不是整个提供者本身,而是一个代理,它包含足够的信息来决定提供者是否能够满足特定请求以及可以按需创建实际提供者的代码。 提供者类的细节往往是高度特定于服务的; 没有一个类或接口可以统一它们,所以这里没有定义这样的类型。 此工具强制执行的唯一要求是提供程序类必须具有零参数构造函数,以便它们可以在加载期间被实例化。 通过在资源目录 META-INF/services 中放置提供者配置文件来识别服务提供者。 该文件的名称是服务类型的完全限定二进制名称。 该文件包含具体提供程序类的完全限定二进制名称列表,每行一个。 每个名称周围的空格和制表符以及空白行将被忽略。 注释字符为’#’(’\u0023′, NUMBER SIGN); 在每一行中,第一个注释字符之后的所有字符都将被忽略。 该文件必须以 UTF-8 编码。 如果一个特定的具体提供者类在多个配置文件中被命名,或者在同一个配置文件中被命名不止一次,那么重复的将被忽略。 命名特定提供者的配置文件不必与提供者本身位于相同的 jar 文件或其他分发单元中。 必须可以从最初查询配置文件的同一个类加载器访问提供程序; 请注意,这不一定是实际加载文件的类加载器。 提供者的定位和实例化是惰性的,即按需。 服务加载器维护到目前为止已加载的提供程序的缓存。 迭代器方法的每次调用都会返回一个迭代器,它首先按实例化顺序产生缓存的所有元素,然后延迟定位并实例化任何剩余的提供者,依次将每个提供者添加到缓存中。 可以通过 reload 方法清除缓存。 服务加载程序总是在调用者的安全上下文中执行。 受信任的系统代码通常应该从特权安全上下文中调用此类中的方法以及它们返回的迭代器的方法。 此类的实例对于多个并发线程的使用是不安全的。 除非另有说明,否则将 null 参数传递给此类中的任何方法都将导致抛出 NullPointerException。 示例 假设我们有一个服务类型 com.example.CodecSet,它旨在表示某些协议的编码器/解码器对集合。 在这种情况下,它是一个具有两个抽象方法的抽象类: public abstract Encoder getEncoder(String encodingName); public abstract Decoder getDecoder(String encodingName); 如果提供者不支持给定的编码,每个方法都会返回一个适当的对象或 null。 典型的供应商支持不止一种编码。 如果 com.example.impl.StandardCodecs 是 CodecSet 服务的实现,那么它的 jar 文件还包含一个名为 META-INF/services/com.example.CodecSet 该文件包含一行: com.example.impl.StandardCodecs # Standard codecs CodecSet 类在初始化时创建并保存单个服务实例: private static ServiceLoader<CodecSet> codecSetLoader = ServiceLoader.load(CodecSet.class); 为了找到给定编码名称的编码器,它定义了一个静态工厂方法,该方法遍历已知和可用的提供程序,仅在找到合适的编码器或用完提供程序时返回。 public static Encoder getEncoder(String encodingName) { for (CodecSet cp : codecSetLoader) { Encoder enc = cp.getEncoder(encodingName); if (enc != null) return enc;...
Scanner java.lang.Object |—java.util.Scanner public final class Scanner extends Object implements Iterator<String>, Closeable 一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。 然后可以使用各种 next 方法将生成的标记转换为不同类型的值。 例如,此代码允许用户从 System.in 中读取一个数字: Scanner sc = new Scanner(System.in); int i = sc.nextInt(); 作为另一个示例,此代码允许从文件 myNumbers 中的条目分配长类型: Scanner sc = new Scanner(new File("myNumbers")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); } 扫描仪还可以使用除空格以外的分隔符。 此示例从字符串中读取多个项目: String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); System.out.println(s.nextInt()); System.out.println(s.nextInt()); System.out.println(s.next()); System.out.println(s.next()); s.close(); 打印以下输出: 1 2 red blue 使用此代码可以生成相同的输出,该代码使用正则表达式一次解析所有四个标记: String input = "1 fish 2 fish red fish blue fish"; Scanner s = new Scanner(input); s.findInLine("(\\d+) fish (\\d+) fish (\\w+) fish (\\w+)"); MatchResult result = s.match(); for (int i=1; i<=result.groupCount(); i++) System.out.println(result.group(i)); s.close(); 扫描仪使用的默认空白分隔符由 Character.isWhitespace 识别。 reset() 方法会将扫描仪的分隔符的值重置为默认的空白分隔符,无论它之前是否已更改。 扫描操作可能会阻塞等待输入。 next() 和 hasNext() 方法及其原始类型的伴随方法(例如...
ResourceBundle java.lang.Object |—java.util.ResourceBundle public abstract class ResourceBundle extends Object 资源包包含特定于语言环境的对象。 当您的程序需要特定于语言环境的资源(例如字符串)时,您的程序可以从适合当前用户语言环境的资源包中加载它。 通过这种方式,您可以编写在很大程度上独立于用户语言环境的程序代码,从而将资源包中的大多数(如果不是全部)特定于语言环境的信息隔离开来。 这使您可以编写能够: 易于本地化或翻译成不同的语言 一次处理多个语言环境 稍后可以轻松修改以支持更多语言环境 资源包属于其成员共享一个通用基本名称的系列,但其名称还具有标识其语言环境的附加组件。 例如,资源包系列的基本名称可能是“MyResources”。 该系列应该有一个默认资源包,它与它的系列具有相同的名称 – “MyResources” – 如果不支持特定的语言环境,它将被用作最后的资源包。 然后,该家族可以根据需要提供尽可能多的特定于语言环境的成员,例如名为“MyResources_de”的德国成员。 一个系列中的每个资源包都包含相同的项目,但这些项目已针对该资源包所代表的语言环境进行了翻译。 例如,“MyResources”和“MyResources_de”都可能有一个用于取消操作的按钮的字符串。 在“MyResources”中,字符串可能包含“Cancel”,而在“MyResources_de”中,它可能包含“Abbrechen”。 如果不同国家有不同的资源,您可以进行专门化:例如,“MyResources_de_CH”包含瑞士 (CH) 的德语 (de) 对象。 如果您只想修改专精中的部分资源,您可以这样做。 当您的程序需要特定于语言环境的对象时,它会使用 getBundle 方法加载 ResourceBundle 类: ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale); 资源包包含键/值对。 这些键唯一地标识包中特定于语言环境的对象。 下面是一个包含两个键/值对的 ListResourceBundle 示例: public class MyResources extends ListResourceBundle { protected Object[][] getContents() { return new Object[][] { // LOCALIZE THE SECOND STRING OF EACH ARRAY (e.g., "OK") {"OkKey", "OK"}, {"CancelKey", "Cancel"}, // END OF MATERIAL TO LOCALIZE }; } } 键始终是字符串。 在本例中,键是“OkKey”和“CancelKey”。 在上面的例子中,值也是字符串——“OK”和“Cancel”——但它们不是必须的。 这些值可以是任何类型的对象。 您可以使用适当的 getter 方法从资源包中检索对象。 因为 “OkKey” 和 “CancelKey” 都是字符串,所以您可以使用 getString 来检索它们: button1 = new Button(myResources.getString("OkKey")); button2 = new Button(myResources.getString("CancelKey")); getter 方法都需要键作为参数,如果找到则返回对象。 如果找不到对象,getter 方法会抛出 MissingResourceException。 除了 getString,ResourceBundle 还提供了获取字符串数组的方法 getStringArray,以及用于任何其他类型对象的通用 getObject 方法。 使用 getObject...
Random java.lang.Object |—java.util.Random public class Random extends Object implements Serializable 此类的一个实例用于生成伪随机数流。 该类使用 48 位种子,该种子使用线性同余公式进行修改。 如果使用相同的种子创建 Random 的两个实例,并且为每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。 为了保证这一特性,为类 Random 指定了特定的算法。 为了 Java 代码的绝对可移植性,Java 实现必须使用此处为类 Random 显示的所有算法。 但是,允许类 Random 的子类使用其他算法,只要它们遵守所有方法的通用合同。 类 Random 实现的算法使用受保护的实用程序方法,该方法在每次调用时可以提供多达 32 个伪随机生成的位。 许多应用程序会发现 Math#random 方法更易于使用。 java.util.Random 的实例是线程安全的。 但是,跨线程并发使用同一个 java.util.Random 实例可能会遇到争用,从而导致性能下降。 考虑改为在多线程设计中使用 ThreadLocalRandom。 java.util.Random 的实例在密码学上不是安全的。 考虑改为使用 SecureRandom 来获取加密安全的伪随机数生成器,以供安全敏感的应用程序使用。 构造函数摘要 构造函数 描述 Random() 创建一个新的随机数生成器。 Random(long seed) 使用单个长种子创建一个新的随机数生成器。 方法总结 修饰符和类型 方法 描述 DoubleStream doubles() 返回一个有效无限的伪随机双精度值流,每个值介于零(包括)和一(不包括)之间。 DoubleStream doubles(double randomNumberOrigin, double randomNumberBound) 返回一个有效无限的伪随机双精度值流,每个都符合给定的原点(包括)和绑定(不包括)。 DoubleStream doubles(long streamSize) 返回一个流,该流产生给定的 streamSize 数量的伪随机双精度值,每个值介于零(包括)和一(不包括)之间。 DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) 返回产生给定 streamSize 数量的伪随机双精度值的流,每个都符合给定的原点(包括)和绑定(不包括)。 IntStream ints() 返回一个有效无限的伪随机 int 值流。 IntStream ints(int randomNumberOrigin, int randomNumberBound) 返回一个有效无限的伪随机 int 值流,每个值都符合给定的原点(包括)和绑定(不包括)。 IntStream ints(long streamSize) 返回产生给定 streamSize 数量的伪随机 int 值的流。 IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound) 返回一个流,该流产生给定的 streamSize 数量的伪随机 int 值,每个都符合给定的原点(包括)和边界(不包括)。 LongStream longs() 返回一个有效无限的伪随机长值流。 LongStream longs(long streamSize) 返回产生给定 streamSize 数量的伪随机 long 值的流。 LongStream longs(long randomNumberOrigin, long randomNumberBound) 返回一个有效无限的伪随机长值流,每个值都符合给定的原点(包括)和绑定(不包括)。 LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound) 返回产生给定 streamSize 数量的伪随机 long 的流,每个都符合给定的原点(包括)和绑定(不包括)。 protected int next(int bits) 生成下一个伪随机数。 boolean nextBoolean() 从该随机数生成器的序列中返回下一个伪随机、均匀分布的布尔值。 void nextBytes(byte[] bytes) 生成随机字节并将它们放入用户提供的字节数组中。 double nextDouble() 从该随机数生成器的序列中返回 0.0 到 1.0 之间的下一个伪随机、均匀分布的双精度值。 float nextFloat() 从该随机数生成器的序列中返回下一个伪随机、均匀分布的浮点值,介于 0.0 和 1.0 之间。 double nextGaussian() 从该随机数生成器的序列返回下一个伪随机、高斯(“正常”)分布双精度值,均值为 0.0,标准差为 1.0。 int nextInt() 从该随机数生成器的序列中返回下一个伪随机、均匀分布的 int 值。 int nextInt(int bound) 返回一个伪随机、均匀分布的 int 值,介于 0(包括)和指定值(不包括)之间,取自该随机数生成器的序列。...
PropertyResourceBundle java.lang.Object |—java.util.ResourceBundle |—|—java.util.PropertyResourceBundle public class PropertyResourceBundle extends ResourceBundle PropertyResourceBundle 是 ResourceBundle 的一个具体子类,它使用属性文件中的一组静态字符串来管理区域设置的资源。 与其他类型的资源包不同,您不继承 PropertyResourceBundle。 相反,您提供包含资源数据的属性文件。 ResourceBundle.getBundle 将自动查找适当的属性文件并创建一个引用它的 PropertyResourceBundle。 以下示例显示了具有基本名称“MyResources”的资源包系列的成员。 文本定义了捆绑包“MyResources_de”,捆绑包家族的德国成员。 此成员基于 PropertyResourceBundle,因此文本是文件“MyResources_de.properties”的内容(相关示例显示了如何将捆绑包添加到该系列,这些捆绑包作为 ListResourceBundle 的子类实现)。 此示例中的键采用“s1”等形式。实际的键完全取决于您的选择,只要它们与您在程序中用于从包中检索对象的键相同。 键是区分大小写的。 # MessageFormat pattern s1=Die Platte \"{1}\" enthält {0}. # location of {0} in pattern s2=1 # sample disk name s3=Meine Platte # first ChoiceFormat choice s4=keine Dateien # second ChoiceFormat choice s5=eine Datei # third ChoiceFormat choice s6={0,number} Dateien # sample date s7=3. März 1996 如果 PropertyResourceBundle 子类同时被多个线程使用,则它的实现必须是线程安全的。 此类中非抽象方法的默认实现是线程安全的。 注意:PropertyResourceBundle 可以从 InputStream 或 Reader 构造,它表示一个属性文件。 从 InputStream 构造 PropertyResourceBundle 实例要求输入流以 ISO-8859-1 编码。 在这种情况下,无法以 ISO-8859-1 编码表示的字符必须由《Java™ 语言规范》第 3.3 节中定义的 Unicode Escapes 表示,而采用 Reader 的其他构造函数则没有该限制。 嵌套类摘要 从类 java.util.ResourceBundle 继承的嵌套类/接口 ResourceBundle.Control 字段摘要 从类 java.util.ResourceBundle 继承的字段 parent 构造函数摘要 构造函数 描述 PropertyResourceBundle(InputStream stream) 从 InputStream 创建一个属性资源包。 PropertyResourceBundle(Reader reader) 从 Reader 创建一个属性资源包。 方法总结 修饰符和类型 方法...
PropertyPermission java.lang.Object |—java.security.Permission |—|—java.security.BasicPermission |—|—|—java.util.PropertyPermission public final class PropertyPermission extends BasicPermission 此类用于属性权限。 名称是属性的名称(“java.home”、“os.name”等)。 命名约定遵循分层属性命名约定。 此外,星号可能出现在名称的末尾,跟在“.”之后,或者单独出现,表示通配符匹配。 例如:“java”。 和 “” 表示通配符匹配,而 “java” 和 “ab” 不表示。 要授予的操作在包含一个或多个逗号分隔关键字列表的字符串中传递给构造函数。 可能的关键字是“read”和“write”。 它们的含义定义如下: read 读取权限。 允许调用 System.getProperty。 write 写权限。 允许调用 System.setProperty。 在处理之前将操作字符串转换为小写。 在授予代码访问某些系统属性的权限之前,应小心谨慎。 例如,授予访问“java.home”系统属性的权限会提供有关系统环境(Java 安装目录)的潜在恶意代码敏感信息。 此外,授予访问“user.name”和“user.home”系统属性的权限会提供有关用户环境(用户的帐户名和主目录)的潜在恶意代码敏感信息。 构造函数摘要 构造函数 描述 PropertyPermission(String name, String actions) 创建具有指定名称的新 PropertyPermission 对象。 方法总结 从类 java.security.BasicPermission 继承的方法 getActions, implies 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 从类 java.security.Permission 继承的方法 checkGuard, getName, newPermissionCollection 构造函数详细信息 PropertyPermission public PropertyPermission(String name, String actions) 创建具有指定名称的新 PropertyPermission 对象。 该名称是系统属性的名称,actions 包含一个以逗号分隔的列表,列出了对该属性授予的所需操作。 可能的操作是“read”和“write”。 参数: 参数名称 参数描述 name PropertyPermission 的名称。 actions actions 字符串。 Throws: Throw名称 Throw描述 NullPointerException 如果 name 为空。 IllegalArgumentException 如果 name 为空或 actions 无效。
Properties java.lang.Object |—java.util.Dictionary<K,V& |—|—java.util.Hashtable<Object,Object& |—|—|—java.util.Properties public class Properties extends Hashtable<Object,Object> Properties 类表示一组持久的属性。 属性可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。 一个属性列表可以包含另一个属性列表作为其“默认值”; 如果在原始属性列表中找不到属性键,则搜索第二个属性列表。 因为 Properties 继承自 Hashtable,所以 put 和 putAll 方法可以应用于 Properties 对象。 强烈建议不要使用它们,因为它们允许调用者插入键或值不是字符串的条目。 应该改用 setProperty 方法。 如果在包含非字符串键或值的“受损”属性对象上调用存储或保存方法,则调用将失败。 类似地,如果在包含非字符串键的“受损”属性对象上调用 propertyNames 或 list 方法,则调用将失败。 load(Reader) / store(Writer, String) 方法以下面指定的简单的面向行的格式从基于字符的流中加载和存储属性。 load(InputStream) / store(OutputStream, String) 方法与 load(Reader)/store(Writer, String) 对的工作方式相同,除了输入/输出流以 ISO 8859-1 字符编码进行编码。 不能用这种编码直接表示的字符可以使用《Java™ 语言规范》第 3.3 节中定义的 Unicode 转义来编写; 转义序列中只允许使用单个 ‘u’ 字符。 native2ascii 工具可用于将属性文件与其他字符编码进行转换。 loadFromXML(java.io.InputStream) 和 storeToXML(java.io.OutputStream,java.lang.String,java.lang.String) 方法以简单的 XML 格式加载和存储属性。 默认情况下使用 UTF-8 字符编码,但是如果需要,可以指定特定的编码。 实现需要支持 UTF-8 和 UTF-16,并且可能支持其他编码。 XML 属性文档具有以下 DOCTYPE 声明: <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 请注意,导出或导入属性时不会访问系统 URI (http://java.sun.com/dtd/properties.dtd); 它仅用作唯一标识 DTD 的字符串,即: <?xml version="1.0" encoding="UTF-8"?> <!-- DTD for properties --> <!ELEMENT properties ( comment?, entry* ) > <!ATTLIST properties version CDATA #FIXED "1.0"> <!ELEMENT comment (#PCDATA) > <!ELEMENT entry (#PCDATA) > <!ATTLIST...