java学习第二天
关键字
关键字:被java语言赋予特定含义的单词。
关键字特点:组成关键字的字母全部小写。
注意事项:1.goto和const作为保留字存在,目前并不使用。2.高级记事本遇到关键字会变色,很直观的显示。
标识符
标识符:给类,接口,方法,变量等七名时使用的字符序列。
组成规则:英文大小写字母,数字字符,$和_
注意事项:不能以数字开头,不能是java中的关键字,严格区分大小写,不能有空格
标识符(常见命名规则):见名知意包:其实就是文件夹,用于把相同类名进行区分(命名全部是小写)
单级包:zhuzhu
多级包:cn.itcast
类或者接口:
一个单词:单词的首字母必须大写
举例:Student,Dog
多个单词:每个单词的首字母必须大写
举例:StudentScore
方法或者变量:
一个单词:单词的首字母小写
举例:main(),age
多个单词:从第二个单词开始,每个单词的首字母大写
举例:studentAge,showAllNames()
常量:
一个单词:全部大写
举例:PI
多个单词:每个字母都大写,用_隔开
举例:STUDENT_MAX_AGE
注释
注释:用于解释说明程序的文字,提高程序的阅读性,帮我们调试程序(可以注释一部分进行检查其它程序是否正确)
java中注释分类格式:
单行注释: //注释文字 可以嵌套
多行注释: /*注释文字*/ 不能嵌套使用,以/*开始以*/结束
文档注释: /**注释文字*/ 被javadoc工具解析生成一个说明书,面向对象部分讲解
常量和变量
常量概述:在程序执行过程中其值不可以改变
java中常量分类:字面值常量和自定义常量
字面值常量:
A:字符串常量:用双引号括起来的 "hello" "world"
B:整数常量:所有整数
C:小数常量:所有小数
D:字符常量:用单引号括起来的 'A' 'b'
E:布尔常量
举例:true,false
F:空常量 null 后面叙述
整数常量的进制
1byte字节=8bit
1k=8byte
1m=1024k
1g=1024m
1t=1024g
二进制:0b开头 八进制:0开头 十进制:默认 十六进制:0x开头进制转换
(1)其他进制到十进制
系数:就是每一个位上的数值
基数:x进制的基数就是x
权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。
结果:系数*基数^权次幂之和。
(2)十进制到其他进制
除基取余,直到商为0,余数反转。
(3)进制转换的快速转换法
A:十进制和二进制间的转换
8421码。(bcd码的一种)
B:二进制到八进制,十六进制的转换,拆分组合法,八进制三位,十六进制四位
有符号数据表示法:原码,反码,补码
计算机操作时,都是采用数据对应的二进制的补码来计算的
例:用原码,反码,补码来分别表示+7和-7
首先转化为二进制:00000111
原码:符号位+数值位组成,其中最高位0表示正数,1表示负数
+7:0 000111
-7:1 000111
反码:正数的反码与原码相同,负数的反码是对其原码逐位取反,但符号位除外
+7:0 000111
-7:1 111000
补码:正数的补码与原码相同,负数的补码是在反码的基础上加1
+7:0 000111
-7: 1 111001
变量概述:在程序执行过程中其值在一定范围内变化的量
组成规则:
A:必须对其进行限定(数据类型)
B:分配一个内存空间,我们给这个空间起了一个名字即变量名
C:初始化值
定义变量格式:数据类型 变量名=初始化值;
数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间
分类:
A:基本数据类型:4类8种
B:引用数据类型:类,接口,数组。基本数据类型
A:整数 占用字节数byte 1
short 2
int 4
long 8
B:浮点数
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
注意:
整数默认是int类型,浮点数默认是double。长整数要加L或者l。
单精度的浮点数要加F或者f。
使用变量的注意事项:
A:作用域
B:初始化值
C:同一行可以定义多个变量,但不建议数据类型转换:
(1)boolean类型不参与转换
(2)默认转换
A:从小到大
B:byte,short,char -- int -- long -- float -- double注:long:8个字节
float:4个字节
但是因为底层的存储结构不同,所以float表示的数据范围比long的范围要大(3.4*10^38>2^63-1)
C:byte,short,char之间不相互转换,直接转成int类型参与运算。byte a=1;
int b=2;
byte c=a+b; //错误
int d=a+b; //正确(3)强制转换
A:从大到小
B:可能会有精度的损失,一般不建议这样byte a=1;
int b=2;
byte c=(byte)(a+b); //正确
C:格式:
目标数据类型 变量名 = (目标数据类型) (被转换的数据);
(4)思考题和面试题:
A:下面两种方式有区别吗?
float f1 = 12.345f; //原本就是float类型
float f2 = (float)12.345; //原本是double类型,强制转化为float类型
B:下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
byte b3 = b1 + b2; //有问题,类型提升b1和b2参与计算会直接转化为int型,
byte b4 = 3 + 4; //无问题,常量先把结果计算出来,然后看是否在byte范围类,如果在就不报错
C:下面的操作结果是什么呢?
byte b = (byte)130;130超过了byte的范围(-128~127)
因为计算机计算是用二进制的补码进行运算,所以首先把130化为二进制为:10000010
正数的原码反码补码一致都为:10000010,int类型的130原本为32位,截取为byte类型时,为8位,最高位为1
之后,将补码:10000010转化为反码:10000001,再转化为原码即为:11111110,十进制值为-126D:字符参与运算
是查找ASCII里面的值
'a' 97
'A' 65
'0' 48System.out.println('a'); //结果a
System.out.println('a'+1); // 结果98
System.out.println("hello"+'a'+1);//结果helloa1,字符串数据与其它数据做+,结果是字符串类型,此处的+是连接符
System.out.println('a'+1+"hello");//结果98hello,先计算+法,再连接字符串E:java语言中的字符char可以存储一个中文汉字吗?为什么?
可以。因为java语言中的字符占两个字节。java语言采用的是Unicode编码。