Java学习系列(九)

2023-12-23 10:32:53

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 声明必须在包声明之后,类声明之前。?

文章来源:https://blog.csdn.net/dangshan5/article/details/135164425
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。