今天起,就开始了对编程思想的学习了,希望以后能把生疏的、不懂的内容知识记录到这里,一来和大家分享讨论,二来自己的印象也深一些。
一、java存储数据
1、寄存器
是最快的存储区,位于处理器内部。
2、堆栈
对于存储在堆栈中的数据,java系统会清楚的知道这些数据的生命周期的,这样,就可以根据数据的作用区域来判断数据的生面周期,从而销毁没有用的数据。一般,对象引用尤其存储在堆栈中,同时,基本类型也是存储在堆栈中的。
3、堆
一般java对象被存储在堆中。与堆栈的最大区别之处,我觉得就是:java系统不能得知存储在堆中的数据的生命周期。因此,需要垃圾回收器来监视所有存于堆中的对象,并辨别哪些不会被引用的对象,之后释放这些对象的空间。
4、常量存储
常量值通常直接存放在程序代码的内部。
5、非RAM存储
数据完全存活于程序之外。两个基本的例子是流对象和持久化对象。
流对象:对象被转化成字节流,通常被发送给另一台机器。
持久化对象:已经存储到数据库或保存到本地硬盘中的对象。
6、关于堆和堆栈的区别举例
- Code:
-
public
class
Test { -
public
void
aa (){ -
String s =
new
String(); - System.out.print(s);
- }
-
public
void
bb (){ -
System.out.println(
“s引用已经超出作用域”
); - }
- }
对于对象和对象引用来说,引用因为存储在堆栈中,因此有生命周期,但是,对象存储在堆中,没有生命周期。因此,在作用域消失的时候,引用生命周期结束,但是对象没有消失,对象只是不能再被访问了。要想销毁对象,要用到java中的垃圾回收器。
二、java中引用操作对象
初始化一个对象的时候,我们都是用:
-
String s =
new
String();
这句话的意思是:初始化一个String类型的实例,其中,s 是引用,相当于c++中的指针,指向申请的这个String对象。而开辟的一个s引用和一个String对象存储的位置是不同的。s 存储于上面提到的堆栈中,而开辟的对象存储于堆中。
如果我们用下面的方法来定义一个对象的引用,与上面有什么区别:
- String s ;
这里的区别的就是,只是拥有一个String类型的对象的引用,并没有开辟String对象空间。
建议定义一个类的时候,初始化类的变量。
三、static 关键字
static关键字可以修饰成员变量,也可以修饰类的方法。
1、static修饰方法的时候,主要目的是为了让这个方法可以不用通过实例化对象就直接调用。
2、static修饰成员变量的时候,一方面与修饰方法的作用相同,此外,还应该注意的是:static关键字修饰的变量只有一份存储空间。例子如下:
-
public
class
bb{ -
public
static
int
x =
0
; -
public
static
void
main(String args[]){ -
bb b1 =
new
bb(); -
bb b2 =
new
bb(); -
//将b1的x值赋值为1,那么b2的x值肯定也会变
-
b1.x =
1
; - System.out.print(b2.x);
- }
- }
以上输出 1 。
*
非static字段则每个对象对应一个存储空间