Java基本数据类型

Java是一种强类型语言,即Java中的每一个变量都必须有一个声明的类型。

Java中,有两种类型:

基本类型(primitive type) 有八种

-          逻辑类   boolean

-          文本类   char

-          整数类   byte, short, int, long

-          浮点类   double, float

 

两类:数值型(numeric type)

布尔型(boolean type)

复合数据类型(reference type)

三种:类类型(class type)

接口类型(interface type)

数组类型(array type)


一.逻辑类──boolean

C语言不同,Java定义了专门的布尔类型。布尔类型的文字只有两个,它们是truefalse。布尔类型的变量使用关键字boolean来定义。布尔型的文字和变量常常被用在条件判断语句中。

注意:在Java中,布尔型变量不是数值型变量,它不能被转换成任意一种类型。数值型变量也不能被当作布尔型变量使用。这一点和C语言完全不同。

以下是一个有关boolean类型变量的声明和初始化:

boolean truth = true;

二.文本类──charString

1、使用char类型可表示单个字符。一个char代表一个16-bit无符号的(不分正负的)Unicode字符。一个char文字必须包含在单引号内(‘’)

‘a’

‘\t’       一个制表符

‘\u????’   一个特殊的Unicode字符。????应严格按照四个16进制数字进行替换

和在C语言中一样,Java也支持转义字符。Java中使用“\”将转义字符与一般的字符区分开来。

Java中的转义字符

转义序列

含义

\b

退格

\t

水平制表

\n

换行

\f

换页

\r

回车

\

双引号

\

单引号

\\

反斜杠

 

2String不是原始类型,而是一个类(class),它被用来表示字符序列。字符本身符合Unicode标准,且上述char类型的反斜线符号适用于String。与CC++不同,String不能用 \0作为结束。

String

-          不是一个原始数据类型,它是一个类

-          具有用双引号引用的文字

“The  quick brown fox jumped over the lazy dog.”

-             可按如下情形使用:

String greeting =  “Good Morning!! \n”

String err_meg = “ record not found !”;

三.整数类──byte, short, int, long

Java编程语言中有四种整数类型,每种类型可使用关键字byte, short, intlong中的任意一个进行声明。

整数类型的文字可使用十进制、八进制和16进制表示,如下所示:

 

2       十进制值是2

047      首位的0表示这是一个八进制的数值

0xBBAC  首位的0x表示这是一个16进制的数值

注意──所有Java编程语言中的整数类型都是带符号的数字。

整数数据类型—范围

Integer Length  Name or Type  Range

 8 bits         byte         -2 7 ... 2 7 -1

 16 bits        short        -2 15 ... 2 15 -1

 32 bit         int          -2 31 ... 2 31 -1

 64 bits        long         -2 63 ... 2 63 -1

 

 

int是最常用的整数类型。但是如果你要表达很大的数,比如在地理信息系统中用整数地图上点的坐标,或表示国家财政预算,就需要用到长整型long

整数类文字属int类型,除非在其后直接跟着一个字母“L”。L表示一个long值。请注意,在Java编程语言中使用大写或小写L同样都是有效的,但由于小写l与数字1容易混淆,因而,使用小写不是一个明智的选择。上述文字的

long的形式如下:

2L        十进制值是2,是一个long

077L      首位的0表示这是一个八进制的数值

0xBAACL  前缀0x表示这是一个16进制的数值

324932432023L

423432L

 

而短整型short和字节型byte常常用来处理一些底层的文件操作、网络传输,或者定义大数组。

Java的整数类型不依赖于具体的系统,每种类型在任何一种机器上占用同样的存储空间,比如,int总是32位,long总是64位。在C++中,整数类型的大小是和具体的机器有关的,在SPARC机上运行正常的C++程序到了Intel 586机上就可能会溢出,因为在SPARC机上,C++int64位的,而Intel 586机上的C++int32位的。但在Java中,这个问题不存在了,因为Java的整数类型不依赖于具体的系统。

四、浮点类──floatdouble

-          缺省为double

-          浮点变量可用关键字floatdouble来声明

-          如果一个数字文字包括小数点或指数部分,或者在数字后带有字母Fffloat)、Dddouble),   则该数字文字为浮点。

-          浮点文字包括小数点或下列各项之一

-          Ee  (增加指数值)

-          Ff  (float)

-          Dd  double

-          例如:

