Java的简单数据类型

数据类型

数据类型就是对内存位置的抽象表达。程序员可以利用多种数据类型:某些由编程语言定义,某些由外部库定义,还有些则由程序员来定义。很多编程语言都依赖于特定的计算机类型和对数据类型属性的具体编译实现,比如word和integer数据类型的大小等。另一方面,Java的虚拟机负责定义其内置数据类型的各方面内容。这就意味着不管Java虚拟机(JVM)运行在何等低级的操作系统之上,数据类型的属性都是完全一样的。
简单数据类型
简单数据类型是不能再简化的、内置的数据类型,由编程语言定义,表示真实的数字、字符和整数。更大、更复杂的数据类型可以采用简单数据类型的组合来定义。在大多数情况下,简单数据类型都具有其硬件等价物。比方说,int简单类型有时存放在32位硬件寄存器内。Java提供了几类简单数据类型表示数字和字符。
简单数据类型通常划分为以下几种类别:实数、整数、字符和布尔值。这些类别中又包含了多种简单类型。比如说,Java定义了两种简单类型:float和 double,它们都属于实数类别,另外4种简单类型:byte、short、int和long则都属于整数类别。此外还有一种简单类型char则归于字符类型。布尔值类别只有一种简单类型:boolean。表A详细列出了Java的简单数据类型.

表A Java简单数据类型
简单类型 大小 范围/精度 
float 4 字节 32位IEEE 754单精度 
double 8 字节 64位IEEE 754双精度 
byte 1字节 -128到127 
short 2 字节 -32,768到32,767 
int 4 字节 -2,147,483,648到2,147,483,647 
long 8 字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807 
char 2 字节 整个Unicode字符集 
boolean 1 位 True或者false 
Java的简单数据类型
Java中的所有数字变量都是有符号的,Java不允许数据类型之间随意的转换。只有数字变量之间可以进行类型转换。比如,boolean就不能转换为其他数据类型,而且其他数据类型也不能转换为boolean。
因为Java的简单数据类型都经过准确定义,而且直接内存访问也是不允许的,所以在Java语言中取消了sizeof运算符。
Java的简单数据类型并不是对象。为了采用面向对象方式对待Java简单数据类型,你需要首先用类封装它们。
封装类
Java 还提供了Byte、Short、Boolean、Character、Integer、Double、Float和Long等内置的封装类。这些封装(wrapper)类提供了很直观的实用方法。比如,Byte、Float, Integer、Long和Double类都具有doubleValue()方法,通过它可以把存储在类的实例中的值转换为Double类型。还有,所有的封装类都提供了静态的valueOf(String s)方法把给定的String转换为对应的简单类型。清单A的代码演示了这些封装类的一些用法。
简单数据类型初始化
在 Java语言中,简单数据类型作为类的成员变量声明时自动初始化为默认值,除非显式地声明。简单数据类型为某一方法声明局部变量时不会自动地初始化而且会导致编译器扔出类似以下的错误消息“Variable x may not have been initialized.(x变量没有初始化)”表B定义了Java简单数据类型的默认值。
表B Java简单数据类型的默认值
类型
默认值
boolean:false

Byte: 0

short:0

int:0

Long:0

Char:′u0000′

Float:0.0

double:0.0
Java简单数据类型的默认初始值
清单B 中的代码显示所有的Java简单数据类型都用做了Initialization类的成员变量。该例还显示Initialization类的构造器中局部声明了一个int变量。在不修改以上代码的情况下,编译器会在对以上代码进行编译的时候扔出错误。
一旦引发问题的代码行(那些引用未初始化变量导致错误发生的代码)被删除或者注释掉。程序成功编译和执行之后就会显示以下的结果:
byte: 0
short: 0
int: 0
long: 0
float: 0.0
double: 0.0
char: 0
boolean: false
我们还可以显式地初始化成员变量为其他值,如以下代码所示:
byte b = 5;
short s = 123;
int i = 1234;
long l = 12345;
float f = 123.45f;
double d = 12345.678;
char c = ′A′;
boolean z = true;
小结

Java定义了全套简单数据类型。此外,Java取消了其他变成语言中的硬件和编译器依附,允许程序员把注意力转移到其他问题上来。在下一篇文章里,我们将继续讨论某些经常用到的、Java定义的复杂数据类型,同时了解下如何利用它们来处理典型的编程问题。

Java的复杂数据类型
索引
同简单数据类型的定义一样,Java虚拟机(JVM)还定义了索引(reference)这种数据类型。索引类型可以“引用”变量,由于Java没有明确地定义指针类型,所以索引类型可以被认为就是指向实际值或者指向变量所代表的实际值的指针。一个对象可以被多于一个以上的索引所“指”。JVM从不直接对对象寻址而是操作对象的索引。
索引类型分成三种,它们是:类(class)、接口(interface)和数组(array)。索引类型可以引用动态创建的类实例、普通实例和数组。索引还可以包含特殊的值,这就是null 索引。null 索引在运行时上并没有对应的类型,但它可以被转换为任何类型。索引类型的默认值就是null。

