第三章 Java基础
3.1类型转换
3.1.1 自动转换
定义:小的数据类型转换大的数据类型【存储空间】
|
注:
1.在Java中,boolean类型与所有其他7种类型都不能进行转换;
2.其他 7种数据类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化;(short和char ,因值的范围不同,不能自动转换)
byte ->short ,char -> int ->long-> float->double
byte与char 不能自动转换 char与short之间也不能自动转换
3.1.2强制转换
定义:大数据类型转小数据类型[存储空间大小]
语法:数据类型 变量名 = (数据类型)值/变量名;
注:
1. 高转低会导致精度丢失,不同类型的强制转换,可能会导致精度的下降.
2. 实际开发中:应该要知道被强制转换的数据,是在一个已知的范围;
3.2运算符
3.2.1 算数运算符
符号:加法(+)减法(-)乘法 (*) 除法(/) 取模(%)
eg:
1) 0.0/0.0 结果是NaN ,任何的NaN都不等于自己(面试题)
2) 1.0/0.0 结果:Infinity,表示无穷大
3.2.2 自增自减运算符
符号:++ --
注:
1) 自增自减只能够用于变量,不能用于常量
2) 自增自减运算的优先级 比算术运算符高
3)当有表达式时,把整个表达式看成一个整体,如果变量名在前面,那么整个表达式的值就是原来值不变;如果变量名在后面,那么整个表达式的值就是原来的值加1。
3.2.3 赋值运算符
符号: = += -= *= /= %=
运算顺序:从右到左,把符号右边的值赋值到左边的变量中
3.2.4 比较运算符
符号: == != > < >= <=
运算规律: 比较运算的结果是一个布尔类型的值(true 或false)
3.2.5 逻辑运算符
符号:& | && || ^ !
运算规则:用来连接布尔类型的两个值或表达式,最终结果也位布尔类型
1. & :两边都为true ,结果为true
2. | :只要有一边为true,结果为true
3. && :两边都为true ,结果为true
4. || : 只要有一边为true,结果为true
5. ^ : 两边不一样,结果为true ,否则为false
6. ! : 逻辑非
&& || 和 & | 区别?
&& 和 || 具有短路功能 ;&和|不具有短路功能
A && B 当A表达式为false时候,B中的代码不会执行,逻辑运算的值也为false
A || B 当A表达式为true时候,B中的代码不会执行,逻辑运算的值也为true
3.2.6 三目运算符
定义:
由问号?及冒号:分割的三个表达式,组成的一个表达式如X ? Y : Z ;按照一定规则进行运算的式子,称为表达式;该表达式具有一个结果值:
X :布尔类型的值或者结果为布尔类型的表达式
Y Z :一般来说数据类型相同的值或者表达式
运算规则:
X 为true,就是 Y 的结果值 ( 冒号前面的表达式的值):也就是整个三目运算的结果值
X为false,就是Z的结果值 ( 冒号后面的表达式的值):也就是整个三目运算的结果值
3.3选择结构
3.3.1 if选择结构
基本if结构
基本语法:
if(判断条件){
执行语句;
}
判断条件: 布尔类型的值或者表达式
执行语句:当条件满足时执行(可以是一条语句,也可以是一组语句)
if...else结构
基本语法:
if(判断条件){
执行语句;
}else{
执行语句;
}
判断条件: 布尔类型的值或者表达式
执行语句:当条件满足时执行if中的语句 其他情况执行else中的语句
if...else if结构
基本语法:
if(判断条件){
执行语句;
}else if(判断条件){
执行语句;
}else if(判断条件){
执行语句;
}......
判断条件: 布尔类型的值或者表达式
执行语句:所有条件只能满足一个 条件互斥 因此执行语句只能有一条
if...else if...else结构
**基本语法**:
if(判断条件){
执行语句;
}else if(判断条件){
执行语句;
}.....else if(判断条件){
执行语句;
}else{
执行条件;
}
判断条件: 布尔类型的值或者表达式
执行语句:所有条件只能满足一个 条件互斥 因此执行语句只能有一条被执行到 如果条件都不满足 则执行else中的语句。
3.3.2 swtich选择结构
基本语法:
switch(key){
case v1:
执行语句;
break;
case v2:
执行语句;
break;
...............
default:
执行语句;
break;
}
key: 限定类型的局部变量或常量
java5之前 : byte short char int
java5支持 : enum枚举
java7支持 : String 类型
v1,v2:与key同种类型的值 常量
执行原理:
将key的值与case中列举的值进行匹配 如果匹配 执行 执行语句 找到break 跳出选择结构 如果都没有匹配上的值 则执行default中的执行语句,找到break 跳出选择结构;
注:
1. 每个case之间顺序可以交换 不影响代码运行
2. default不一定放在末尾 在所有case失效的时候就会被执行到
3. case中值与 key类型必须一致
4. 最后一个break可以省略,但不建议
5. break可以省略,但会导致后续case条件判断失效 按照从上到下顺序,直到找到第一个break跳出选择结构;如果没有找到,执行到末尾,自动跳出选择结构
3.4 循环结构
3.4.1 while循环
基本语法:
while(循环条件){
执行语句; //循环体
}
循环条件:布尔类型的值或者表达式,需要不断变化,如果是一个常量或者固定不变的值,则称为没有意义的循环或者死循环;
执行语句:当循环条件为true时执行语句,false终止循环,不执行语句
执行流程:
1) 第一次判断条件true,继续执行
2) 第二次判断条件true,继续执行
3) 第三次判断条件true,继续执行
4) ......
5) 直到第n次判断条件false,终止循环
3.4.2 do...while循环
基本语法:
do{
执行语句;
}while(循环条件);
循环条件:布尔类型的值或者表达式,需要不断变化,如果是一个常量或者固定不变的值,则称为没有意义的循环或者死循环;
执行语句:当循环条件为true时执行语句,false终止循环,不执行语句
执行流程:
1. 首先执行do后面结构体中的执行语句
2. 判断循环条件是否为true,如果true,执行do后执行语句,如果为false终止循环
3.4.3 for循环
基本语法:
for(初始化条件A;判断条件B;循环后语句C){
执行语句D;
}
初始化条件A:初始化一个值,用来作为B中的判断条件
判断条件B:布尔类型的值或者表达式
循环后语句C:循环后执行的代码,目的是为了改变初始条件A的值,使B中条件不是一个固定的值
执行语句D:当B中的判断条件满足,为true执行D,false,则不执行
执行流程:
第一次:A-->B(true)-->D-->C
第二次: B(true)-->D-->C
第三次: B(true)-->D-->C
…
第n次: B(false) 结束整个循环
增强for循环:
语法:
for(源中元素类型 e : 源 ){
直接使用e就可以了
}
常见的异常:
NullPointerException:空指针异常(空引用异常)
操作了一个尚未初始化或者没有分配内存空间的数组
ArrayIndexOutOfBoundsException:数组的索引越界异常
操作的数组的索引不在[0,数组名.length-1]范围内
3.4.4 循环控制语句
break :终止当前循环
continue:跳出当前循环
return:终止当前方法
3.5数组
3.5.1数组概念
概念:计算机在内存区域分配的一段连续的区域,用来存储不同或同种类型的数据
|
1)数组名 :数组的名字
2)数组元素 :就是存放在数组里面的数据
3)数组索引 :就是数组里面连续存储空间的编号,从0开始
4)length :数组的属性长度 数组名.length拿到数组的长度
语法:
数组元素类型[] 数组名;
3.5.2 数组初始化
静态初始化
语法:数组元素类型[] 数组名 = new 数组元素类型[]{元素 1,元素 2,元素 3,.......};
动态初始化
语法:数组元素类型[] 数组名 = new 数组元素类型[length];
3.6 方法
3.6.1自定义方法
public static void main(String[] args){
方法体;
}
public:修饰符 表示公共的
static:修饰符 jvm优先加载
void :此处为返回值类型,void表示方法没有返回值
main : 方法名字
() : 圆括号 固定格式用来存放形式参数
String[] args:形式参数 String[]参数类型 args参数名字
{} :方法结构体 里面存放需要方法完成的功能语句
基本语法:
public:非必须
static:非必须
返回值类型 :没有写void
方法名: 必须
() : 必须
String[] args: 根据实际需要 可以有 也可以没有
{} :必须
方法调用:
1) 方法有static修饰:类名.方法名+参数列表[个数,顺序,类型必须一致]
2) 方法没有static修饰:对象名.方法名+参数列表[个数,顺序,类型必须一致]
3) 方法在同一个类中:方法名+参数列表[个数,顺序,类型必须一致]
注:
1.如果方法设置了返回值类型,方法内部必须有return语句返回对应类型的值/变量/表达式;(return后返回的类型必须与方法上的返回值类型一致)
2.return语句后不能再有其他执行语句
3.如果方法内部有条件判断 此时充分考虑如果条件不满足 方法是否还有返回值,保证结构的完整;
3.6.2方法重载
方法的重载的方法一般都具有相类似的功能,只是参数列表不同,与返回值类型无关,返回值类型可以不同,为了在使用时方便记忆同种类似功能的方法。
3.6.3方法参数传递
值传递
java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递!
基本数据类型传递的是值本身。
引用数据类型传递的是变量在堆中的引用地址。
注:
方法调用时,实际参数把它的值传递给对应的形式参数,相当于拷贝了一份值给形式参数,所以方法执行中形式参数值的改变不影响实际参数的值。
- 基本数据不影响原来的值
- 引用数据不影响原来的地址值:
引用地址,引用的值,如果被改变,原来引用的的值所引用的值也会被改变,因为都是同一个引用。
3.6.4 可变参数
语法:
数据类型...参数名
如: int...param
注:
可变参数从本质上来来说还是一个数组
可变参数只能放在参数列表的末尾
一个方法只能有一个可变参数