Java语言基础
1.1.1 关键字的定义和特点
定义:被Java语言赋予特定含义的单词
特点:全部小写。
注意事项:
A:goto和const作为保留字存在。
B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记
下面用Notepad++来写一个java小程序,其中关键字就是用绿色标记的几个单词:
1.2.1 定义及特点
定义:就是给类,接口,方法,变量等起名字的字符序列
特点:由26个英文字母大小写,数字:0-9,符号:_、$组成。
1.2.2 定义合法标识符规则
1. 数字不可以开头,例如:2Demo就不可以。
2. 不可以使用关键字,例如:public就不可以,因为public是关键字。
3. 不可以包含“_、$”以外的特殊符号,例如:“Demo Test”就不可以,其中的空格就是特殊符号。
1.3.1定义和作用
定义:就是对程序进行解释说明的文字
作用:
1、解释说明程序,提高了代码的阅读性。
2、可以帮助我们调试程序。
1.3.2 Java中的注释格式
1. 单行注释
格式: //注释文字
2. 多行注释
格式: /* 注释文字 */
3. 文档注释
格式:/** 注释文字 */
例如:
/** 这是我的第一个Java程序。 @author classmate */ class JavaDemo{ /* 这是主函数,是程序的入口。 它的出现可以保证程序的独立运行。 */ public static void main(String[] args){ //这是输出语句用于将括号内的数据打印到控制台。 System.out.println("Hello World"); } }
注意:
1、整数默认是int类型,浮点数默认是double类型。
2、长整型后缀用L或者l标。建议使用L。单精度浮点数用F或者f标记。建议使用F。
1.5.3 常见错误
示例一:
class DataTypeDemo{ public static void main(String [] args){ //定义一个整型变量 int i = 100000000000; System.out.println(i); } }
编译时出错:
class DataTypeDemo{ public static void main(String [] args){ //定义一个整型变量 long l = 100000000000L; System.out.println(l); } }编译结果:
示例二:
class DataTypeDemo{ public static void main(String [] args){ //定义一个浮点型型变量 float f = 12.34; System.out.println(f); } }
编译出错:
解决方法:在数值后面加上一个“f”或“F”,让编译器知道后面的常量是float类型的。
代码如下:
class DataTypeDemo { public static void main(String[] args) { // 定义一个浮点型变量 float f = 12.34F; System.out.println(f); } }
示例三:
class DataTypeDemo { public static void main(String[] args){ float f; System.out.println(f); } }编译出错:
出错原因:变量必须初始化后才能使用。
1.5.4 类型转换
Java是一种强类型语言,针对每种数据都提供了对应的数据类型。类型转换共分两种,自动类型转换和强制类型转换。
1. 自动类型转换(隐式类型转换)
定义:自动类型转换就是不需要我们手动对类型来进行强制转换。
转换规则:1)boolean类型不参与转换
2)byte,short,char -- int -- long -- float -- double
3)byte,short,char之间不相互转换,直接转成int类型参与运算。
class DataTypeDemo3{ public static void main(String [] args){ //定义一个byte类型,一个int类型,做加法 byte a = 3; int b = 4; System.out.println(a + b); } }运行结果:
说明:int类型的变量占4个字节,当byte类型的变量与其相加的时候,首先会将byte类型的变量自动转化为4个字节的int类型,然后再进行加法操作。
2. 强制类型转换(显式类型转换)
定义:强制类型转换需要把类型进行手动转换,否则无法正常使用
class DataTypeDemo3{ public static void main(String [] args){ //定义一个byte类型,一个int类型,做加法 byte a = 3; int b = 4; byte c = a + b; System.out.println(c); } }编译时出错:
出错原因:byte类型(1个字节)的变量a与int类型(4个字节)的变量b相加时,变量a首先被提升为int类型,相加后得到结果为7,也是int类型,将int类型的数值赋值给byte类型的变量c,所以编译时会出现可能损失精度的错误。
解决办法:强制转换
代码如下;
class DataTypeDemo3{ public static void main(String [] args){ //定义一个byte类型,一个int类型,做加法 byte a = 3; int b = 4; byte c = (byte)(a + b); System.out.println(c); } }运行结果:
1.5.5 面试题
1、下面的程序编译时哪条语句会出错?
class DataTypeDemo3{ public static void main(String [] args){ byte b; byte b1 = 3; byte b2 = 4; b = 3 + 4; b = b1 + b2; System.out.println(b); } }
分析原因:“b = 3 + 4;”语句不会出错的原因是因为3和4是常量,编译器在编译常量运算时,会先把结果算出来,然后判断结果是否在byte范围 内,如果在则不会报错。而“b = b1 + b2”这条语句执行时,编译器会先将byte类型的变量b1和b2提升为int类型,然后得到的结果也是int类型,所以将int类型的结果赋值给byte类型的变量b时会提示可能损失精度。
2、写出下面程序的运行结果:
class DataTypeDemo3{ public static void main(String [] args){ byte b = (byte) 130; System.out.println(b); } }分析:由于byte类型的数据范围是-128~127,130超过了该范围。我们都知道,计算机中数据的运算都是补码进行的。而要得到补码,首先要计算出数据的二进制。将130赋值给byte类型的变量b时,会将130提升到int型(4个字节),用二进制表示:00000000 00000000 00000000 10000010,这是130的原码,也是130的反码和补码,将该值赋值给byte型变量时,会进行截取操作,变为1个字节,即10000010,这是一个数的补码,我们看到的是原码,所以要求出原码。
已知补码求原码。
符号位 | 数值位 | |
补码 | 1 | 0000010 |
反码 | 1 | 0000001 |
原码 | 1 | 1111110 |