关键字
- 关键字概述
- 被Java语言赋予特定含义的单词
- 关键字特点
- 组成关键字的字母全部小写
关键字注意事项
- goto和const作为保留字存在,目前并不使用 类似Notepad++这样的高级记事本,针对关键字有特殊的颜色标记,非常直观
标识符
- 标识符概述
- 就是给类,接口,方法,变量等起名字时使用的字符序列
- 组成规则
- 英文大小写字母
- 数字字符
- $和_
- 注意事项
- 不能以数字开头
- 不能是Java中的关键字
- 区分大小写
常见命名规则
常见的命名规则:见名知意
包:其实就是文件夹,用于把相同的类名进行区分 全部小写 单级:liuyi 多级:cn.itcast 类或者接口: 一个单词:单词的首字母必须大写 举例:Student,Dog 多个单词:每个单词的首字母必须大写 举例:HelloWorld,StudentName 方法或者变量: 一个单词:单词的首字母小写 举例:main,age 多个单词:从第二个单词开始,每个单词的首字母大写 举例:studentAge,showAllNames() 常量: 一个单词:全部大写 举例:PI 多个单词:每个字母都大写,用_隔开 举例:STUDENT_MAX_AGE
注释
- 注释概述
- 用于解释说明程序的文字
- Java中注释分类格式
- 单行注释
- 格式: //注释文字
- 多行注释
- 格式: /* 注释文字 */
- 文档注释
- 格式:/* 注释文字 /
- 单行注释
常量
- 常量概述
- 在程序执行的过程中其值不可以发生改变
- Java中常量分类
- 字面值常量
- 自定义常量(面向对象部分讲)
- 字符串常量
- 用双引号括起来的内容
- 整数常量
- 所有整数
- 12,23
- 小数常量
- 所有小数
- 12.34,56.78
- 字符常量
- 用单引号括起来的内容
- ‘a’,’A’,’0’
- 布尔常量
- 较为特有,只有true和false
- 空常量
- null(数组部分讲解)
进制
有符号数
- 计算机中数据的运算都是补码进行的
变量
- 变量概述
- 在程序执行的过程中,在某个范围内其值可以发生改变的量
- 理解:如同数学中的未知数
- 变量定义格式
- 数据类型 变量名 = 初始化值;
- 注意:格式是固定的,记住格式,以不变应万变
使用变量注意事项
- 作用域
- 变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。相同的作用域中不能定义两个同名变量。
- 初始化值
- 没有初始化值不能直接使用
- 在一行上建议只定义一个变量
- 可以定义多个,但是不建议
数据类型
- 长整型后缀用L或者l标记。建议使用L。 long a = 1000000000000L;
- 单精度浮点数用F或者f标记。建议使用F。float f = 123.456F;
- byte,short,char相互之间不转换,他们参与运算首先转换为int类型
- 常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
面试题
/*
面试题1:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
b = b1 + b2;是有问题的。
因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。
*/
class DataTypeDemo6 {
public static void main(String[] args) {
//定义了三个byte类型的变量,b1,b2,b3
//b1的值是3,b2的值是4,b没有值
byte b1 = 3,b2 = 4,b;
//b = b1 + b2; //这个是类型提升,所有有问题
b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错。
}
}
/*
面试题2:
byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
练习:byte b = (byte)300;
*/
class DataTypeDemo7 {
public static void main(String[] args) {
//因为byte的范围是:-128到127。
//而130不在此范围内,所以报错。
//byte b = 130;
//我们可以使用强制类型转换
byte b = (byte) 130;
//结果是多少呢?
System.out.println(b);
}
}
/*
分析过程:
我们要想知道结果是什么,就应该知道是如何进行计算的。
而我们又知道计算机中数据的运算都是补码进行的。
而要得到补码,首先要计算出数据的二进制。
A:获取130这个数据的二进制。
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
B:做截取操作,截成byte类型的了。
10000010
这个结果是补码。
C:已知补码求原码。
符号位 数值位
补码: 1 0000010
反码: 1 0000001
原码: 1 1111110
*/
关键问题补充
float在内存中的存储
float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
一个浮点数有2部分组成:底数m和指数e
底数部分 使用二进制数来表示此浮点数的实际值
指数部分 占用8bit的二进制数,可表示数值范围为0-255
但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
所以,float类型的指数可从-126到128
底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
科学计数法。
格式:
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
S表示浮点数正负
E指数加上127后的值得二进制数据
M底数
举例:
17.625在内存中的存储
首先要把17.625换算成二进制:10001.101
整数部分,除以2,直到商为0,余数反转。
小数部分,乘以2,直到乘位0,进位顺序取。
在将10001.101右移,直到小数点前只剩1位:
1.0001101 * 2^4 因为右移动了四位
这个时候,我们的底数和指数就出来了
底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
符号部分是整数,所以是0
综上所述,17.625在内存中的存储格式是:
01000001 10001101 00000000 00000000
数据类型转换之默认转换
byte,short,char – int – long – float – double
为什么long的字节比float的字节大,反而默认转换的时候却将龙转为floatlong: 8个字节
float:4个字节A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
char可以存储汉字
Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为java语言中的字符占用两个字节。