知识回顾:
1) 强调学习方法,it和其他知识不同的,数学,思维能力,抽象能力(难)语文,背。It是非常好学,工作22年,15年在软件企业中(初级、中级、高级、系统分析师、架构师、技术总监、后面走管理)知识都是应用,反复多敲多练。例如main,敲上上万变。
2) 什么是装箱拆箱?
a) 装箱,把基本类型变量转换包装类型
(包装类型)Integer i = 10;(基本类型)
明显=左边右边,不是一个相同类型,为什么在java中,自动装箱(转换)
真正代码:(包装类型)Integer i = new Integer(10);(包装类型)
b) 拆箱,把包装类型转换基本类型
(基本类型)int j = i;(包装类型)
明显=左边右边,不是一个相同类型,为什么在java中,自动拆箱(转换)
真正代码:int j = i.intValue(); (包装类型Integer提供方法intValue,它结果是Integer类型里值,10整数)
为什么写了不报错,底层工作原理。了解即可。真正开发你写上面代码能运行即可。
3) 三目运算符,java唯一一个三目运算符(三元运算符)
a) 有三个参数
b) 固定格式:(布尔表达式,只能有2个结果,true/false)(x>y)?x:y(死记)
4) 2个数求最大值?
package test;
//导入单元测试import org.junit.Test;
//求最大值public class Max {
@Test //求2个数最大值
public void max2() {
int x = 10;
int y = 20;
//三目表达式
int max = (x>y) ? x : y;
//下面+不是一个数字,如果遇到字符串,+连接符,连接两边字符串
System.out.println("最大值是:" + max);
}
@Test //求3个数最大值
public void max3() {
//思路?2次三目运算符应用
int x = 10;
int y = 20;
int z = 30;
int max = (x>y) ? x : y; //把x和y中最大值就赋值给max变量
//复用上面max变量,变量可以再次赋值
max = (max>z) ? max : z;
System.out.println("最大值是:" + max);
}}
今天内容:以后开发中最常见语法
流程控制:
1) 异常
2) 分支判断
a) 单分支 if
b) 多分支 switch
3) 循环结构
a) for
b) while
c) do-while
这些结构几乎后面开发中每天都用!!
流程控制:
1) 一般代码顺序执行,都执行
2) 判断是否执行,根据条件部分代码执行,部分代码不执行,其中就会跳过部分代码(if语句,三目运算符)
3) 循环,反复执行一段代码
1) 异常
a) 判断执行(部分代码执行,部分代码不执行)
b) 遇到关键字:try试图/catch捕获异常/finally最终/throw抛出异常/throws接收异常
c) 所有异常父亲:Exception
2) 经典异常,主动创建异常
被0除,数学上 1/0,分母不能为0,规定。出错,java如何处理错误?
一般情况下控制台中出现红色字就是错误。
怎么看英文:找一些关键字 Exception异常,main线程(操作系统)
java.lang.ArithmeticException,java提供常见异常Arithmetic数学
具体错误:/ by zero,违反了分母为0规则
package test;
public class TestArea {
public static void main(String[] args) {
//处理异常 try/catch,语法:固定格式
try {
//没有就执行下面的语句,一旦出错跳入catch中
//可能出错代码 int y = 100/0;
//编写,保存:编译都不会做检查
System.out.println(y);
System.out.println("正确");
}catch(Exception e) { //已经出错,才会执行,不出错,就不执行
System.out.println("错误");
}
System.out.println("执行完成");
}
}
finally 是try/catch不论代码执行正常还是错误都必须执行代码
特殊作用,以后例如数据库代码中,释放Connection链接,非常耗费资源,必须释放资源。
package test;
public class TestArea {
public static void main(String[] args) {
try {
int y = 100/0;
System.out.println("正确");
}catch(Exception e) {
//展示具体错误信息
System.out.println("错误:"+ e.getMessage());
}finally {
//System.err打印字红色,error错误
System.err.println("管你正确还是错误,都必须执行我!!!");
}
System.out.println("执行结束");
}
}
Try、catch就是典型流程控制,如果正常,我们只执行里面try{}部分代码,如果出错,try中出错语句后面代码就不会执行,直接跳转catch中代码。不论代码执行哪些try也好,catch也好,都必须执行finally中的内容。
Throw 抛出异常
Throws 接收异常
Try/catch属于自己处理异常,如果异常处理不了呢?
摊上大事了,我没本事去解决?throw就可以把异常交给上级(java就是你的调用者)
package test;
public class TestArea { //手写,提示生成,两种方式都可以接收异常
public static void main(String[] args) throws Exception{
try {
int y = 100/0; // by zero
System.out.println("正确");
}catch(Exception e) {
//展示具体错误信息
System.out.println("错误:"+ e.getMessage());
//抛出异常
throw new Exception("出错啦,分母不能是零!"); //创建一个新的异常,抛出,字符串错误信息
}finally {
//System.err打印字红色,error错误
System.err.println("管你正确还是错误,都必须执行我!!!");
}
System.out.println("执行结束");
}}
经典判断,分支语句
1) if语句(最多)
男人(男人负责工作挣钱)和女人(女人负责貌美如花)
package test;
public class TestArea { //手写,提示生成,两种方式都可以接收异常
public static void main(String[] args){
boolean isMan = false; //true,男人,false,女人
/*
* 如果是男人控制台输出:男人负责工作挣钱
* 如果是女人控制台输出:女人负责貌美如花
*/
//分支判断语句
if (isMan) { //括号内是布尔表达式
System.out.println("男人负责工作挣钱");
}else { //是女人要做的事情
System.out.println("女人负责貌美如花");
}
}
}
2) switch语句(很少)
switch可以完全使用if语句去实现,只不过它更加简洁
swtich和case,default,关键字
业务需求:电话
电话:110警察,112医生,114查询电话号码,119火警
package test;
public class TestArea { //手写,提示生成,两种方式都可以接收异常
public static void main(String[] args){
//电话:110警察,112医生,114查询电话号码,119火警
/*
* 这个是switch特殊点,和日常思考方式不同
* 找到第一个匹配执行里面的语句,之后后面不判断,所有语句都执行
* 找到匹配前面代码都不执行,都跳过
*/
int phone = 135;
switch (phone) {
case 110:
System.out.println(“我是警察”);
break; //执行完成,就跳出switch语句
case 112:
System.out.println(“我是医生”);
break;
case 114:
System.out.println(“我是查号台”);
break;
case 119:
System.out.println(“我是火警”);
break;
default :
System.out.println(“这个电话不认识”);
}
System.out.println(“执行完成”);
}
}
Switch语句可以用if语句替代
package test;
import org.junit.Test;
public class TestArea {
@Test //多重if语句嵌套
public void testIf() {
int phone = 120;
if(phone==110) {
System.out.println("我是警察");
}else if(phone==120) {
System.out.println("我是医生");
}else if(phone==114) {
System.out.println("我是查号台");
}else if(phone==119) {
System.out.println("我是火警");
} else {
System.out.println("这个电话不认识");
}
}
@Test
public void testSwitch(){
int phone = 135;
switch (phone) {
case 110:
System.out.println("我是警察");
break; //执行完成,就跳出switch语句
case 120:
System.out.println("我是医生");
break;
case 114:
System.out.println("我是查号台");
break;
case 119:
System.out.println("我是火警");
break;
default :
System.out.println("这个电话不认识");
}
System.out.println("执行完成");
}
}
上午总结:
1) 异常:程序中会出现错误,日常开发工具中出错(编译器错误),程序隐性的错误。(运行时错误)
a) 总的异常,所有异常父亲,Exception,所有异常根
b) try 试图,只要代码中可能发生异常,这样代码就必须放在try中
c) catch 捕获异常,如果出错就执行catch里面代码 Exception e,e.getMessage()
d) finally 对复杂对象要释放资源(数据库链接对象Connection)不论代码正确错误都执行
e) throw 抛出异常,我们自己不去处理,我们处理不了,交给代码调用方法,main来处理。
f) throws 接收异常,main() throws Exception{},接盘侠
2) 流程控制
a) 顺序结构:代码从上往下执行,从左往右执行int i = 100*200;
b) 分支结构:有些代码执行,有些代码不执行,根据条件
c) 循环结构:反复执行一段代码
3) 分支语句
a) 单分支:if语句
b) 多分支:if-if else-else,switch语句