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 类中:
- values() 返回枚举类中所有的值。
- ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
- valueOf()方法返回指定字符串值的枚举常量。
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 声明必须在包声明之后,类声明之前。