1.枚举(enum)
Java 枚举是一个特殊的类,一般表示一组常量。
如:一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。
enum Color
{
RED, GREEN, BLUE;
}
?枚举类使用 enum 关键字来定义,各个常量使用逗号?,?来分割。
以上枚举类 Color 颜色常量有 RED, GREEN, BLUE,分别表示红色,绿色,蓝色。
enum Color
{
? ? RED, GREEN, BLUE;
}
?
public class Test
{
? ? // 执行输出结果
? ? public static void main(String[] args)
? ? {
? ? ? ? Color c1 = Color.RED;
? ? ? ? System.out.println(c1);
? ? }
}
枚举类也可以声明在内部类中:
public class Test
{
? ? enum Color
? ? {
? ? ? ? RED, GREEN, BLUE;
? ? }
?
? ? // 执行输出结果
? ? public static void main(String[] args)
? ? {
? ? ? ? Color c1 = Color.RED;
? ? ? ? System.out.println(c1);
? ? }
}
enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。
values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:
enum Color
{
? ? RED, GREEN, BLUE;
}
?
public class Test
{
? ? public static void main(String[] args)
? ? {
? ? ? ? // 调用 values()
? ? ? ? Color[] arr = Color.values();
?
? ? ? ? // 迭代枚举
? ? ? ? for (Color col : arr)
? ? ? ? {
? ? ? ? ? ? // 查看索引
? ? ? ? ? ? System.out.println(col + " at index " + col.ordinal());
? ? ? ? }
?
? ? ? ? // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
? ? ? ? System.out.println(Color.valueOf("RED"));
? ? ? ? // System.out.println(Color.valueOf("WHITE"));
? ? }
}
执行以上代码输出结果为:
RED at index 0
GREEN at index 1
BLUE at index 2
RED
枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。
枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。
?
enum Color
{
? ? RED, GREEN, BLUE;
?
? ? // 构造函数
? ? private Color()
? ? {
? ? ? ? System.out.println("Constructor called for : " + this.toString());
? ? }
?
? ? public void colorInfo()
? ? {
? ? ? ? System.out.println("Universal Color");
? ? }
}
?
public class Test
{ ? ?
? ? // 输出
? ? public static void main(String[] args)
? ? {
? ? ? ? Color c1 = Color.RED;
? ? ? ? System.out.println(c1);
? ? ? ? c1.colorInfo();
? ? }
}
执行以上代码输出结果为:
Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color
2. package(包)
包机制,用于区别类名的命名空间。
作用:
把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
包语句的语法格式为:
package pkg1[.pkg2[.pkg3…]];
包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中。
在 Java 中,import?关键字用于导入其他类或包中定义的类型,以便在当前源文件中使用这些类型。
import?关键字用于引入其他包中的类、接口或静态成员,它允许你在代码中直接使用其他包中的类,而不需要完整地指定类的包名。
在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。
可以使用 import语句来引入一个特定的类:
import com.runoob.MyClass;
也可以使用通配符?*?来引入整个包或包的子包:
import com.runoob.mypackage.*;
这可以导入?com.runoob.mypackage?包中的所有类,从而在当前源文件中使用该包中的任何类的方法、变量或常量。注意,使用通配符?*?导入整个包时,只会导入包中的类,而不会导入包中的子包。
在导入类或包时,你需要提供类的完全限定名或包的完全限定名。完全限定名包括包名和类名的组合,以点号?.?分隔。
import java.util.ArrayList; // 引入 java.util 包中的 ArrayList 类
import java.util.*; // 引入 java.util 包中的所有类
import com.example.MyClass; // 引入 com.example 包中的 MyClass 类
import com.example.*; // 引入 com.example 包中的所有类
注意:类文件中可以包含任意数量的 import 声明。import 声明必须在包声明之后,类声明之前。?