变量
变量是利用声明的方式,将内存中的某个块保留下来以供程序使用。可以声明为块记载的数据类型为整型、字符型、浮点型或是其他数据类型,作为变量的保存之用。
Java 的数据类型可分为原始数据类型与引用数据类型。
原始数据类型也称为基本数据类型,它们包括了最基本的 boolean、 byte、 char、short、 int、 long、 float 与 double 等类型。
另一种数据类型为引用数据类型,它是以一种特殊的方式指向变量的实体,这种机制类似于 C / C++的指针。这类的变量在声明时是不会分配内存的,必须另外进行开辟内存空间的操作,如字符串与数组均属于这种数据类型。
声明一个变量时,编译程序会在内存里开辟一块足以容纳此变量的内存空间给它。不管变量的值如何改变,都永远使用相同的内存空间。因此,善用变量将会是一种节省内存的方式。
常量与变量
//声明Demo2类
public class Demo2
{
public static void main(String args[])
{
int num; //声明一个整形变量num
num = 3; //将整形变量赋值为3
//在屏幕输出变量,用“+”连接
System.out.println("这是数字"+num);
System.out.println("我有"+num+"本书!");
}
}
在上面代码中,num为整形变量将常量3赋值给它。在程序进行的过程中,可以为变量重新赋值,也可以使用已经声明过的变量。
数据类型
Java 的变量类型
在 Java 中规定了八种基本数据类型变量来存储整数、浮点数、字符和布尔值。如下图所示:
image.png接口就是抽象类(abstract ),接口本身 也是一种抽象类,实现接口的类 叫做实现类
java的基本数据类型:
image.png整数类型
Java 中,整数数据类型可以分为 long、 int、 short 及 byte 四种:
long 为 64 位,也就是8 个字节(bytes),可表示范围为-9223372036854775808 到9223372036854775807;
int 为 32 位,也就是 4 个字节,表示范围为-2147483648 到 2147483647;
若是数据值的范围在-32768 到 32767 之间时,可以声明为 short(短整数)类型;
若是数据值更小,在-128 到 127 之间时,可以声明为 byte 类型以节省内存空间。
例子:
short num;//声明num为短整型
Java 即会在可使用的内存空间中,寻找一个占有 2 个字节的块供sum 变量使用,同时这个变量的范围只能在-32768 到 32767 之间。
常量的数据类型
public class Test
{
public static void main(String args[])
{
long num = 329852547554;
System.out.println(num);
}
}
执行结果:
Test.java:5: error: integer number too large
long num = 329852547554;
^
1 error
Error: Could not find or load main class Test
Caused by: java.lang.ClassNotFoundException: Test
sandbox> exited with status 0
把整数常量看成是 int 类型,但 329852547553 这个整数已超出了 int 类型所能表示的范围,因此虽然把 num 的类型设为 long,但编译时仍然会发生错误。
解决方法:只要在整数常量后面加上一个大写的“L”即可.
public class Test
{
public static void main(String args[])
{
long num = 329852547554L;
System.out.println(num);
}
}
执行结果:329852547554
数据类型的最大值与最小值
Java 提供了 long、 int、 short 及 byte 四种整数类型的最大值、最小值的代码。最大值的代码是 MAX_VALUE,最小值是 MIN_VALUE。
如果要取用某个类型的最大值或最小值,只要在这些代码之前,加上它们所属的类的全名即可。
如果程序代码里需要用到长整数的最大值,如图 所示的语法表示:
image.png如果要使用某个类型的代码,则必须先指定该类型所在的类库以及该类型所属的类,但因 java.lang 这个类库属于常用类库,所以默认的 Java 程序会将它加载,因此在实际的应用上设计者可以将它省略。
Java 所提供的整数的最大值与最小值的标识符及常量值,如下图所示:
image.png
溢出的发生
当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时,这个整型变量所输出的值将发生紊乱,且不是预期的运行结果。
// 整数值如果超出了自己所可以表示范围的最大值,会出现溢出
public class Test
{
public static void main(String args[])
{
int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
System.out.println("x = "+x);
System.out.println("x+1 = "+(x+1));
System.out.println("x+2 = "+(x+2));
}
}
输出结果:
x = 2147483647
x+1 = -2147483648
x+2 = -2147483647
当最大值加上 1 时,结果反而变成表示范围中最小的值;当最大值加上 2 时,结果变成表示范围中次小的值,这就是数据类型的溢出。
image.png为了避免 int 类型的溢出,可以在该表达式中的任一常量后加上大写的“L”,或是在变量前面加上 long,作为强制类型的转换。
// 整数值如果超出了自己所可以表示范围的最大值,会出现溢出
public class Test
{
public static void main(String args[])
{
int x = java.lang.Integer.MAX_VALUE ; // 得到整型的最大值
System.out.println("x = "+x);
System.out.println("x + 1 = "+(x+1));
System.out.println("x + 2 = "+(x+2L));
System.out.println("x + 3 = "+((long)x+3));
}
}
输出结果:
x = 2147483647
x + 1 = -2147483648
x + 2 = 2147483649
x + 3 = 2147483650
程序说明:
- int x = java.lang.Integer.MAX_VALUE ; 声明 int 类型的整数变量 x,并赋值为整数最大值,即 2147483647。
- System.out.println("x = "+x); 输出 x 的值,即: 2147483647。
- System.out.println("x + 1 = "+(x+1)); 输出 x+1 的值,此时溢出发生,运行结果变成-2147483648。
- System.out.println("x + 2 = "+(x+2L)); 输出 x+2 的值,为了避免溢出发生,在表达式的常量部分 2 后加上 L,执行结果变成 2147483649。
- System.out.println("x + 3 = "+((long)x+3)); 输出 x+3 的值,为了避免溢出发生,在表达式的整数部分 x 之前加上 long,执行结果变成 2147483650。
处理 int 类型的溢出,可以利用强制类型转换方式。但是对于 long 类型的溢出,就没有处理办法了,此时就需要在程序中加上变量值的界限检查,在运行时才不会发生错误。
网友评论