用引用操作对象
每种编程语言都有自己的操纵内存中元素的方式,在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方法的一个重要用法就是在不创建任何对象的前提下就可以调用它
网友评论