The Java Tutorial

The Java Tutorial 笔记

Getting Started

每个应用程序都应当有一个 main 方法:

public static void main(String[] args)

Object-Oriented Programming Concepts

What Is Inheritance?

Java 中每个 class 可以有一个直接的 superclass:

class MountainBike extends Bicycle {
}

What Is an Interface?

An interface is a group of related methods with empty bodies:

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);
    void changeGear(int newValue);
    void speedUp(int increment);
    void applyBrakes(int decrement);
}

要实现这个 interface, 需要在 class 声明中使用 implements 关键字:

class ACMEBicycle implements Bicycle {

    // remainder of this class
    // implemented as before
}

Interface 中定义的所有方法, 都应该在这个类中被实现.

Language Basics

Variables

Java 定义了以下几种变量:

Instance Variables (Non-Static Fields)
存储对象的状态. 值对类的每一个 instance 是 unique 的.
Class Variables (Static Fields)
使用 static 声明. 在程序生存期只有一份拷贝, 不管类被实例化多少次. 加上 final 关键词表示值永远不会改变.
Local Variables
存储方法的临时状态, 只在被声明的方法内可见.
Parameters
一般被归类成 “variables” 而不是 “fields”

通常说 “fields” 指前两种, “variables” 指上面所有的.

Naming

变量允许以字母, _, $开头. 但按约定应该避免以$开头, 不鼓励以_开头.

接下来的字符可以是字母, 数字, _, $. 鼓励使用有完整意义的单词, 而不是奇怪的缩写.

约定使用驼峰. 例外是, 对常量使用大写, 以下划线分割单词:

static final int NUM_GEARS = 6;

Primitive Data Types

Java 是 statically-typed 语言, 也就是说所有变量在使用前都应当被声明.

Java 支持8种 primitive data types.

byte
8-bit 带符号二进制补码整数, 取值范围在 [-128, 127]. 可以用于在大数组中节省内存; 也可以被用来取代 int, 当它的限制使代码更清晰时.
short
16-bit 带符号二进制补码整数, [-32768, 32767]. 同样可以用于在大数组中节省内存.
int
32-bit 带符号二进制补码整数.
long
64-bit 带符号二进制补码整数.
float
单精度 32-bit IEEE 754 浮点数. 取值范围在 Java 语言规范的 Floating-Point Types, Formats, and Values 一节说明. 这个数据类型绝对不能用于精确值, 比如货币. 对此应当使用 java.math.BigDecimal 类.
double
双精度 64-bit IEEE 754 浮点数. 同上不能用户精确值.
boolean
只有两个可能的值: true 或者 false. 这个数据类型代表一个比特的信息, 但是它的 size 没有被精确定义.
char
单个 16-bit Unicode 字符. 最小值 ‘u0000’ (or 0), 最大值 ‘uffff’ (or 65,535 inclusive).

除了这8种基本数据类型, Java 通过 `java.lang.String`_ 类对字符串进行了特殊的支持. 使用双引号包围字符串将自动创建一个新的 String 对象, String 对象是 immutable, 也就是说一旦创建, 就不能被改变.

Defalt Values

Field 被声明时不总是需要指定一个值. 声明但没有初始化的 fields 会被编译器赋予默认值, 根据数据类型不同通常是 null 或 0. 但是依赖默认值通常被认为是坏的编码风格.

数据类型 默认值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char ‘u0000’
String (or any object) null
boolean false