重修Java--数据类型

来源:互联网 发布:怪物猎人ol n卡优化 编辑:程序博客网 时间:2024/03/29 20:46

你总要从某个地方开始,不是吗?

数据存储的位置

java是面向对象的程序设计语言,并且是纯面向对象的。即便是那些常用的基本类型,也是面向对象的,只不过由于它们经常使用,是特殊的类型,所以可能表现的不太一样。而这些对象一般存储的地方大概有以下
(1)寄存器:最快的存储区域,位于处理器的内部,数量也十分有限,所以寄存器是根据编译器的需要来分配的。无法在程序中控制这些寄存器。
(2)栈:驻留在常规的RAM(随机访问存储器),其速度仅次于寄存器,通过'堆栈指针'获得处理的直接支持。指针下移就会创建新的内存,上移就会释放那些内存。创建程序时,Java编译器必须准确的知道堆栈内存保存的所有的数据的‘长度’以及‘存在时间’。这是因为它必须生成相应的代码,以便向上或者向下移动指针。这种方式影响程序的灵活性,所以有些数据保存在堆栈中——特别是对象的句柄/引用,但是Java对象并不放在其中。
(3)堆:一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和栈的区别在于编译器不必知道要从“堆”中分配多少内存,也不必知道数据会存在多久的时间,所以堆中存放数据会有很高的灵活性。并且代码执行中,数据自动保存。代价就是在堆中分配空间会花掉更长的时间。
(4)静态存储:词中“静态”是指“位于固定的位置”(也是在RAM中)。在整个程序运行期间,静态存储区域的数据随时等候调用。记住,可以用static指定对象的某个特定的元素是静态的,但是Java对象本身永远不会置入静态存储空间
(5)常数存储:常数值通常直接位于程序代码的内部。原因是它们永远不会改变,很安全。有时常数值需要严格的保护,可以考虑将数据放入只读存储器ROM中。
(6)非RAM存储:若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制之外。其中最主要的例子解释“流式对象”和“固定对象”。流式对象——对象变成字节流,通常发送给另一台机器。而对于固定对象——将对象保存在 磁盘中。对于这些类型的数据,一个特别的技巧就是它们能存在于其它的媒体中。一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。

数据类型

使用最多的数据类型——基本数据类型
主类型包装类大小 最小值 最大值
booleanBoolean1位
byteByte         8位-128/-2^7127/2^7-1
shortShort16位-2^152^15-1
intInteger32-2^312^31-1
longLong64-2^632^63-1
floatFloat32
doubleDouble64
charCharacter16

引用类型
外加两个高精度类型:BigInteger和BigDecimal不能使用运算符,只能调用方法实现运算
数组:Java的发展除了跨平台也得益于他的安全性,数组就很好的体现了这一点
创建数组对象的时候,实际创建的是一个句柄数组。每个句柄都会自动初始化一个特殊值,并带有自己的关键字:null(空),一旦Java看见null,就知道该句柄并未指向一个对象。在正式使用前,必须为每个句柄分配对象,不然当你试图访问为null的句柄的时候,就会爆出运行期异常(空指针)。
新建数据类型:类
一切都是对象,而类就是来决定这个对象的外观和行为的。至于不用“Type”而是“Class”的原因大概是为了表达这么一个意思:“我准备告诉你一个新类型的外观”。每个class大致都包含有ClassName{属性,构造器,方法}
数据 转型问题:

       对主数据类型的任何算数或者按位运算,只要它们”比“int小(char、byte、short),那么在正式的执行运算之前都会转换成值int。那么最终生成的值就是int类型,当要将这个值付给较小的类型的时候,就必须使用“造型”。那么在这个过程中可能会出现信息丢失的情况,所以记住每种主要类型的大致范围还是有必要的。
       通常表达式中的最大的数据类型决定了表达式最终结果的大小的那个类型。比如float类型和double类型运算那么最终的结果就是double类型的。int和long运算最终的结果的类型就是long类型。

0 0