初学者笔记java
在java源代码中,每一个变量都必须声明一种类型(type)。
有两种类型:primitive type和reference type。引用类型引用对象(reference to object),基本类型直接包含值(directly contain value)。数组
包括boolean类型以及数值类型(numeric types)共8种。
numeric types又分为整型(integer types)和浮点型(floating-point type)。
整型有5种:byte short int long char(char本质上是一种特殊的int)。
浮点类型有:float和double。编码
包括四种code
Java是强类型语言,全部的变量必须先声明后使用,定义变量须要显示的声明一个在编译时就能肯定的类型。
Java中的数据类型有两种,基本类型(Primitive Type)和引用类型(Reference Type)。对象
Java提供了八种基本数据类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。接口
通常把基本类型分为4类,以下表:unicode
分类 | 类型 | 长度 |
---|---|---|
整数型 | int | 32位 |
--- | long | 64位 |
--- | short | 16位 |
--- | byte | 8位 |
字符型 | char | 16位 |
浮点型 | double | 64位 |
--- | float | 32位 |
布尔型 | boolean | 1位 |
int为最经常使用的整型变量。系统中的整数常量会被看做int处理。但有如下两个例外:字符串
示例:get
1. publicclass IntegerValTest{ 2. publicstaticvoidmain(String\[\]args){ 3. //下面代码是正确的,系统会自动把56当成byte类型处理 4. bytea=56; 5. /* 6. 下面代码是错的,系统不会把9999999999999当成long类型处理, 7. 因此超出int的表数范围,从而引发错误 8. */ 9. //longbigValue=9999999999999; 10. //下面代码是正确的,在巨大的整数常量后使用L后缀,强制使用long类型 11. longbigValue2=9223372036854775807L; 13. //以0开头的整数常量是8进制的整数 14. intoctalValue=013; 15. System.out.println(octalValue); 16. //以0x或0X开头的整数常量是16进制的整数 17. inthexValue1=0x13; 18. inthexValue2=0XaF; 21. System.out.println(hexValue1); 22. System.out.println(hexValue2); 25. //定义二个8位的二进制数 26. intbinVal1=0b11010100; 27. bytebinVal2=0b01101001; 28. //定义一个32位的二进制数,最高位是符号位。 29. intbinVal3=0B10000000000000000000000000000011; 30. System.out.println(binVal1);//输出212 31. System.out.println(binVal2);//输出105 32. System.out.println(binVal3);//输出-2147483645 33. /* 34. 定义一个8位的二进制,该数值默认占32位,所以它是一个正数。 35. 只是强制类型转换成byte时产生了溢出,最终致使binVal4变成了-23 36. */ 37. bytebinVal4=(byte)0b11101001; 38. /* 39. 定义一个32位的二进制数,最好位是符号位。 40. 但因为数值后添加了L后缀,所以该整数的实际占64位,第32位的1不是符号位。 41. 所以binVal5的值等于2的31次方+2+1 42. */ 43. longbinVal5=0B10000000000000000000000000000011L; 44. System.out.println(binVal4);//输出-23 45. System.out.println(binVal5);//输出2147483651 46. } 47. }
字符型用于表示耽搁的字符。字符常量一般用单引号(')括起来。Java使用unicode编码方式,因此字符型变量可以表示大部分国家的文字字符。it
字符表示有如下几种方式:
若是把一个整数(0~65535之间)常量赋给字符类型变量,系统会把整数看成char处理。
示例:
1. publicclassCharTest{ 2. publicstaticvoidmain(String\[\]args){ 3. //直接指定单个字符做为字符常量 4. charaChar='a'; 5. //使用转义字符来做为字符常量 6. charenterChar='\\r'; 7. //使用Unicode编码值来指定字符常量 8. charch='\\u9999'; 9. //将输出一个'香'字符 10. System.out.println(ch); 11. //定义一个'疯'字符常量 12. charzhong='疯'; 13. //直接将一个char变量当成int类型变量使用 14. intzhongValue=zhong; 15. System.out.println(zhongValue); 16. //直接把一个0~65535范围内的int整数赋给一个char变量 17. charc=97; 18. System.out.println(c); 19. } 20. }
Java中浮点型有两种:double和float,两个浮点型的长度分别为64位和32位,且长度不因环境的改变而改变。浮点数的特色是不可以精确的表示一个小数位数较多的小数。
浮点数有两种表示方式:
java中一个浮点数常量默认为double类型,若是要系统把一个小数常量看成float处理,须要在小数后加上f字母。
示例:
1. publicclassFloatTest{ 2. publicstaticvoidmain(String\[\]args){ 3. floataf=5.2345556f; 4. //下面将看到af的值已经发生了改变 5. System.out.println(af); 6. doublea=0.0; 7. doublec=Double.NEGATIVE_INFINITY; 8. floatd=Float.NEGATIVE_INFINITY; 9. //看到float和double的负无穷大是相等的。 10. System.out.println(c==d); 11. //0.0除以0.0将出现非数 12. System.out.println(a/a); 13. //两个非数之间是不相等的 14. System.out.println(a/a==Float.NaN); 15. //全部正无穷大都是相等的 16. System.out.println(6.0/0==555.0/0); 17. //负数除以0.0获得负无穷大 18. System.out.println(-8/a); 19. //下面代码将抛出除以0的异常 20. //System.out.println(0/0); 21. } 22. }
布尔型只有一个boolean类型,用于表示逻辑真或者逻辑假。boolean的值只能为true或者是false,其余基本类型不能转换到boolean类型。
示例:
1. publicclassBooleanTest{ 2. publicstaticvoidmain(String\[\]args){ 3. booleanb1=true; 4. booleanb2=false; 5. //下面代码将出现错误:字符串不能直接变成boolean型的值 6. //booleanb3="true"; 7. //使用boolean和字符串进行链接运算,boolean会自动转换成字符串 8. Stringstr=true+""; 9. //下面将输出true 10. System.out.println(str); 11. } 12. }
Java中基本类型有两种转换方式自动转换和强制转换。讲一个表数范围小的变量赋给一个表数范围大的变量,系统将进行自动转换,将小便量转换为大变量在进行赋值操做。
示例:
1. publicclassAutoPromote{ 2. publicstaticvoidmain(String\[\]args){ 3. //定义一个short类型变量 4. shortsValue=5; 5. //下面代码将出错:表达式中的sValue将自动提高到int类型, 6. //则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。 7. //sValue=sValue-2; 8. byteb=40; 9. charc='a'; 10. inti=23; 11. doubled=.314; 12. //右边表达式中在最高等级操做数为d(double型) 13. //则右边表达式的类型为double型,故赋给一个double型变量 14. doubleresult=b+c+i*d; 15. //将输出144.222 16. System.out.println(result); 17. intval=3; 18. //右边表达式中2个操做数都是int,故右边表达式的类型为int 19. //所以,虽然23/3不能除尽,依然获得一个int整数 20. intintResult=23/val; 21. //将输出7 22. System.out.println(intResult); 23. //输出字符串Hello!a7 24. System.out.println("Hello!"+'a'+7); 25. //输出字符串104Hello! 26. System.out.println('a'+7+"Hello!"); 29. } 30. }
若是系统把大范围变量转换为小范围变量就须要强制转换,强制转换的语法格式是(type)value,可将valae强制转换为type类型的变量。当强制转换可能会致使数据精度的丢失,请看示例:
1. publicclassNarrowConversion{ 2. publicstaticvoidmain(String\[\]args){ 3. intiValue=233; 4. //强制把一个int类型的值转换为byte类型的值 5. bytebValue=(byte)iValue; 6. //将输出-23 7. System.out.println(bValue); 8. doubledValue=3.98; 9. //强制把一个double类型的值转换为int 10. inttol=(int)dValue; 11. //将输出3 12. System.out.println(tol); 13. } 14. }
当一个算术表达式中包含多个基本类型时,整个表达式的类型会发生自动提高,Java定义了以下的提高规则:
示例:
1. publicclassAutoPromote{ 2. publicstaticvoidmain(String\[\]args){ 3. //定义一个short类型变量 4. shortsValue=5; 5. //下面代码将出错:表达式中的sValue将自动提高到int类型, 6. //则右边的表达式类型为int,将一个int类型赋给short类型的变量将发生错误。 7. //sValue=sValue-2; 8. byteb=40; 9. charc='a'; 10. inti=23; 11. doubled=.314; 12. //右边表达式中在最高等级操做数为d(double型) 13. //则右边表达式的类型为double型,故赋给一个double型变量 14. doubleresult=b+c+i*d; 15. //将输出144.222 16. System.out.println(result); 17. intval=3; 18. //右边表达式中2个操做数都是int,故右边表达式的类型为int 19. //所以,虽然23/3不能除尽,依然获得一个int整数 20. intintResult=23/val; 21. //将输出7 22. System.out.println(intResult); 23. //输出字符串Hello!a7 24. System.out.println("Hello!"+'a'+7); 25. //输出字符串104Hello! 26. System.out.println('a'+7+"Hello!"); 27. } 28. }