常量
常量:是指在Java程序中固定不变的数据
变量
与常量对应的是变量。Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。
1、常量:用 final 关键字修饰变量
final double PI=3.14
2、class constant
用 static final 关键字修饰变量,可以在本类中的多个方法内被访问
stastic final double PI=3.14
2、public static final 关键字修饰变量
可以在其它类的多个方法内被访问
public stastic final double PI=3.14
数据类型
基本数据类型:包括 整型 (byte short int long)、 浮点型 (单、双)、 字符型 、 布尔型 。
引用数据类型:包括 类 、 数组 、 接口 。
基本数据类型
定义变量
数据类型 变量名 = 数据值
注:Java中整型的默认类型是int,浮点类型是 double ;long类型:建议数据后加L表示。 float类型:建议数据后加F表示。
整型
(byte short int long)
Java中整型 (integer type)的范围是固定的,与运行的机器无关。所以在不同的平台或者操作系统上有很好的可移植性。相反,C和C++ 数据类型的范围 (比如:int
和 long
) 取决于运行平台。
浮点型
所有浮点计算遵循 IEEE 754 规范。有3个特殊值:
- 正无穷 (Double.POSITIVE_INFINITY)
- 负无穷 (Double.NEGATIVE_INFINITY)
- NaN (非数) (Double.NaN)
正确的判断方式是:
if (Double.isNaN(x))
注意:
浮点数的舍入错误。
字符型
- 两个字节,字符型的值可以被表示为 \u0000到\uFFFF 的十六进制值。
- 注意转义字符。比如:
\n
表示换行,Unicode 值为\u0022
1、Unicode转义字符在程序解析前就被处理了。比如
System.out.println("\u0022+\u0022 ") 产生一个空字符串
2、小心注释里的\u
// \u000A is a newline
会产生语法错误。因为程序被读取的时候,\u000A
已经由一个换行符代替
// c:\users
语法错误。因为\u
后面不是4个十六进制
枚举类型
eum Size { S,M,L,XL } // 定义自己的枚举类
Size s = Size.M; // 声明变量
数据类型转换
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
自动转换
将 取值范围小的类型 自动提升为 取值范围大的类型
比如:int类型和byte类型运算,结果是int类型
强制转换
将 取值范围大的类型 自动提升为 取值范围小的类型
转换格式
数据类型 变量名 = (数据类型)被转数据值;
注意:
- 浮点转成整数,直接取消小数点,可能造成数据损失精度。
- int 强制转成 short 砍掉2个字节,可能造成数据丢失。
ASCII编码表
编码表 : 就是将人类的文字和一个十进制数进行对应起来组成一张表格。
字符 | 数值 |
---|---|
0 | 48 |
9 | 57 |
A | 65 |
Z | 90 |
a | 97 |
z | 122 |
将所有的英文字母,数字,符号都和十进制进行了对应,因此产生了世界上第一张编码表ASCII(American Standard Code for Information Interchange 美国标准信息交换码)
在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。
运算符
三元运算符
格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
控制语句
if 语句
// if语句第一种格式: if
if (关系表达式){
语句体
}
// if语句第二种格式: if...else
if(关系表达式) {
语句体1;
}else {
语句体2;
}
// if语句第三种格式: if...else if ...else
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2; }
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
Switch语句
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break; ...
default:
语句体n+1;
break;
}
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运 行,直到遇到break,或者整体switch结束。
for循环
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}
while和 do while
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式④
}
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②);
- for 和 while 的小区别:
- 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继 续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消 失,能够提高内存的使用效率。
- 在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。
跳出循环
break: 终止switch或者循环。
continue: 结束本次循环,继续下一次循环。
方法
定义格式
修饰符 返回值类型 方法名(参数列表){
//代码省略...
return 结果;
}
- 修饰符: public static 固定写法
- 返回值类型: 表示方法运行的结果的数据类型,方法执行后将结果返回到调用者
- 参数列表:方法在运算过程中的未知数据,调用者调用方法时传递
- return:将方法执行后的结果带给调用者,方法执行到 return,整体方法运行结束
注意事项:
- 定义位置,类中方法外面。
- 返回值类型,必须要和 return 语句返回的类型相同,否则编译失败 。
方法调用
- 直接调用:直接写方法名调用
- 赋值调用:调用方法,在方法前面定义变量,接收方法返回值
- 输出语句调用: 在输出语句中调用方法, System.out.println(方法名())
方法重载
方法重载指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
参数列表:个数不同,数据类型不同,顺序不同。
重载方法调用:JVM通过方法的参数列表,调用不同的方法