Thinking in Java 读书笔记(二)

1.用引用操纵对象

创建一个String引用

// 这里创建的只是引用,并不是对象。如果此时向s发送一个消息,就会返回一个运行时的错误。这是因为此时的s实际上没有与任何事物相关联(即,没有电视机)
String s;
// 一种安全的方法:创建一个引用的同时便进行初始化
String s = "Hello Java!";

2.必须由你创建所有对象

存储到什么地方
  1. 寄存器
  2. 堆栈
  3. 常量存储
  4. 非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文件。

你可能感兴趣的:(Thinking in Java 读书笔记(二))