3.14            一个简单的浮点值(a double

3.02E23         一个大浮点值

        2.718F        一个简单的float长度值

     123.4E+306D  一个大的带冗余Ddouble

浮点数据类型具有下列范围:

     浮点长度               名称或类型

      32 bits                   float

 64 bits                   double

注意──浮点文字除非明确声明为float,否则为double

如果您希望速度快一些,或者占用的空间少一些,您可以选择float型。

 数据类型转换

按照Java的语言规范,转换是指隐式的把一个表达式的类型(或值)改变成该表达式的周围的上下文能够接受的类型。有时候这需要一个运行时期的操作,以检查转换是否有效,或者把表达式的运行时期值转换成适合新类型的形式。

转换规则:

1.两个操作数中有一个是double型,那么在运算前将另一个操作数也转换成double型。

2.两个操作数中有一个是float型,那么在运算前将另一个操作数也转换成float型。

3.两个操作数中有一个是long型,那么在运算前将另一个操作数也转换成long型。

 

显式的类型强制转换:

double result;

result=1.5+3/2;

结果是2.5    因为3/2按整数运算计算,结果是1

强制转换:

result=1.5+(double)3/2;

结果是3

 

能将任何一种类型强制转换成其他类型,但必须小心以免丢失数据信息。显然,将较长的整型数据转换为较短的整型数据很有可能丢失信息。如浮点类转化成整数一样。

当位数少的类型转化为位数多的类型时,自动类型转换

byte-  short  int  long  float  double从前向后自动转换

当位数多的类型转化为位数少的类型时,强制类型转换

 

 、变量、说明和赋值

变量是内存中的一种存储位置。它用标识符标识,您可以通过这个标识符来修改其中存储的值。变量有相应的类型,这个类型是编译时期类型。这种类型或者是基本类型,或者是复合类型。基本类型的变量总是拥有那个确定的基本类型的值。

1、 java变量的定义

Java中,变量在使用之前必须要先定义。变量定义的格式如下:Java中的所有类型,除了null类型以外,都可以定义变量。

数据类型标识符[,标识符]

数据类型是指定义何种类型的变量,它必须是有效的Java类型;标识符则是要定义的变量的名称,它必须是Java中合法的标识符。方括号表示可选,在一条变量定义语句中,您可以定义一个或多个变量,多个变量中间用逗号隔开。

下面给出了一些变量定义的例子:

byte recordSize;

short salary;

int studentsOfPKU=80;

long planetNumber;

float scoreofStudent=45.23f;

double distanceEarthToMoon;

char firstNameOfChinesePeople;

boolean isBoy;

注意:不能用Java中的关键字作为变量名。

2变量的初始化

Java程序中每个变量在使用前必须有一个值。Java中不能引用没有值的变量,程序给出了一个错误的例子。

class Test

{

static int x;

public static void main(String[] args)

{

int x ;

int j = x;

}

}

会产生如下的编译错误:

Variable 'x' may be used before initialization

(变量尚未初始化就被使用)

Java中,变量在使用之前必须要先赋初值。可以在变量定义的时候赋给它初始值。例如:

int foo = 3;

double dn = 3.1415926D

也可以在变量定义之后再对它赋值。例如:

int value;

……

value = 1;

3局部变量的作用域

作用域,是指一个标识符在程序中的有效范围。这里,我们只讲局部变量的作用域,即在块中定义的变量的作用域。块(block)是指用一对大括号{}括起来的一系列语句和变量声明。比如,每个方法体都是一个块,在方法体内,也可以用{}定义块。块可以嵌套。程序清单4-6说明了块的概念。

注意:这里所说的块仅指方法体和方法体中嵌套的块,不包括类体。

程序清单4-6

class Block

{

public static void main(String[] args)

{

int a = 3;

System.out.println(a+”在方法体中”);

{ //此处定义了一个子块

int b = 4;

System.out.println(b+ “在第一层子块中”);

{ //子块中又定义子块

int c = 5;

System.out.println(c+ “在第二层子块中”);

}

}

}

}

 

程序清单4-6执行结果如下:

3在方法体中

4在第一层子块中

5在第二层子块中

块在执行时按照从前到后,从左到右的顺序依次执行。如果块中的所有语句都能正确执行,则块可以正确执行,否则,如果块中的某一条语句执行异常,那么整个块也会因同样的原因执行失败。

局部变量是在块中定义的。局部变量的作用域是从它定义之处起到它所在的块结束之处,包括它的初始化部分。如果在这个范围内重新定义了该变量(即定义了和该变量重名的变量),就会产生编译错误。也就是说,局部变量的隐藏是不允许的。程序清单4-7是一个错误的例子,它试图隐藏局部变量,结果会产生编译错误。

程序清单4-7

class Scope

{

public static void main(String[] args)

{

int a = 3; //在方法体中定义了局部变量a

System.out.println(a);

{

int a = 8; //错误!此处不能再定义同名的局部变量

System.out.println(a);

}

System.out.println(a);

}

}

 

编译程序清单4-7时,编译器会产生如下错误:

Variable 'a' is already defined in this method

Error executing jvc.exe.

错误信息表明变量amain方法中已经定义了,在内层块中不能重新定义以隐藏外层定义的变量a

但是,在两个不存在包含关系的块中定义相同名字的变量是允许的,因为它们的作用域不相交。程序清单4-8示例了两个没有嵌套关系的块中变量的作用域。

程序清单4-8

class Scope2

{

public static void main(String[] args)

{

{ //第一个子块

int a = 3; //在第一个子块中定义局部变量a

System.out.println(“在第一个块中的变量a= “+a);

} //第一个块中定义的局部变量a的作用域到此结束

 

{ //第二个子块

int a = 8; //在第二个子块中定义局部变量a

System.out.println(“在第二个块中的变量a= “ + a);

} //第二个块中定义的局部变量a的作用域到此结束

}

}

程序4-8的输出结果如下:

在第一个块中的变量a= 3

在第二个块中的变量a= 8

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值