第二章: 一切都是对象

Java是存粹的面向对象语言,一切都是对象。

Java内存分配方式

在Java内部,总共有这么几种储存数据的地方:
寄存器,堆栈,栈,常量存储区,磁盘。(寄存器>堆栈>栈)

寄存器

寄存器读写读写速度最快,有以下几种特点:

  • 无法通过程序控制。
  • 对程序员来说是透明的。

堆栈

读写速度仅次于寄存器,位于RAM(通用随机存储器)中,用于存储引用

  • 堆栈指针上(下)移动,释放(分配)内存。
  • 存储在堆栈内的数据有确定的生命周期,以便堆栈指针上下移动,进行内存的管理

基于引用的特性,Java可以准确的知道何时为某个引用分配内存,何时可以释放该引用。

,用于存储对象,位于RAM中,读写速度次于堆栈,但是在内存分配上,比堆栈灵活,其代价就是,用进行内存存储分配和清理要比堆栈慢。

  • 分配内存较为灵活
  • 无需知道堆内数据的生命周期

堆的特性适合存储对象,每一次进行new操作,都会产生一个对象,同一个类可以有无数个对象,因此,一个灵活分配内存的容器是至关重要的。

但不是全部的对象都存储在堆中,在java中一切皆为对象,对于Java的基本数据类型,其对象的分配如果用new的话,显得并不是特别高效。于是Java定义基本数据类型的对象储存在堆栈中,不用new处理基本数据类型。

常量存储区

常量存储区,位于ROM(只读存储区)中,用于存储常量。

非ROM存储

类似与磁盘,硬盘等存储。位于该处的数据与程序的运行状态无关,无论程序是否启动或和关闭,数据都可以保持自己的状态。

引用(reference)与对象

Java中一切皆对象,引用类似于handle,是用于管理对象的工具。

1
String s;

上面的例子就定义了一个引用,但是改引用还未初始化,默认为NULL

1
String s = "Hello World";

上面的例子,将引用s指向一个字符串,于是,我们可以通过引用来对对象进行操作。

销毁机制

每个引用都有自己的生命周期,可通过Java的作用域(scope)机制确定。
当引用“死去”后,其指向的对象不一定会,同时被销毁,可能会保留到程序执行结束,这些没有引用指向的对象,由Java的垃圾回收器来管理,我们无需操心,这也是Java的神奇之处。

static静态方法与静态属性

利用关键字static来进行声明。其又称作类方法,类数据。主要有以下特点:

  • 无需利用new来为其创建内存,在程序运行时,Java会自动为其分配空间
  • 无需声明一个对象就可以进行调用(通过类名来调用)。
  • 无论为某个类声明多少对象,其内部的类方法,类属性都只有一个存储空间
1
2
public static void main(String args[]){
}

main函数就是一个典型的静态方法,做为一个程序的一个入口使用。

本文标题:第二章: 一切都是对象

文章作者:定。

发布时间:2017年5月4日 - 00时05分

本文字数:1,318字

原始链接:http://cocofe.cn/2017/05/04/第二章: 一切都是对象/

许可协议: Attribution-NonCommercial 4.0

转载请保留以上信息。