java 编程思想的学习笔记 - 第二章 一切都是对象

由于这几天工作比较忙,没顾得上学习,接着第二章学习

一切皆是对象

用引用操纵对象

Java 语言的一个特性:字符串可以用带引号的文本初始化。

 String s = "asdf";  创建一个引用的同时便进行初始化。

必须由你创建所有对象

String s = new String("asdf"); 


存储到什么地方 (重点!)

程序运行的时候有六个不同的地方可以存储数据:

1.寄存器(处理器内部),这是最快的存储区,但是数量及其有限,所以是编译器对寄存器直接进行分配的,你不能直接控制,在程序中感觉不到

2.堆栈(位于RAM即随机访问存储器), 通常使用它的"堆栈指针" 可以从处理器那获得支持,堆栈指针若向上移动则释放那些内存,若向下移动则分配新的内存,这是一种快速有效的分配内存的方法,仅次于寄存器。创建程序时,java编译器必须知道存储在堆栈内部的数据的确切大小和生命周期。因为它必须生成相应的代码,以便上下移动堆栈指针。这一约束限制了程序的灵活性,所以虽然某些java数据存储在堆栈中---特别是对象引用,但是java对象并不存储在其中。

3.堆 一种通用型的内存池 ,也在RAM区,用于存放所有的java对象。堆不同于堆栈的好处是:编译器不需要知道从堆里分配多少存储区域,也不必要知道存储的数据在堆里存活了多长时间。因此在堆里分配存储有很大的灵活性,当你需要创建一个对象时,直接New 写一行简单的代码,当执行这段代码时,就会自动在堆里进行存储分配。当然这种灵活性是需要付出代价的,在堆中存储对象比堆栈中存储需要花费更多的时间。

4.静态存储,这里的静态存储是指在固定的位置 (尽管也在RAM中),静态存储里存放了程序运行中一直需要的数据,可以用Static标识一个对象的特定元素是静态的,但是java对象本身不会存储在静态存储里。

5.常量存储,常量通常直接放在程序代码内部,这样做是安全的,因为他们不会改变,有时在嵌入式系统中 ,会将常量本身和其他部分隔离开,这中情况下可以将其存放在ROM(只读存储器)中
6.非RAM存储 ,如果数据完全存活于程序之外,那它可以不受任何程序的控制,在程序没有运行时也可以存在。其中两个基本的例子就是“流对象”和“持久化对象”,在流对象中对象转化为字节流,通常发送给另一台机器,在持久化对象中,对象被存放到磁盘中

特例:基本类型(primitive type

永远不需要销毁对象

大多数过程型语言都有作用域(scope)的概念。作用域决定了在其内定义的变量名的可见

性和生命周期。在 C、C++ Java 中,作用域由花括号的位置决定。例如:

 

{

int x = 12;

// Only x available

  {

int q = 96;

// Both x & q available

  }

// Only x available

// q “out of scope”

}

在作用域里定义的变量只可用于作用域结束之前

对象作用域(scope of object

假如你有下面的代码:

{

      String s = new String("a string");

} // End of scope 

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

如果 Java 让对象继续存在,那么靠什么才能防止这些对象填满内存空间,进而阻塞你的程序呢?这正是 C++里可能会发生的问题。则正是 Java 神奇之所在。Java 有一个垃圾回收器”,用来监视用 new 创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以便供其它新的对象使用。也就是说,你根本不必担心内存回收的问题。你只需要创建对象,一旦不再需要,它们就会自行消失。这样做就消除了这类编程问题:即所谓的“内存溢出”,即由于程序员忘记释放内存而产生的问题。

创建新的数据类型:类 class

域(field 变量吧)和方法(method

每个对象都有用来存储它的域的空间;域不能在对象间共享,下面是一个具有某些域的类:

class DataOnly {

int i;

float f;

boolean b;

}
























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值