一切都是对象
1.我们所创建的对象其实都是一种对象引用。
例:String s = “abcd”; 其中s是一个引用,访问的就是abcd.
2.对象存储到哪?
名称 | 解释 |
---|---|
寄存器 | 处理器内部(不能自行控制) |
堆栈 | jvm里的虚拟机栈,他是通过堆栈指针进行对象的访问(存储对象引用) |
堆 | 用于存放所有的java对象,清理内存没堆栈清理效率快 |
常量存储 | 常量值(通常放在jvm的方法区内) |
非RAM区 | 可以理解为将数据存储在磁盘上 |
以下是我看的jvm的内部分布整理的图片:
特例:java里有些类型直接存储到堆栈里,而不是堆中,读取来更加高效(8大基本类型加布尔型和void)
基本类型 | 大小 | 最小值 | 最大值 | 包装类 |
---|---|---|---|---|
boolean | Boolean | |||
char | 16bit(2字节) | Unicode o | Unicode 2^16-1 | Character |
byte | 8bit(1字节) | -128 | 127 | Byte |
short | 16bit(2字节) | -2^15 | 2^15-1 | Short |
int | 32bit(4字节) | -2^31 | 2^31-1 | Integer |
long | 64bit(8字节) | -2^63 | 2^63 -1 | Long |
float | 32bit(4字节) | IEE754 | IEE754 | Float |
double | 64bit(8字节) | IEE754 | IEE754 | Double |
void | Void |
3.永远不要销毁对象(如果想知道销毁对象机制,搜索jvm的可达性分析过程)
3.1 作用域(可以理解为在{}内)
{
int x= 12;
{
int x = 96 ; //这地方不行,因为x已经在外部定义
}
}
额外说明 :
{
String s = new String(“a string”) ;
}
其中s这个引用外部无法访问,但是 a string 这个对象已经存在了
4.基本类型创建时,赋予的默认值
基本类型 | 默认值 |
---|---|
boolean | false |
char | ‘\u0000’ |
byte | (byte)0 |
short | (short)0 |
int | 0 |
float | 0.0f |
long | 0L |
double | 0.0d |
5.static关键字
这关键字的作用就是为了满足:
1.为某一个域分配单一存储空间,无需进行创建对象操作
2.希望某个方法不与包含他的类关联在一起。