哈工大软件构造阅读心得2-2: Java基础
本文参考:MIT Reading2哈工大学长汉化
枚举类型
有时候一种类型中会存在一个既小又有限的不可变的值的集合,例如:
-
一年中的月份: January, February, …, November, December
-
一周中的每一天:Monday, Tuesday, …, Saturday, Sunday
-
指南针中的方向:north, south, east, west
-
可以配出的颜色:black, gray, red, …
当不可变的值的集合满足“小”和“有限”这两个条件时,将这个集合中的所有值统一定义为一个命名常量就是有意义的。
在JAVA中,这样的命名常量就称为enumeration(枚举类型)
并且使用关键字enum来构造。
public enum Month {
JANUARY, FEBRUARY, MARCH, APRIL,
MAY, JUNE, JULY, AUGUST,
SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER;
}
public enum PenColor {
BLACK, GRAY, RED, PINK, ORANGE,
YELLOW, GREEN, CYAN, BLUE, MAGENTA;
}
你可以在声明变量或函数的时候使用例如PenColor这样的枚举类型名:
PenColor drawingColor;
像引用一个被命名的静态常量一样来引用枚举类型的值:
drawingColor = PenColor.RED;
一个枚举型变量更加“类型安全”,因为它可以发现一些类型错误,如类型不匹配:
int month = TUESDAY;
//如果month定义为整型值(TUESDAY也是一个整型值),那么这样写不会报错(但是从语义上看是错的,因为显然不能将“周四”赋值给一个“月份”,这可能不符合作者的本意)
Month month = DayOfWeek.TUESDAY;
// 如果month被定义为枚举类型Month,那么这条语句将会触发静态错误 (static error)
或者拼写错误:
String color = "REd";
// 不报错,拼写错误被忽略
PenColor drawingColor = PenColor.REd;
// 当枚举类型的值被拼写错时,会触发静态错误
Java API 文档
Java API和Java API文档是什么
API:application programming interface,应用程序编程接口。
Java API:Java标准库提供的函数
Java
API文档:详细说明了Java中常用类和方法的功能,开发者可以通过查阅API文档,调用应用程序接口(API)来编程。
怎么使用Java API文档
Java中有很多类,每一个类又有很多方法和变量,通过查看Java
API文档能够知道这些类、方法和变量如何使用。Java官方为Java
SE提供了基于HTML的API文档。作为Java程序员应该熟悉如何使用API文档,如下:
http://docs.oracle.com/javase/8/docs/api/
类和接口中,接口是斜体文字,类是正常文字。
以List为例,点击左侧的List正常字体(List类)进入List类介绍:
右侧是List类的具体信息。
下拉有构造方法:
继续下拉有实例方法:所有的实例方法汇总,点击某个方法可以跳转到下面的所有方法详细介绍中该方法的介绍。
练习
读Java文档
阅读Java API文档来回答下列问题:
假设我们有一个 TreasureChest类。在我们运行如下代码之后:
Map\<String, TreasureChest\> treasures = new HashMap\<\>();
treasures.put("beach", new TreasureChest(25));
TreasureChest result = treasures.putIfAbsent("beach", new TreasureChest(75));
注:
default V putIfAbsent(K key, V value)
If the specified key is not already associated with a value (or is mapped to null) associates it with the given value and returns null, else returns the current value.
result变量的值是什么?
[x] 25 treasure
[ ] 75 treasure
[ ] another amount of treasure
[ ] null
Avast!
在运行下面这段代码之后:
Map\<String, String\> translations = new HashMap\<\>();
translations.put("green", "verde");
??? result = translations.replace("green", "verde", "ahdar");
result的值是什么?
注:
default boolean replace(K key, V oldValue, V newValue)
Replaces the entry for the specified key only if currently mapped to the specified value.
[ ] “green”
[ ] “verde”
[ ] “ahdar”
[ ] true
[ ] false
[ ] 1
[ ] null
[x] 以上没有正确答案(注:boolean)