droid_wrap::java

Module lang

Source
Expand description

提供对 Java 设计至关重要的类 程序设计语言。

Modules§

  • 提供用于获取有关类和对象的反射信息的类和接口。

Structs§

  • Boolean 类将原始类型布尔值包装在对象中。布尔类型的对象包含一个类型为布尔的字段。此外,此类还提供了许多将布尔值转换为字符串和将字符串转换为布尔值的方法,以及处理布尔值时有用的其他常量和方法。
  • 类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。给定类的二进制名称,类加载器应尝试定位或生成构成该类定义的数据。典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。 每个 Class 对象都包含对定义它的 ClassLoader 的引用。数组类的类对象不是由类加载器创建的,而是由 Java 运行时根据需要自动创建的。Class.getClassLoader() 返回的数组类的类加载器与其元素类型的类加载器相同;如果元素类型是原始类型,则数组类没有类加载器。 应用程序实现 ClassLoader 的子类,以扩展 Java 虚拟机动态加载类的方式。安全管理器通常可以使用类加载器来指示安全域。 ClassLoader 类使用委托模型来搜索类和资源。 ClassLoader 的每个实例都有一个关联的父类加载器。当请求查找类或资源时,ClassLoader 实例会将对类或资源的搜索委托给其父类加载器,然后再尝试自己查找类或资源。虚拟机的内置类加载器称为“引导类加载器”,它本身没有父类,但可以充当 ClassLoader 实例的父类。 支持并发加载类的类加载器称为具有并行能力的类加载器,需要在类初始化时通过调用 ClassLoader.registerAsParallelCapable 方法来注册自己。请注意,默认情况下,ClassLoader 类被注册为具有并行能力。但是,如果其子类具有并行能力,则仍需要注册自己。 在委托模型不是严格分层的环境中,类加载器需要具有并行能力,否则类加载可能会导致死锁,因为加载器锁会在整个类加载过程中一直保持(请参阅 loadClass 方法)。 通常,Java 虚拟机以与平台相关的方式从本地文件系统加载类。例如,在 UNIX 系统上,虚拟机从 CLASSPATH 环境变量定义的目录中加载类。但是,某些类可能不是源自文件;它们可能源自其他来源,例如网络,或者可以由应用程序构造。方法 defineClass 将字节数组转换为 Class 类的实例。 可以使用 Class.newInstance 创建此新定义类的实例。类加载器创建的对象的方法和构造函数可能会引用其他类。为了确定引用的类,Java 虚拟机会调用最初创建该类的类加载器的 loadClass 方法。例如,应用程序可以创建网络类加载器以从服务器下载类文件。示例代码可能如下所示: ClassLoader loader = new NetworkClassLoader(host, port); Object main = loader.loadClass(“Main”, true).newInstance(); … 网络类加载器子类必须定义 findClass 和 loadClassData 方法,以便从网络加载类。下载组成类的字节后,应使用 defineClass 方法创建类实例。示例实现如下: class NetworkClassLoader extends ClassLoader { String host; int port; public Class findClass(String name) { byte[] b = loadClassData(name); return defineClass(name, b, 0, b.length); } private byte[] loadClassData(String name) { // 从连接加载类数据 … } } 二进制名称作为 String 参数提供给 ClassLoader 中方法的任何类名都必须是 Java™ 语言规范定义的二进制名称。有效类名的示例包括:
  • Float 类将原始类型浮点的值包装在对象中。Float 类型的对象包含一个类型为浮点的字段。此外,此类还提供了几种将浮点转换为字符串和将字符串转换为浮点的方法,以及处理浮点时有用的其他常量和方法。浮点相等、等价和比较 java.lang.Double 类讨论了浮点值的相等、等价和比较,其中相等适用于浮点值。
  • Integer 类将原始类型 int 的值包装在对象中。Integer 类型的对象包含一个类型为 int 的字段。此外,此类还提供了几种将 int 转换为 String 和将 String 转换为 int 的方法,以及处理 int 时有用的其他常量和方法。 实现说明:“位操作”方法(如 highestOneBit 和 numberOfTrailingZeros)的实现基于 Henry S. Warren, Jr. 的《Hacker’s Delight》(Addison Wesley,2002 年)中的材料。
  • Object 类是类层次结构的根。每个类都有 Object 作为超类。所有对象(包括数组)都实现了此类的方法。
  • System 类包含几个有用的类字段和方法。它无法实例化。 System 类提供的功能包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;加载文件和库的方法;以及用于快速复制数组一部分的实用方法。

Traits§

  • CharSequence 是可读的 char 值序列。此接口提供对许多不同种类的 char 序列的统一、只读访问。char 值表示基本多语言平面 (BMP) 中的字符或代理。有关详细信息,请参阅 Unicode 字符表示。此接口不会细化 equals 和 hashCode 方法的一般约定。因此,测试两个实现 CharSequence 的对象是否相等的结果通常是不确定的。每个对象可能由不同的类实现,并且不能保证每个类都能够测试其实例与另一个类的实例是否相等。因此,将任意 CharSequence 实例用作集合中的元素或映射中的键是不合适的。
  • CharSequence的扩展操作
  • 此接口对实现它的每个类的对象施加了全排序。此排序称为类的自然排序,类的 compareTo 方法称为其自然比较方法。 实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)自动排序。 实现此接口的对象可以用作有序映射中的键或有序集合中的元素,而无需指定比较器。 当且仅当 e1.compareTo(e2) == 0 对于类 C 的每个 e1 和 e2 都具有与 e1.equals(e2) 相同的布尔值时,类 C 的自然排序才被认为与 equals 一致。 请注意,null 不是任何类的实例,即使 e.equals(null) 返回 false,e.compareTo(null) 也应抛出 NullPointerException。 强烈建议(但不是必需的)自然排序与 equals 一致。这是因为,当有序集合(和有序映射)与自然顺序与 equals 不一致的元素(或键)一起使用时,没有显式比较器的行为会“奇怪”。 特别是,这样的有序集合(或有序映射)违反了集合(或映射)的一般约定,该约定是根据 equals 方法定义的。 例如,如果将两个键 a 和 b 相加,使得 (!a.equals(b) && a.compareTo(b) == 0) 添加到不使用显式比较器的有序集合,则第二个添加操作将返回 false(并且有序集合的大小不会增加),因为从有序集合的角度来看,a 和 b 是相等的。 几乎所有实现 Comparable 的 Java 核心类都具有与 equals 一致的自然顺序。一个例外是 java.math.BigDecimal,其自然顺序将具有相等数值和不同表示形式的 BigDecimal 对象相等(例如 4.0 和 4.00)。 对于 BigDecimal。 equals() 返回 true,则两个 BigDecimal 对象的表示和数值必须相同。对于数学爱好者来说,定义给定类 C 的自然排序的关系是: {(x, y) 使得 x.compareTo(y) <= 0}。 此全序的商是: {(x, y) 使得 x.compareTo(y) == 0}。 根据 compareTo 的约定,可以立即得出,商是 C 上的等价关系,而自然排序是 C 上的全序。 当我们说类的自然排序与 equals 一致时,我们的意思是自然排序的商是该类的 equals(Object) 方法定义的等价关系: {(x, y) 使得 x.equals(y)}。 换句话说,当一个类的自然顺序与 equals 一致时,由 equals 方法的等价关系定义的等价类和由 compareTo 方法的商定义的等价类是相同的。此接口是 Java 集合框架的成员。
  • Object的扩展操作
  • 任何实例旨在由线程执行的类都应实现 Runnable 接口。该类必须定义一个名为 run 的无参数方法。此接口旨在为希望在活动期间执行代码的对象提供通用协议。例如,Runnable 由 Thread 类实现。 活动状态仅表示线程已启动且尚未停止。此外,Runnable 还提供了在不子类化 Thread 的情况下使类处于活动状态的方法。实现 Runnable 的类可以通过实例化 Thread 实例并将其自身作为目标传递,而无需子类化 Thread 即可运行。 在大多数情况下,如果您只打算覆盖 run() 方法而不覆盖其他 Thread 方法,则应使用 Runnable 接口。这一点很重要,因为除非程序员打算修改或增强类的基本行为,否则不应子类化类。

Functions§