博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Think in Java笔记(2)

Posted on 2014-12-17 20:14  Dr.函兽  阅读(84)  评论(0)    收藏  举报

第2章.一切都是对象

”如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。“
——Luduing Wittgerstein(1889-1951)

1. 创建对象

String s;

这只创造了一个引用,s是一个null pointer,除基本类型外所有类创建的对象都需要初始化后才能使用。

基本类型

基本类型 大小 最大值 最小值 包装器类型
bollean - - - Bollean
char 16 bits Unicode 0 Unicode 2^16-1 Character
byte 8 bits -128 +127 Byte
shaort 16 bits -2^15 +2^15-1 Short
int 32 bits -2^31 +2^31-1 Interger
long 64 bits -2^63 +2^63-1 Long
float 32 bits IEEE654 IEEE754 Float
double 64 bits IEEE654 IEEE754 Doublt
void - - - Void

基本类型直接在 中创建,所有数值类型都有正负号,不存在无符号的数据类型。

基本类型具有的包装器使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:

char c = 'x';
Character ch = new Character(c);

或者

Character ch = 'x';

Java SE5的自动包装功能将自动将基本类型转换为包装器类型。并可以反向转换:

char c = ch;

类中基本数据类型的字段即使没有初始化也会有一个默认值:

基本类型 默认值
boolean false
char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

2. 作用域(scope)

以下代码在C和C++中是合法的,但在Java中却不允许,编译器会报告变量x已定义过:

{
    int x = 12;
    {
        int x = 96;
    }
}

另外,Java对象不具备和基本对星一样的生命周期。

{
    String s = new String{"a string"};
}

引用s在作用域终点就消失了,然而s指向的对象仍继续占据内存空间。因此,在这段代码中,我们无法在作用域结束后访问这个对象。