第二章:一切皆对象

用引用操作对象

每种编程语言都有自己的操纵内存中元素的方式,在Java中一切都被视为对象,操纵的标识符实际上是对象的一个引用;可以将这一情形想象成用遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的链接。当有人想改变频道或者减小音量时,实际操纵的是遥控器(引用),再由遥控器来调控电视机(对象),如果想在房间里四处走走,同时仍能调控电视机,那么只需要携带遥控器(引用)而不是电视机(对象)。

此外,即使没有电视机,遥控器亦可以独立存在。也就是说,你拥有一个引用,并不需要有一个对象与它关联。因此,如果想操纵一个词或者句子,则可以创建一个Sting的引用:

String s;

但这里创建的只是引用,并没有指向对象。如果此时向s发送一个消息,就会返回一个运行时错误。这是因为此时s实际上并没有与任何事物相关联。因此,一种安全的做法是:创建一个引用的同时便进行初始化。

String s = "asdf";

这里字符串可以用带引号的文本初始化,通常是使用new关键字进行对象的初始化

可供存储数据的位置
  • 寄存器:最快的存储区,位于处理器内部
  • 堆栈:位于RAM(随机访问存储器),对象引用存储于此区域
  • 堆:一种通用的内存池(位于RAM区),用于存放所有的Java对象(通过new常见出来的对象)
  • 常量存储:常量值通常存放在程序代码内部
  • 非RAM存储:数据完全存活于程序之外,不受程序的任何控制
基本数据类型

基本数据类型不是通过new来创建的,创建的是一个并非引用的变量,这个变量直接存储值,并置于堆栈中

基本类型 大小 最小值 最大值 包装类型
boolean Boolean
char 16 bits = 2 byte Unicode 0 Unicode 2^16-1 Character
byte 8 bits -128(2^7) +127(2^7-1) 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

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

Java中的数组

Java中的数组是对象,当创建一个数组对象时,实际上就是创建了一个引用数组

作用域

作用域决定了在其内定义的变量名的可见性和生命周期,在Java中作用域由花括号的位置确定

{
    int x = 12;
    // only x is available
    {
        int y = 23;
        //both x and y is available
    }
    //only x is available,y is out of scope
}
对象的作用域

Java的对象不具有和基本类型一样的生命周期。当new创建一个Java对象时,它可以存活于作用域之外。

{
    String s = new String("Just is a string")
}// End of scope, but the refrence of s is still in memory

由new创建的对象,只要你需要,就会一直保留下去

基本成员默认值

若类的某个成员(字段)是基本数据类型,即使没有进行初始化,Java也会让其获得一个默认值

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

但是局部变量不会有初始值,必须手动初始化

Static关键字

类数据或类方法代表数据和方法只是作为整个类,而不是类的某个特定对象而存在的;一个Static字段对每个类来说都只有一份存储空间,而非Static字段则是对每个对象都有一个存储空间;而Static方法的一个重要用法就是在不创建任何对象的前提下就可以调用它

你可能感兴趣的:(第二章:一切皆对象)