引用(reference)和对象(object)
可以将引用和对象看成是遥控器和电视机的关系. String s 里面的s为一个引用, 并不一定要求有一个对象和他关联. String s = "asdf" 中字符串对象 "asdf" 为引用s关联的字符串, 亦可写成String s = new String("asdf"), 关键字new的意思是"给我一个对象".
基本类型(primitive type)
使用new关键字得到的对象存储在"堆"里, 因此对于特别小并且简单的变量, 为了更加高效, 往往采用C++创建变量的方式, char c = 'x', 这样的变量拥有值并保存在"栈"里, 更加高效. Java中的基本类型有: boolean, char, byte, short, int, long, float, double, void. 除了int对应的包装器类型是Integer外, 其余的基本类型对应的包装器类型的拼法都是首字母大写.
高精度数字(high-precision number)
BigInteger/BigDecimal 大体上属于"包装器类"的范畴, 没有对应的基本类型. 采用调用方法而不是利用运算符来计算, 牺牲速度换取了精度.
Java中的数组(Array)
Java确保数组会被初始化, 而且不能再它的范围之外被访问. 当创建一个数组对象的时候, 实际上是创建了一个引用数组, 每个引用都会被自动初始化一个特定的值 -- null. Java看见null, 便知道这个引用还没有指向某个对象.
作用域(scoping)
对于基本类型, C++允许将较大作用域的变量隐藏起来, 而Java则会通告变量已经被定义过. 例如:
{
int x = 12;
{
int x = 30;
}
}
对象作用域(scope of object)
Java对象不具备和基本类型一样的生命周期. 用new创建的Java对象, 可以在作用域外存活, 但是引用只能在作用域里面使用. 同时Java中的垃圾回收器(garbage collection)会在对象不会再被引用时回收掉这块对象占用的内存, 因此不用担心内存溢出的问题.
创建新的数据类型:类(class)
用 class + 类型名创立一个新的类, 并在之后可以用new来创建这种类型的对象. 但是, 知道定义了该类的所有方法之前, 都不能向它发送任何有意义的消息, 即不能干其他的事情. (类的首字母要大写)
域(field)和方法(method)
域有时候被称为数据成员(data member), 方法又被称为成员函数(member function).
域可以是一个基本类型, 也可以是任何类型的对象, 且你可以通过该对象的引用来与它通讯. 但如果域是一个对象的引用, 则必须用构造器(constructor)来进行初始化. 基本类型的默认值
基本类型 | 默认值 |
boolean | false |
char | null |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
需要注意的是, 只有基本类型为域时才能被初始化为默认值, 而当其作为成员函数中的变量时, 得到的可能是任意值.
方法(method), 参数(argument) 和返回值(return value)
Java中的方法只能作为类的一部分来创建. 一般来说, 方法只有通过对象才能调用.
方法中的参数列表就像Java中的其他信息一样, 采用的都是对象形式. 像Java中任何传递对象的场合一样, 这里传递的也是引用. (基本类型除外)
Static关键字
当声明一个事物时Static时, 就意味着这个数据或方法不会与包含它的类的任何对象实例关联在一起.
class StaticTest{
static int i = 47;
}
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
//此时st1.i == st2.i == 47;
StaticTest.i++;
//只有静态成员可以通过类名直接访问, static 强调了变量的静态性.
//此时st1.i == st2.i == 48;
class StaticFun{
static void incr() { StaticTest.i++; }
}
//-----------------------------
StaticFun sf = new StaticFun();
sf.incr;
//-----------------------------
//-----------------------------
StaticFun.incr();
//-----------------------------
//以上两种方式对静态方法的调用是一致的
第一个Java程序
当创建一个独立运行的程序是,文件中必须存在某个类和文件同名, 且那个类中必须包含一个名为main()的方法.
public static void main(String[] args) {}
其中, public意指这是一个可由外部调用的方法. Java编译器要求args用作存储命令行参数, 所以main()方法中要有参数String[] args
注释文档
所有javadoc命令都只能始于"/**", 结束于"*/". 例如:
/**
* comment
* comment
* comment
*/
共有三种类型的注释文档, 类注释正好位于类定义之前; 变量注释正好位于变量定义之前, 方法注释正好位于方法定义之前.
注意: javadoc只能为"public"和"protected"成员进行文档注释, "private"和包内可访问成员的注释会被忽略掉.
javadoc还可以将HTML命令嵌入到它所生成的HTML文档中.例如:
/**
* <h1>blahblah</h1>
*/
一些标签实例
参考第一章末尾