类(Class)指的是定义方法和数据的数据类型。从内部来看,JVM通常把class类型对象实现为指向方法和数据的一套指针。定义class类型的变量只能引用类的实例或者null ,如以下代码所示:
MyObject anObject = new MyObject(); // 合法
MyObject anotherObject = null; // 合法
MyObject stillAnotherObject = 0; // 非法
接口
接口(interface)好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。比方说,假设我们定义了一个接口,名字是Comparable ,同时还定义了一个类SortItem,这个类实现了接口Comparable,那么我们可以编写以下的定义代码:
Comparable c = new SortItem();
假如Comparable 接口定义了一个方法: public void compare(Comparable item), 那么SortItem 类就必须提供compare 方法的实现,如以下代码所示:
public class SortItem implements Comparable
{
public void compare(Comparable item)
{
...method implementation here
}}
数组
Java数组(array)是动态创建的索引对象,这一点和类非常相似,此外,同类一样,数组只能索引数组的实例或者null ,如以下代码所示:
int[] myIntArray = new int[5];
int[] anotherIntArray = null;
数组是Object类的继承,这样,Object类的所有方法都可以被数组调用。数组对象由元素组成。元素的数目也可以为0,在这种情况下称做数组为空。所有的数组都是从0开始对元素编号的,这意味着数组内的第1个元素的索引编号是数字0。所有对数组元素的访问都会在运行时上接受检查,如果试图使用编号小于 0或者大于数组长度来索引元素就会产生ArrayIndexOutOfBoundsException异常并被扔出。
数组的元素按整型值索引,如以下代码所示:
int[] myIntArray = { 9, 5, 6 };
int int1 = myIntArray[0];
int int2 = myIntArray[1];
int int3 = myIntArray[2];
数组对象的长度是不变的。为了改变数组变量的长度,你必须创建另一个数组并赋给变量,如以下代码所示:
int[] myIntArray = { 9, 5, 6 };
System.out.println("myIntArray length = " +myIntArray.length); // 输出结果是3
myIntArray = new int[] { 3, 6, 4, 2, 8 };
System.out.println("myIntArray length = " +myIntArray.length); // 输出结果是5
复合数据类型
Java语言不支持结构(struct)或联合(union)数据类型。它的复合数据类型是通过类或者接口来构造的,类提供了捆绑数据和方法的方式,同时可以限制对类的私有数据的访问。比如说,如果用C语言,那么汽车(car)就可以如下代码所示用结构来定义:
struct Car
{
char* model;
char* make;
int year;
Engine* engine;
Body* body;
Tire** tires; 
}
以上的示范代码还隐含采用了先前定义的引擎(Engine)、车身(Body)和轮胎(Tire)结构。而采用Java语言,汽车的定义如清单A所示。
以上的示例还假设我们以前都已经定义过CarModels和CarMakes接口以及Engine、Body、Tire、DurangoEngine、DurangoBody和GoodyearTire类。

复合数据类型的初始化

复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如“new”之类)应用到类变量的时候被调用。构造器被调用之前,类的各个成员被初始化为各自的默认值或者显式赋予的初值。清单B 中的程序代码对以上过程进行了解释。
在清单B的代码中,当myClass 的实例用new 运算符创建时,构造器public MyClass()即被调用促使类对自身初始化。初始化的过程如下所示:
声明“int myInt;”给myInt赋默认值0。 
声明“AnotherClass anotherClass;”给anotherClass分配默认值null。 
构造器内的声明“myint = 2;”给myInt赋值为2。 
预定义复合数据类型
Java 语言包含了大量的预定义复合数据类型。其中之一的String 类属于java.lang 包。String 类提供的方法执行常用的字符串操作,比如length()、 substring(int beginIndex)、toUpperCase()、toLowerCase()、equals() 等等。另一种常用的Java复合数据类型是Vector 类,它属于java.util 包。Vector 类定义的方法执行可扩展对象数组的常用操作。比如add(int index, Object element)、elementAt(int index)、isEmpty()和remove(int index)等。这些就是一小部分预定义复合数据类型的代表示例。在以后的文章里我们还会进一步对预定义复合数据类型进行讨论。

小结

除了简单数据类型之外,Java语言中还定义了本文所讨论三种索引数据类型。Java还运行开发人员自己用简单和索引数据类型组合起来创建复合数据类型。用户定义的组合数据类型和Java预定义复合数据类型一道为程序员提供了强大的面向对象工具包。在接下来的文章里,我们会进一步详细地讨论大多数常用的复杂数据类型及其可用操作。我们会首先从Java所特有的集合框架讲起。

