默写:
1.简答题
简述Java语言的跨平台机制。
2.编程题
编写HelloWorld.java中的代码。
今天内容:
(1)变量和注释
(2)数据类型
(3)运算符
1.变量和注释(重点)
1.1 变量的基本概念
变量本质上就是指在内存中申请的一块区域,而且该区域中的内容是可以改变的,也就是说当需要在程序中记录单个数据时就可以声明变量,并将数据放入该变量所在的区域。
由于存放的数据内容有所不同,导致内存区域的大小也不同,在Java中使用数据类型来描述区域的大小,使用变量名来描述该区域的位置信息。
1.2 变量的声明方式
数据类型 变量名 = 初始值; - 其中=初始值可以省略,分号不可以省略。
如:
int age = 18; - 推荐使用该方式
int age;
1.3 使用变量的注意事项
(1)使用变量前必须要声明,否则编译报错:找不到符号…
(2)使用变量前必须要初始化,否则编译报错:可能尚未初始化变量…
(3)在同一个方法中建议不要使用同名的变量,否则编译报错:已经声明过该变量…
(4)每个变量都拥有自己独立的作用域和生命周期(了解)。
扩展:
在方法体中声明的变量叫做局部变量,该变量的作用域和生命周期为方法体中。
1.4 标识符(变量名)的命名规则
(1)由字母、数字、下划线以及$符号组成,其中数字不能开头,如:age,age2。
(2)不能使用Java中的关键字/保留字,如:public、class、static等
(3)区分大小写,长度没有明确的限制,但不宜过长,如:Day,day,
int jfajfkajffjdaljflaj223566ajflkjadfaljfafjaj454jfdjajfa = 10; 不推荐使用
(4)可以使用汉字,但不推荐使用,尽量使用英文做到见名知意。
如: int 年龄 = 18; int time = 10; int length = 20;
总结:
以后命名时尽量使用英文单词的组合,偶尔使用数字加以区分,如:sendMsgToAll。
1.5 常用的编程规范
(1)尽量使用空行、空格以及缩进来提高代码的可读性。
(2)当类名由多个单词组成时,要求每个单词的首字母都要大写,如:TestPerson。
(3)当变量名由多个单词组成时,要求第二个单词起的每个单词首字母大写,msgSend。
(4)最好望文知意,尽量不要使用中文。
1.6 常用的注释
// - 表示单行注释,从//开始的这一行中所有内容都为注释内容。
/**/ - 表示多行注释,从/开始一直到/之间的所有内容都为注释内容。
注释内容是给程序员看的,编译器会忽略注释内容,多行注释不允许嵌套。
2.数据类型
2.1 数据类型的分类(记住)
在Java语言中将数据类型划分为两大类:基本数据类型(8种) + 引用数据类型。
其中基本数据类型主要有:
byte/short/int/long类型是用于描述整数数据的,如:66等。
float/double类型是用于描述小数数据的,如:3.14等。
boolean类型是用于描述真假信息的,如:true 和 false。
char类型是用于描述单个字符信息的,如:‘a’,‘1’,'中’等。
其中引用数据类型主要有:
数组、类、接口以及枚举等(了解)。
2.2 常用的进制
日常生活中采用十进制,逢十进一,每个数字的权重都是10的次方,100、101、…
计算机中采用二进制,逢二进一,每个数字的权重都是2的次方,20、21、…
为了简化二进制的表示形式,采用八进制和十六进制。
计算机的底层认识由0和1组成的二进制序列,而二进制中的最高位(最左边)作为符号位,若最高位是0则表示非负数,若最高位是1则表示负数。
2.3 进制之间的转换
(1)二进制和十进制之间的转换(重点)
a.正十进制转换为二进制
1)除2取余法,让十进制整数不断地除以2取出余数并记录,直到商为0时停止除法运算, 将余数进行反向排列即可。
2)拆分法,将十进制整数拆分为多个二进制权重的和,若该权重存在则写1,否则写0即可
如:
57 = 32 + 16 + 8 + 1
二进制的权重:128 64 32 16 8 4 2 1
0 0 1 1 1 0 0 1
57转换为二进制的结果是:0011 1001
b.正二进制转换为十进制
1)加权法,让二进制的当前位数字乘以当前位的权重,再将各个乘积累加起来即可。
如:
0011 1001 => 1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 0*2^6 + 0*2^7
=> 1 + 0 + 0 + 8 + 16 + 32 + 0 + 0
=> 57
练习:
将十进制整数转换为二进制: 88 、 102
将二进制转换为十进制整数: 0010 1101 、 0101 0111
解析:
88 => 0101 1000
102 => 0110 0110
0010 1101 => 45
0101 0111 => 87
c.负十进制转换为二进制
1)将该整数的绝对值拆分为二进制,然后进行按位取反,再加1
如:
-57转换为二进制:
57转换为二进制:0011 1001
按位取反:1100 0110
再加1:1100 0111
解析: -57 + 57 = 0
1100 0110 -57: 1100 0111
+ 1 + 57: 0011 1001
-------------------- --------------------
1100 0111 1 0000 0000(溢出)
d.负二进制转换为十进制
1)将二进制数位进行按位取反,再加1,转换为十进制整数后添加负号。
如:
1100 0111 进行按位取反:0011 1000
再加1:0011 1001
转换为十进制整数:57
添加负号:-57
练习:
-38和38转换为二进制:
-98和98转换为二进制:
0010 1111 和 0111 0111转换为十进制(正):
1010 1101 和 1001 0101转换为十进制(负):
解析:
38转换为二进制的结果是: 0010 0110
-38转换为二进制的结果是:1101 1010
98转换为二进制的结果是: 0110 0010
-98转换为二进制的结果是:1001 1110
0010 1111转换为十进制为:47
0111 0111转换为十进制为:119
1010 1101转换为十进制为:-83
1001 0101转换为十进制为:-107
(2)二进制和八进制的转换(熟悉)
a.二进制转换为八进制
1)将每三位二进制转换为一位八进制,转换的结果前面加0作为八进制的前缀。
如:
010 011(二进制) => 023(八进制)
b.八进制转换为二进制
1)将每一位八进制拆分为三位二进制,转换的结果前面加0b作为二进制的前缀(jdk1.7)。
如:
023(八进制) => 0b010 011(二进制)
(3)二进制和十六进制的转换(熟悉)
a.二进制转换为十六进制
1)将每四位二进制转换为一位十六进制,转换的结果前面加0x作为十六进制的前缀。
如:
0101 0011(二进制) => 0x53(十六进制)
1011 1001(二进制) => 0xb9(十六进制,使用af来表示数字1015)
b.十六进制转换为二进制
1)将每一位十六进制拆分为四位二进制,转换的结果前面加0b作为二进制的前缀。
如:
0xab(十六进制) => 0b1010 1011(二进制)
扩展:
有余力的同学查询原码、反码以及补码的概念。
2.4 单个字节表示的整数范围(重中之重)
计算机的底层认识由0和1组成的二进制序列,而二进制中的最高位(最左边)作为符号位,若最高位是0则表示非负数,若最高位是1则表示负数。
单个字节表示的非负数范围是:0000 0000 ~ 0111 1111 =>0 ~ 127 => 0 ~ 2^7-1
0111 1111 => 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6
=> 1 + 2 + 4 + 8 + 16 + 32 + 64
=> 127
单个字节表示的负数范围是:1000 0000 ~ 1111 111 => -128 ~ -1 => -2^7 ~ -2^0
1000 0000 => 0111 1111(按位取反)
=> 1000 0000(再加1)
=> 128 (转换为十进制整数)
=> -128(添加负号)
1111 1111 => 0000 0000(按位取反)
=> 0000 0001(再加1)
=> 1(转换为十进制整数)
=> -1(添加负号)
综上所述:
对于单个字节描述的8位二进制来说,表示的整数范围是:-128 ~ 127(-2^7 ~ 2^7-1)。
2.5 整数类型(重点)
在Java中用于描述整数数据的类型有:byte/short/int/long,推荐使用int类型。
其中byte类型在内存空间中占1个字节,表示的整数范围是:-128 ~ 127(-2^7 ~ 2^7-1)
其中short类型在内存空间中占2个字节,表示的整数范围是:-2^15 ~ 2^15-1
-32768 ~ 32767
其中int类型在内存空间中占4个字节,表示的整数范围是:-2^31 ~ 2^31-1
(正负二十一亿之间)
其中long类型在内存空间中占8个字节,表示的整数范围是:-2^63 ~ 2^63-1
(比int类型还大的数)
直接写出的数据值叫做直接量/常量/字面值,对于整数类型的直接量来说,默认为int类型,若希望表达long类型的直接量,则需要在直接量的后面增加L或者l,推荐使用L。
扩展:
若long类型表示的范围也不足以描述时,可以借助java.math.BigInteger类型加以描述。
2.6 浮点/小数类型(重点)
在Java语言中用于描述小数数据的类型有:float类型/double类型,推荐使用double类型。
其中float类型叫做单精度浮点数,在内存空间中占4个字节的大小。
其中double类型叫做双精度浮点数,在内存空间中占8个字节的大小,比float类型精度高
浮点类型的直接量默认为double类型,若希望表达float类型的直接量,则需要在直接量的后面增加f/F。
扩展:
在Java中虽然可以使用float类型和double类型描述浮点数据并运算,但这两种类型是无法实现精确计算的,若希望得到精确的结果,则需要借助java.math.BigDecimal类型加以描述。
有余力的同学查询一下float类型和double类型的底层结构。
视频:
javaseday02-变量的声明和使用-01
https://v.qq.com/txp/iframe/player.html?vid=k0796yys1zg
javaseday02-变量的使用和编程规范-02
https://v.qq.com/txp/iframe/player.html?vid=t079679uo6q
javaseday02-数据类型的分类和进制的转换-03
https://v.qq.com/txp/iframe/player.html?vid=s0796f56jz8
javaseday02-进制转换单字节范围的计算-04
https://v.qq.com/txp/iframe/player.html?vid=f0796vfxy55
javaseday02-整数类型和浮点类型-05
https://v.qq.com/txp/iframe/player.html?vid=x0796vuo9r9
代码:
https://pan.baidu.com/s/1NPiZz7z5YT1SLyOHwfD4LQ
作业:
1.将变量输入输出的代码敲上至少5遍。
2.思考题:
设计一套砝码要求能称量出1 ~ 100g之间的任意重量,请问至少需要多少个砝码? 以及每个砝码各自的重量是多少?
3.编程题:
要求用户输入下落时间t,并按照公式 0.59.8t*t来计算下落的位移并打印出来。
4.编程题(选做):
要求提示用户输入一个整数类型的秒数,拆分为时分秒并打印出来。
+ 加法 - 减法 * 乘法 / 除法 % 取余
如:3666 => 1:1:6