一切都是对象(一)

来源:互联网 发布:淘宝c店全屏装修 编辑:程序博客网 时间:2024/06/06 08:35
尽管Java是基于C++的,但是在相比之下,Java是一种更加纯粹的面向对象程序设计语言。

1.用引用操作对象
Java将内存中的一切元素都视为对象,操纵的标识符其实是对象的一个“引用”。可以拥有一个引用,并且不一定要有一个对象与之关联。例如创建一个String引用: String s。安全的做法是在创建一个引用的同时就对它进行初始化。

2.必须由你创建所有对象
通常在Java中用new操作符 来实现一个引用和一个新的对象的关联,它的意思是给出一个新对象。

2.1存储到什么地方
程序在运行时候,数据被存储在五个不同的地方。
1) 寄存器:处于 处理器内部,是最快的存储区,数量有限,根据需求进行分配。
2) 堆栈
3) 堆
4) 常量存储
5) 非RAM存储

2.2特例:基本类型
Java中采取 和 C++相同的办法,不用new创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并且存放在堆栈中,因此更加高效。Java中的每种基本类型所占空间大小是固定的,而这种占存储空间大小的不变性也是Java语言比其他大多数语言编写的程序更具有可移植性的原因之一。
基本类型具有的包装器类,可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:Character ch=new Character(‘x’); 从Java5开始自动包装 功能将自动将基本类型装换为包装器类型,反向转换也可以。
Character ch=’x’; char c=ch;
Java提供了2个用于高精度计算的类:BigInteger和BigDecimal。它们大体上属于包装器的范畴,却没有对应的基本类型。BigInteger支持任意精度的整数,可以准确 表示任何大小的整数值;BigDecimal支持任意精度的定点数,比如用之于货币的精确计算。

2.3Java中的数组
在Java中会确保数组被初始化,在它的范围之外不能被访问。实现范围检查,是以在数组上少量的内存开销和运行时下标检查为代价,但是却换来了安全性和效率的提高。
当创建一个数组的时候,实际上是创建了一个引用数组,并且每个引用都被初始化成一个特定的值。在使用引用前,必须要为它指定一个对象,否则会报错。如果是创建存放基本类型的数组,编译器 会把数组中所有的元素初始化全部置零。

3.永远不要销毁对象

Java为我们完成了销毁对象所对应的所有清理工作,大大简化如何销毁对象这个问题。

3.1作用域
作用域决定了其内定义的变量名的可见性和生命周期,在Java中,作用域由花括号的位置决定。

int x=12; //x可用{     int q=96;     //x和q都可用}//只有x可用

由上述代码可知,作用域内定义的变量只能在作用域结束前使用。

3.2对象的作用域
Java对象不具备和基本类型一样的生命周期。当使用new创建一个Java对象时,它可以存在于作用域之外。

{     String s=new String("a string");}//引用s消失

虽然引用s消失,但是它指向的String对象仍然占据内存空间,而且这个 对象在 作用域之后便无法访问,因为引用已经超出了作用域的范围。事实上,Java中创建的对象可以一直保存下去,对于对象的释放工作,则由垃圾回收器完成,Java消除了内存泄漏问题。

4.类
类决定了某一类对象的外观和行为。格式如下:

class  类名{}

可以使用new来创建类的对象,但是在具体定义类的方法前,类是没有什么具体的作用的。

4.1字段和方法
类中可以设置 两种类型的元素:字段和方法。字段可以是任何类型的对象,也可以是基本类型的一种。如果字段是某个对象的引用,那么必须初始化该引用,以便让其与具体的对象关联起来。每个对象 都有存储其字段的空间,普通字段不能在对象中共享。当基本数据类型的变量作为类的成员使用时候,Java才确保给其默认值,但这对于局部变量是不适用的。

0 0
原创粉丝点击