定义:被Java语言赋予了特殊含义,用作专门用途的字符串(单词)
特点:关键字中所有字母都为小写
现有Java版本尚未使用,但以后版本可能会作为关键字使用。自己命名标识符时要避免使用这些保留字
goto、const
Java是一种强类型语言,每个变量都必须声明其类型。
强类型语言也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。
Java、 .NET、 C++等都是强制类型定义的。也就是说,一旦一个变量被指定了某个数据类型,如果不经过转换,那么它就永远是这个数据类型了。 安全性高,运行效率相对较慢,鱼和熊掌不可兼得!强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。
与其相对应的是弱类型语言。
弱类型语言也称为弱类型定义语言。与强类型定义相反。像vb, php等就属于弱类型语言· 在VBScript中,可以将字符串‘12’和整数3进行连接得到字符串‘123’,也可以把它看成整数123,而不需要显示转换。是不是十分的随便,我们Java就不是这样的。但其实它们的类型没有改变, VB只是在判断出一个表达式含有不同类型的变量之后,自动在这些变量前加了一个clong()或(int)()这样的转换函数而已。能做到这一点其实是归功于VB的编译器的智能化而已,这并非是VB语言本身的长处或短处。
Java的数据类型分为两大类:基本类型(primitive type)和引用类型 (reference type)
十进制,八进制,十六进制转化
//整型 int i=10; int i2=010; int i3=0x10; System.out.println(i);//10 System.out.println(i);//8 System.out.println(i);//16
浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。
如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
public static void main(String[] args) { floatf = 0.1f; doubled = 1.0/10; System.out.println(f==d); //fal se floatd1 = 2131231231f; floatd2 = d1+1; if(d1==d2) { System.out.println("d1==d2") ; }el se{ System.out.println("d1! =d2") ; } }
主要理由:
由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很多数字无法精确表示,其结果只能是接近,但不等于;二进制浮点数不能精确的表示0.1,0.01,0.001 这样10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
最好完全避免使用浮点数比较 !
大数值: Java.math下面的两个有用的类: BigInteger和BigDecimal,这两个类可以处理任意长度的数
值。 BigInteger实现了任意精度的整数运算。 BigDecimal实现了任意精度的浮点运算。
浮点数使用总结:
单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的, “A”表示一个字符串。
char 类型用来表示在Unicode编码表中的字符。 .
Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;
public static void main(String[] args) { char c1 = 'a' ; char c2 = '中' ; System.out.println(c1) ; System.out.println((int) c1) ; //97 System.out.println(c2) ; System.out.println((int) c2) ; //20013 }
Java 语言中还允许使用转义字符 ‘’ 来将其后的字符转变为其它的含义,有如下常用转义字符:
boolean类型(一位,不是一个字节),就是0|1
boolean类型有两个值, true和false,不可以 0 或非 0 的整数
boolean 类型用来判断逻辑条件,一般用于程序流程控制。
if ( is && !un ) {. . . . }
由于Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。
整型、实型(常量)、字符型数据可以混合运算。
运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级(根据容量来看)。
低 ------------------------------------> 高 byte, short, char—> int —> long—> float —>double
数据类型转换必须满足如下规则:
int i =128; byte b = (byte) i ;
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
强制类型转换,又被称为造型,用于显式的转换一个数值的类型.
在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
强制类型转换的语法格式: (type) var ,运算符“()”中的type表示将值var想要转换成的目标数据类型。 条件是转换的数据类型必须是兼容的。
1 . 操作比较大的数时,要留意是否溢出,尤其是整数操作时;
public static void main(String[] args) { int money = 1000000000; //10亿 int years = 20; int total = money*years; //返回的是负数 long total 1 = money*years; //返回的仍然是负数。 默认是i nt,因此结果会转成int值, 再转成long。 但是已经发生了数据丢失 long total 2 = money*((long) years) ; //先将一个因子变成l ong,整个表达式发生提升。全部用l ong来计算。 System.out.println(total ) ; System.out.println(total 1) ; System.out.println(total 2) ; }
变量的概念:
内存中的一个存储区域
该区域的数据可以在同一类型范围内不断变化
变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值
变量的作用:
使用变量注意:
声明变量
变量的赋值
声明和赋值变量
变量的分类
变量根据作用域可划分为三种:
局部变量
方法或语句块内部定义的变量。生命周期是从声明位置开始到”}”为止。
在使用前必须先声明和初始化(赋初值)。
局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
实例变量
方法外部、类的内部定义的变量。
从属于对象,生命周期伴随对象始终。
如果不自行初始化,他会自动初始化成该类型的默认初始值
(数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false)
静态变量
使用static定义。
从属于类,生命周期伴随类始终,从类加载到卸载。
如果不自行初始化,他会自动初始化成该类型的默认初始值
(数值型变量初始化成0或0.0,字符型变量的初始化值是16位的0,布尔型默认是false)
常量
常量(Constant):初始化(initialize)后不能再改变值!不会变动的值。
所谓常量可以理解成一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。
常量名一般使用大写字符。
程序中使用常量可以提高代码的可维护性。例如,在项目开发时,我们需要指定用户的性别,此时可以定义一个常量 SEX,赋值为 "男",在需要指定用户性别的地方直接调用此常量即可,避免了由于用户的不规范赋值导致程序出错的情况。
变量的命名规范
1 . 所有变量、方法、类名:见名知意
2. 类成员变量:首字母小写和驼峰原则 : monthSalary
3. 局部变量:首字母小写和驼峰原则
4. 常量:大写字母和下划线: MAX_VALUE
5. 类名:首字母大写和驼峰原则: Man, GoodMan
6. 方法名:首字母小写和驼峰原则: run(), runRun()