文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/4_webprogram/jsp/jsp_js/20090304/157777.html

JAVA的简单数据类型和复合数据类型相关推荐

  1. 7-基本数据类型和复合数据类型(引用数据类型)

    目录 1.基本数据类型 1.1.逻辑型--boolean 1.2.文字型--char和String 1.2.1.char 1.2.2.String 1.3.整数类型:byte,short,int和lo ...

  2. php四种标量,php的标量数据类型和复合数据类型,php四种标量

    php的标量数据类型和复合数据类型PHP的标量数据类型和复合数据类型, 标量数据类型 数值类型 整型$ a=20 浮点型(小数)$ a=1.2 布尔类型 $ a=trueecho $ a//输出1 $ ...

  3. oracle组合数据类型,oracle复合数据类型-相关方法

    oracle提供了一些内置的函数和方法来操作复合数据类型. 一.count 返回集合中的元素的个数 declare type ename_table_type is table of varchar2 ...

  4. oracle组合数据类型,oracle复合数据类型-ZT

    http://www.itpub.net/viewthread.php?tid=610297&extra=page%3D1%26amp%3Bfilter%3Ddigest&page=1 ...

  5. java复合数据类型_复合数据类型

    1.列表,元组,字典,集合分别如何增删改查及遍历. 答: (1)列表的增删改查: 增:使用append()方法在列表的末尾增加新的元素 删:使用del语句来删除列表的元素 改:通过下标索引找到值然后直 ...

  6. java变量中不属于复合类型的数据类型是_2006新版JAVA题解(JAVA简单数据类型)...

    2006新版JAVA题解(JAVA简单数据类型) 2007年1月22日来源:233网校网校课程 在线题库评论 分享到 1.下列哪一个是合法的标识符: A.12class; B.+viod; C.-5; ...

  7. java中的复合数据类型是什么_【填空题】类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素。一个类的实现包括两部分:____和_____....

    [填空题]类是Java中的一种重要的复合数据类型,是组成Java程序的基本要素.一个类的实现包括两部分:____和_____. 更多相关问题 [名词解释] 观叶树木 [单选] 开花时有浓郁香气的树种是 ...

  8. java 数据类型分为_JAVA中分为基本数据类型及引用数据类型

    byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...

  9. JAVA可以赋值分数吗_Java数据类型知多少?

    c c++趣味编程全彩印刷基本游戏 70.4元 包邮 (需用券) 去购买 > Java数据类型 1.八大基本数据类型类型储存需求取值范围byte(字节型)1字节-128~127 short(短整 ...

最新文章

  1. Pytorch:transforms的二十二个方法
  2. 对称矩阵、Hermite矩阵、正交矩阵、酉矩阵、奇异矩阵、正规矩阵、幂等矩阵
  3. 神奇的问题记录【SqlDataAdapter Fill DataSet】
  4. 九、股票收盘价与滑动平均线MA
  5. 计算机专业论文范文精选,计算机毕业论文提纲范文精选
  6. python慢为什么用的人还很多_为什么是所有人比python标准慢得多吗?
  7. php dom 丢失内容,PHP DOMDocument缺失
  8. python实现抢劵_用Python实现微信自动化抢红包,再也不用担心抢不到红包了
  9. Unable to execute dex: GC overhead limit exceeded
  10. 华为P50系列即将登场:曝线下门店已开始准备样机、物料
  11. JRuby 1.6.5发布 Ruby语言的Java实现
  12. 计算机配置windows设置脚本,如何设置脚本操作
  13. R语言使用Epi包的的ROC函数对多变量进行ROC分析并可视化ROC曲线、寻找最佳阈值(threshold、cutoff)、在可视化曲线中添加最佳阈值点
  14. CSP模测(一)A卷
  15. 【C++】packaged_task的用法实例
  16. 安卓Apk下载以及静默安装
  17. 选拔赛3---7-10 红豆生南国
  18. 阿里云服务器1核1G内存1M带宽能放几个网站及多少流量
  19. c语言求三个整数的积,反汇编学习-C语言实例解析精粹-实例3求整数之积
  20. html页面tree方法,etree.html的用法问题

热门文章

  1. IP RAN基站回传中的三大组网方案
  2. Android录制声音文件(音频),并播放
  3. 用VC++进行MapX二次开发::之三------使用MapX工具
  4. 监控平台设计之GraphitePrometheus存储
  5. astah_激活步骤
  6. SecureCRT自动保存日志设置
  7. lt;#37;= %、lt;#37; %、lt;#37;@ %、lt;#37;:%和lt;#37;# %的区别
  8. 软件运行的好好的,突然黑屏啥也进不去了
  9. Rewritecond介绍
  10. starUML使用教程