记录学习使用,欢迎留言讨论(如果想要知道完整的知识请查看java编程思想第二章的内容)
首先一切的java代码都是写在对象中的
存储位置
- 寄存器——也就是CPU内,C语言、c++允许寄存器的分配方式
- 堆栈——位于RAM中,速度仅次于寄存器。在堆栈内的所有项都必须知道其的确切生存周期,基本数据类型就存储于栈中。
- 堆——指内存池,也属于RAM。用于存放对象,对于引用类型其对象的引用存储在栈中,而对象存在堆中。Date t = new Date(); 此处t为引用而其真实对象存储于堆中
- 常量存储——常量值通常直接存储于程序代码内部,这样比较安全。
- 非RAM存储——数据存活于程序之外,不再受其控制。比如对象流,将一个对象序列化之后持久储存于磁盘上。
作用域
在java中在作用域里定义的变量只能用于作用域结束前。(作用域由花括号的位置决定{})
{// 第一个作用域开始位置
int x = 1;
int y = 2;
{// 第二个作用域开始位置
int q = 3;
// 在此处有效的变量为x、y、q因为第二个作用域包含在一中
// C语言和c++可以在第二个作用域定义x、y但是java不行
System.out.println(x+" "+y+" "+q);
}// 第二个作用域结束位置
// 此处只有xy有效
System.out.println(x+" "+y);
}// 第一个作用域结束位置
小知识点:System.out引用的是System中的静态对象PrintStream(PrintStream是打印流),此处通过System调用PrintStream在调用其方法。
对象作用域
{
String s = new String("hello");
}
此处引用s在作用域结束就消失了,但是其对象任然存放在堆中,等待使用。此处唯一的引用s都已经消失了,java的垃圾回收机制会自动将其内存释放。
基本成员默认值
对于基本数据类型在作为成员变量使用时,java会确保其默认值int——为0,boolean——false。不是作为成员变量使用其int的默认值会为一个随机数,但是由于未初始化在java编译器中不能通过编译除非执行时省略校验。
数组的默认值int[]数组每个都为0,boolean[]每个都为false。
小知识点:子程序——C语言、C++中的函数——java中的方法
static关键字
static 关键字有两个作用:
- 为某个特定域分配单独的空间
如:
class A{
static int X = 47;
}
此后无论创建多少个对象,他们都共享成员变量X
- 可以不创建对象就调用方法
class B{
public static void hello(){
System.out.println("hello");
}
}
此后只要能访问B类就可以直接调用其 方法。
B.hello();
// 结果为:hello