1.用引用操纵对象
创建一个String引用
// 这里创建的只是引用,并不是对象。如果此时向s发送一个消息,就会返回一个运行时的错误。这是因为此时的s实际上没有与任何事物相关联(即,没有电视机)
String s;
// 一种安全的方法:创建一个引用的同时便进行初始化
String s = "Hello Java!";
2.必须由你创建所有对象
存储到什么地方
- 寄存器
- 堆栈
- 堆
- 常量存储
- 非RAM存储
特例:基本类型
基本类型 | 大小 | 最小值 | 最大值 | 包装器类型 |
---|---|---|---|---|
boolean | —— | —— | —— | Boolean |
char | 16-bit | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -2^15 | +2^15-1 | Short |
int | 32 bits | -2^31 | +2^31-1 | Integer |
long | 64 bits | -2^63 | +2^63-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | —— | —— | —— | Void |
boolean 类型所占存储空间的大小没有明确指定,仅定义为能够取字面值true或false
char c = 'x';
Character ch = new Character(c);
// 也可以这样
Character ch = new Character('x');
// Java SE5的自动包装功能将自动地将基本类型转换为包装器类型:
Character ch = 'x';
// 并可以反向转换:
char c = ch;
高精度数字
BigInteger支持任意精度的整数。
BigDecimal支持任意精度的定点数。例如,可以用它进行精确的货币计算。
3.作用域
{
int x = 12;
// Only x available
{
int q = 96;
// Both x & q available
}
// Only x available
// q is "out of scope"
}
Java是一种自由格式(free-form)的语言,所以,空格、制表符、换行都不影响程序的执行结果。
以下代码在C和C++中是合法的,但在Java中是不允许的。
{
int x = 12;
{
int x = 96;// Illegal
}
}
对象的作用域
{
String s = new String("a string");
}// End of scope
引用s在作用域终点就消失了。然而,s所指向的String对象仍继续占据内存空间。
不必要担心内存回收的问题。只需要创建对象,一旦不再需要,他们就会有自行消失。(避免了“内存泄漏”)
4.static关键字
静态类数据
class StaticTest{
static int i = 47;
}
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
//这里st1.i和st2.i指向同一存储空间,因此它们具有相同的值47.
静态类方法
ClassName.method();
class Incrementable{
static void increment(){
StaticTest.i++;
}
}
Incrementable sf = new Incrementable();
sf.increment();
// Or
Incrementable.increment();
5.Java包
使用关键字import导入。
一个特定类java.lang会自动导入到每一个Java文件。