三、常量与变量
JAVA语言强大灵活,与C++语言语法有很多相似之处,要想熟练使用JAVA语言,就必须打下坚实的JAVA语言基础,“千里之行,始于足下”。
常量
在JAVA语言中,主要利用关键字final来进行定义常量的,声明的语法为:
final 数据类型 常量名称[=值]
常量标识符和之前的变量标识符规定一样,可由任意顺序的大小写字母、数字、下划线(_)和美元符号($)等组成,标识符不能以数字开头,亦不能是JAVA中的保留关键字。此外在定义常量时,应注意以下两点:
(1)必须要在常量声明对其进行初始化否则会出现编译错误。常量一旦初始化后,就无法再次对这个常量进行赋值。
(2)final关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰后续学到的“对象引用”或者方法。
常量应用案例:
public class lianxi2
{
static final int year=365;
public static void main(String args[])
{
System.out.println("两年是:"+2*year+"天");
}
}
运行结果:
变量
变量在之前学习过的语言中了解足够多,而且其声明方式在之前的学习中也有提到,变量的命名规则也遵循标识符的命名规则。举个案例能更好地理解。
public class lianxi2
{
public static void main(String args[])
{
int num=3;
char ch='z';
System.out.println(num+"是整数");
System.out.println(ch+"是字符");
}
}
运行结果:
变量的作用范围
1.成员变量
在类体中定义的变量为成员变量。它的作用范围为整个类,也就是说在这个类中都可以访问到定义的这个成员变量。
2.局部变量
在一个函数(或称方法)或函数内代码块(code block)中定义的变量称为局部变量,局部变量在函数或代码块被执行时创建,在函数或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或赋值操作,否则会出现编译错误!
下面用一个程序案例来详细说明成员变量和局部变量的区别,为了更方便说明,在该程序左边加上行号:
01 public class lianxi2
02 {
03 public static void main(String args[])
04 {
05 int outer=1;
06 {
07 int inner=2;
08 System.out.println("inner="+inner);
09 System.out.println("outer="+outer);
10 }
11 //System.out.println("inner="+inner);
12 int inner=3;
13 System.out.println("inner="+inner);
14 System.out.println("outer="+outer);
15 System.out.println("In class level,x="+x);
16 }
17 static int x=10;
18 }
运行结果:
块(block)作用范围除了用for(while)循环或方法体的左右花括号{ }来界定外,还可以直接用花括号{ }来定义“块”,如上述程序中第06行至第10行,在这个块内,inner等于2,但是出了第10行,就是出了它的作用范围,也就是出了这个块,inner的生命周期就终结了。因此如果取消第11行的注释符号“//”,就会出现编译错误,因为这行的System.out.println()方法不认识这个“陌生”的名叫inner的变量。第12行,我们重新定义并初始化了一个新的inner,但是这个inner和第06行~12行块内的inner完全没有关系。因此第13行可以正常输出,输出值变为3。
一般来说,所有变量都遵循“先声明,后使用”的原则。这是因为变量只有“先声明”,它才能在内存中“存在”,之后才能被其他方法所“感知”并使用,但是存在于类中成员变量(不在任何方法内),它们的作用范围就是整个类范围(class level),在编译器的“内部协调”下,变量只要作为类中的数据成员被声明了,就可以在类内部的任何地方使用,无需满足“先声明,后使用”的原则。比如类成员变量x是在第17行声明的,由于它的作用范围是整个lianxi2类,所以在第15行也可以正确输出x的值。
四、数据类型
同C语言一样,JAVA也有基本的数据类型:long(长整型64位)、int(整型32位)、short(短整型16位)、char(字符16位)、byte(字节8位)、boolean(布尔1位)、float(单精度32位)、double(双精度64位)。其中boolean相当于逻辑变量,值只有true和false两种。
由于就数据类型定义之前了解的足够多,所以在此只学习JAVA中的一些使用规则以及记忆一些JAVA中的知识即可。
转义字符
\f:换页 \\:反斜线 \b:倒退一格 \':单引号
\r:归位 \":双引号 \t:跳格 \n:换行
数据类型的转换
1.自动类型转换
在程序中已定义好了的数据类型的变量,若想转换用另一种数据类型表示时,JAVA会在下面2个条件都成立时,自动进行数据类型的转换。
(1)转换前后的数据类型要相互兼容。需要注意的是,boolean类型不能与其他任何数据类型进行转换。
(2)转换后的数据类型的表示范围不小于转换前的类型。
还是借助一个案例来帮助理解:
public class lianxi
{
public static void main (String args[])
{
int a=156;
float b=24.1f;
System.out.println("a="+a+",b="+b);
System.out.println("a/b="+(a/b));
}
}
运行结果:
从运行的结果可以看到,当一个浮点数与一个整数运算时,运行结果会直接转换成浮点数。当表达式中变量的不同时,JAVA会自动把较小的数据类型表示范围,转换成较大的数据类型表示范围后,再作运算。也就是说,假设有一个整数和双精度浮点数作运算,JAVA会把整数转换成双精度浮点数后再做运算,运行结果也会变成双精度浮点数。
自动数据类型转型的规律:byteshortintlongfloatdouble,按照范围由小到大实现自动转型操作。
2.强制类型转换
强制转换语法:
(欲转换的数据类型)变量名称
见以下案例:
public class lianxi
{
public static void main (String args[])
{
int a=55;
int b=9;
float g,h;
System.out.println("a="+a+",b="+b);
g=a/b;
System.out.println("a/b="+g+"\n");
System.out.println("a="+a+",b="+b);
h=(float)a/b;
System.out.println("a/b="+h);
}
}
运行结果:
由结果可以看到,两个整数运算结果也是整数(除法中结果取整数部分),但是由于g是浮点数,所以输出结果也为浮点数。在第二个运算中,运算前将a的数据类型强制转成了浮点型,所以运算过程中也把b自动转成浮点型再进行运算,所得结果则为带小数的浮点数。