第2章基本数据与运算
2.1 关键字
关键字是指被高级编程语言赋予特殊含义的一些单词,关键字一般都是由小写字母组成。好比是汉 语当中的一些专有名词:北京,天安门,兵马俑。不能乱用。
用于定义数据类型的关键字:byte short int long float double char boolean void class interface
用于定义数据类型值的关键字:true false null
用于定义流程控制语句的关键字:if else switch case default while do for break continue return
用于定义访问权限修饰符的关键字:public protected private
用于定义继承关系的关键字:extends implements
用于定义实例对象的关键字:new this super instanceof
用于定义函数类型的关键字:static final abstract synchronized
用于处理异常的关键字:try catch finally throw throws
用于包的关键字:package import
其他的一些修饰关键字:native assert volatile transient
2.2 标识符
标识符指的是我们在程序中对变量、函数、类、接口、常量所定义的名称,也就是说这些名称是我 们自定义的。
标识符必须满足以下组成规则:
标识符可以由数字、字母、下划线 、美元符 组成
标识符不能以数字开头,当然下划线和美元符其实是可以开头的,但不推荐标识符不能是关键字
标识符也不能是Java内置类的名称
标识符可以为任意长度,但必须是一个连续的词标识符严格区分大小写
标识符命名的规范:
大驼峰式:主要针对类名,接口名。所有单词的首字母大写
小驼峰是:主要针对于变量名,函数名。除了第一个单词之外,其他单词首字母大写 常量规范:所有单词字母大写,单词与单词之间用下划线分隔
包名规范:所有单词字母小写,单词与单词之间用句号 分隔
2.3 注释
注释是用于注解和说明程序的一些程序中的内置文本信息的,但这些内置文本不属于代码的范畴。 所以在对含有注释的源代码进行编译时,所生成的字节码中不含有注释。注释给人看的!
注释主要有三种:
单行注释多行注释
文档注释 :文档注释可以被编译器识别,并生成相应
的程序说明书。对某一个类进行文档生成时,该类必须是public型
2.4 常量与进制
常量就是指在程序中直接出现的一些数据,也叫字面量常量都有哪些:
整数常量小数常量
字符常量:由一个字母、数字、符号被单引号( ‘’ )标识的数据
字符串常量:由若干个字母、数字、符号被双引号( “” )标识的数据布尔类型常量
null常量
二进制转十进制
十进制 二进制数
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
规律就是:1 1 1 1 1 1 1 1 - 128 64 32 16 8 4 2 1
10010101 十进制是 128 + 16 + 4 + 1 = 149
十进制149 = 9 * 100 + 4 * 101 + 1 * 102
二 进 制 1011 = 1 * 20 + 1 * 21 + 0 * 22 + 1 * 23 = 1 + 2 + 0 + 8 = 11
一个二进制位称之为是一个比特 bit;八个比特称之为一个字节 byte;字节是计算机当中的最小计数单元。
1 byte = 8 bit
1 kb = 1024 byte
1 mk = 1024 kb
1 gb = 1024 mb
1 tb = 1024 gb
十进制转二进制
53 ÷ 2 = 26 ~ 1
26 ÷ 2 = 13 ~ 0
13 ÷ 2 = 6 ~ 1
6 ÷ 2 = 3 ~ 0
3 ÷ 2 = 1 ~ 1
1 ÷ 2 = 0 ~ 1
余数从下到上 110101 = 1 + 4 + 16 + 32 = 53
二进制转八进制
10010101 => 010-010-101 => 0225 = 5 * 80 + 2 * 81 + 2 * 82 =5 + 16 + 128 = 149
二进制转十六进制
10010101 => 1001-0101 => 0x95 = 5 * 160 + 9 ^ 161 = 5 + 144 = 149
二进制转六进制
10010101 => 149
149 ÷ 6 = 24 ~ 5
24 ÷ 6 = 4 ~ 0
4 ÷ 6 = 0 ~ 4
所以六进制为405 => 5 * 60 + 0 * 61 + 4 * 62 = 5 + 0 + 144 = 149
负数的二进制
-29的二进制 将正数部分的二进制先取反 再加1 即为负数的二进制
00011101 =>取反 11100010 =>加1 11100011
2.5 变量
指的是变化的量
变量的本质就是在内存中程序所处的进程中的一个临时存储区域该区域的存储值有限制的
该区域值的变化必须是同类型的或向下兼容的该区域有其自身的物理内存地址-指针
该区域中 存储值的限制 和 数据的变化类型 由 来决定
该区域中 其空间的分配 和 空间的物理内存地址 由计算机底层来决定
2.6 数据类型
在Java当中,数据类型主要分为两大类:
基本数据类型:在变量的空间中存储数据
整型
浮点型
字符型布尔型
byte 1字节 2^8 256 -128~127 -2^7 ~ 2^7 - 1
short 2字节 2^16 65536 -32768~32767 -2^15 ~ 2^15 - 1
int 4字节long 8字节
float 4字节double 8字节
char 2字节
boolean 不确定
Sample.java:40: 错误: 不兼容的类型: 从int转换到byte可能会有损失
//如果不存在long类型的话 其他整型的相加结果一律为int
//b6与b7都是变量,相加的值对于b8而言是不确定的,所以结果可能会超范围
Sample.java:53: 错误: 不兼容的类型: 从int转换到short可能会有损失
int i1 = Integer.MAX_VALUE; //int的最大值int i2 = 1;
int i3 = i1 + i2; System.out.println(i3); //整形溢出
/*
01111111 11111111 11111111 11111111
+1
10000000 00000000 00000000 00000000
-1
01111111 11111111 11111111 11111111
取反
10000000 00000000 00000000 00000000
*/
//long l1 = 123123123123; error
/*
Sample.java:74: 错误: 过大的整数: 123123123123
引用数据类型:数据是在堆内存中存储,变量仅仅存放的是数据在堆内存中的地址 字符串
数组对象
2.7 运算符
算术运算符
算数运算符 含义 备注
- 加法 1+2=3 如果加号左右有字符串则加号为连接符
- 加法 3-2=1
- 乘法 3*2=6
/ 除法 3/2=1 3.0/2=1.5 如果除号两边都是整数结果为整数;有小数结果为小数
% 取余 9%5=4 注意一点,如果前或后为负数怎办?
a++ 后置自增 a自身加一,使用原来的值
++a 前置自增 a自身加一,使用加之后的值
a-- 后置自减 a自身减一,使用原来的值
–a 前置自减 a自身减一,使用加之后的值
赋值运算符
赋值运算符 含义 备注
+= 加法赋值 a+=3 a=a+3 赋值运算符只能用在变量身上
-=
*=
/=
%=
比较运算符
运算的结果为布尔类型
等于
逻辑运算符
与或
位运算符
位与
| 位 或
^ 位异或
右 移
<< 左 移
三目运算符
2.8 常见错误
未声明变量,未初始化变量而使用变量
整型溢出问题
取整错误
一个是小数的问题,小数主要去的是近似值 想要得到一个0.5这个值的话 有可能会得到0.4999999 一个是整数的问题,1/3 = 0.3333 * 3 = 0.99999 数学上1
超出预期的除法问题
/左右两边是整数,结果为整数,如果出现小数则结果为小数
额外冗余的输入对象
第3章流程控制语句
3.1 if条件语句
单分支if语句
…CodeA
if (布尔表达式) {
语句组;
}
…CodeB
双分支if-else语句
…CodeA
if (布尔表达式) {
语句组A;
} else {
语句组B;
}
…CodeB
多分支if-else-if语句
…CodeA
if (布尔表达式1) {
语句组A;
} else if (布尔表达式2) {
语句组B;
} else if (布尔表达式3) {
语句组C;
} else {
语句组D;
}
…CodeB
3.2 switch分支语句
与if分支语句一样,都是对条件的判断。switch一般用在条件较多的情况下,但是有一个重要的细节 及时,if语言可以对区间值或固定值进行判断,switch只能对固定值进行判断。
switch (变量) {
case 值1: //if (变量==值1) {语句组A;}
语句组A;
break;
case 值2:break;
case 值n: //if (变量==值n) {语句组N;}
语句组N;
default: // else {语句组N+1;}
语句组N+1;
break;
}
语句组B;
break;
case 值n: //if (变量==值n) {语句组N;}
语句组N;
default: // else {语句组N+1;}
语句组N+1;
break;
}
switch的一些使用细节
switch所传入的变量,char,byte,short,int,String或者枚举类型值1,值2,一直到值n,这几个值必须是同一个数据类型的
当变量匹配的相关case的值的时候,执行case中的语句,直到遇到break结束;如果该case语句 中没有break,则继续向下执行,直到遇到另外一个break结束
3.3 for循环语句
循环主要解决具有规律性的且具有重复性的代码问题,避免程序冗余
循环四要素
1循环的初始化:循环的第1次执行从哪里开始
2循环的继续条件:循环从当前轮是否向后执行下一轮
3循环体:需要被循环执行的部分
4循环的步长、周期:当前循环到下一轮循环之间的变化我们常见的循环问题可以分为两大类:
已知循环次数的一般用for语句做
未知循环次数但是已知循环结束条件一般用while语句做
for (1循环的初始化;2.循环的继续条件;4.循环的步长)
{
3.循环体
}
1-2-3-4-2-3-4-2-3-4-2不满足则结束循环
for循环演示
**
*
/
for (int line = 6; line >= 1; line–) { for (int i = 1; i <= line; i++) {
System.out.print("");
}
System.out.println();
}
System.out.println("=============================");
/* i j
-
1 1
** 2 1 2
*** 3 1 2 3
**** 4 1 2 3 4
***** 5 1 2 3 4 5
****** 6 1 2 3 4 5 6 j <= i
***** 7 1 2 3 4 5
**** 8 1 2 3 4
*** 9 1 2 3
** 10 1 2
- 11 1 j <= 12 - i
j <= i && j <= 12 - i
/
for (int i = 1; i <= 11; i++) {
for (int j = 1; j <= i && j <= 12 - i; j++) { System.out.print("");
}
System.out.println();
}
System.out.println("=============================");
/* i |i - 6| -
1 -5
** 2 -4
*** 3 -3
**** 4 -2
***** 5 -1
****** 6 0
***** 7 1
**** 8 2
*** 9 3
** 10 4
-
11 5
/
for (int i = 1; i <= 11; i++) {
for (int k = 1; k <= Math.abs(i - 6); k++) { System.out.print(" “);
}
for (int j = 1; j <= i && j <= 12 - i; j++) { System.out.print(” “);
}
System.out.println();
}
System.out.println(”=============================");
/* j
- 1
3.4 while循环语句
while循环主要用于解决循环次数未知,但循环结束条件已知的情况。
while其实和for循环是可以相互转换的,是因为都逃不开循环四要素
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
可以转换为while循环
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}
while的语法格式
1.循环的初始化
while (2.循环继续条件) {
3.循环体
4.循环的步长、周期
}
3.5 break、continue跳转语句
break在循环语句中叫做终止语句,终止的是break最近的一层循环
continue在循环语句中叫做跳过语句,跳过本次循环开启下一轮循环
import java.util.Scanner;
public class Sample {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
if (i == 3)
{
break;
} else
{
System.out.println(i);
}
}
//结果 1 2
for (int i = 1; i <= 5; i++) {
if (i == 3) {
continue;
} else {
System.out.println(i);
}
}
//结果 1 2 4 5
}
}