第一章 方法入门
定义一个方法的格式:
public static void 方法名称(){
方法体
}方法体:就是大括号里可以包含任意条语句
注意事项:
1.方法定义的先后顺序无所谓
2.方法的定义不能产生嵌套包含关系
3.方法定义好之后,不会执行。如果要和执行,一定要进行方法【调用】如何调用方法,格式:
方法名称();public class Demo_Method{ public static void main(String[] args){ farmer();//方法调用 seller();//方法调用 cook();//方法调用 me();//方法调用 } //方法定义 public static void cook(){ System.out.println("洗菜"); System.out.println("做菜"); System.out.println("装盘"); } //方法定义 public static void me(){ System.out.println("吃"); //方法定义 public static void farmer(){ System.out.println("播种"); System.out.println("施肥"); System.out.println("收割"); } //方法定义 public static void cook(){ System.out.println("收菜"); System.out.println("吆喝"); System.out.println("卖给厨子"); } } }
jshell的简单介绍
- 打开命令窗口,输入jshell,直接编写输出语句,和赋值语句等。轻量级的便利小工具,有点像python的jupyter
- 退出: /exit
编译器的两点优化
- 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译器将会自动隐含的为我们补上一个(byte)(short)(char)
1.如果没有超过左侧的范围,编译器补上强转。
2.如果右侧超过了左侧范围,那么直接编译器报错。
byte num1 = /*(byte)*/30 System.oyt.println(num1);//30 byte num2 = 128;//右侧超过左侧范围,编译报错 //int --> char,没有超过左侧范围 //编译器将会自动补上隐含的(char) char zifu = /*(char)*/65;// A
- 编译器的常量优化
在给变量赋值的时候,如果右侧的表达式中全部都是常量,没有任何变量,那么编译器javac将会直接将若干个常量表达式计算得到结果。
short result = 5 + 8;//等号右侧全部是常量,没有任何变量参与运算
编译之后,得到的.class字节码文件中【直接就是】:
short result = 13;
右侧的常数结果数值,没有超过左侧范围,所以正确。
这称为“编译器的常量优化”
但是注意,一旦表达式中有变量参与,就不能进行优化
short a = 5; short b = 8; short result = a + b;//错误写法,short + short --> int + int --> int //右侧不用变量,而是采用常量,只有两个常量,没有别人 short result1 = 5 + 8 System.out.println(result1); //13 //有变量参与就不进行优化 short result2 = 5 + 8 + a;//编译错误
流程控制
概述
- 顺序、判断、选择、循环
顺序结构
- 就是按照先来后到而方式运行,没有分叉,没有回头,顺流而下,单方向的运行。
判断语句
判断语句1--if
if(关系表达式){ 语句体 }
关系表达式是true就执行语句体,是false就不执行。语句体要么执行要么不执行。
判断语句2--if...else(2选1)
if (关系表达式){ 语句体1; }else{ 语句体2; }//要么执行语句体1要么执行语句体2,关系表达式为true就执行语句体1,为false就执行语句体2.二选一,非此即彼。
}
判断语句3--if...else if...else(N选1)
if (判断语句1){ 执行语句1; }else if (判断语句2){ 执行语句2; } ... }else if (判断语句n){ 执行语句n; }else{ 执行语句n+1 }
- 有点像分段函数
- else常用来单独处理边界不合理情况
语句练习
if语句和三元运算符的互换
//2选1 max = a > b ? a : b; if (a>b){ max = a; }else{ max = b; }
选择语句
选择语句--switch
switch(被检测值){ case 常量值1: 语句体1; break; case 常量值2: 语句体2; break; ... default: 语句体n+1; break; }
##case的穿透性
- 注意事项:
1.多个case后面的数值不可以重复
2.switch后面的小括号只能是下列数据类型:
基本数据类型:byte/short/int
引用数据类型:String/enum枚举
3.switch语句格式很灵活;前后顺序可以颠倒,而且break语句可以省略。"匹配到哪一个case就从哪一个位置往下执行,直到遇到braeak或者整体结束为止"
//case穿透 int num = 2; switch(num){ case 1: System.out.println("你好"); break; case 2: System.out.println("我好"); //不写break; case 3: System.out.println("大家好"); break; default: System.out.println("他好"); break; }/*运行结果: 我好 大家好*/
循环语句
循环概述
满足循环条件下,反复执行某一段代码,不满足时结束循环
循环结构的基本组成部分,一般可以分为四部分:
1.初始化语句:在循环最初执行,而且只做唯一一次。
2.条件判断:如果成立,则循环继续;如果不成立,则退出循环。
3.循环体:重复要做的事情内容,若干行语句
4.步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次
循环语句1 --for
for (初始化表达式①;布尔表达式②;步进表达式④){ 循环体③ //执行顺序:①②③④-->②③④ -->② }
##循环语句2 --while
初始化表达式; while(条件判断){ 循环体; 步进语句; }
循环语句3 --do...while
初始化①; do{ 循环体③;//无脑执行,干了再说 步进语句④; }while(条件判断②);
循环语句的区别
1.do..while至少执行一次
2.for循环中的i变量在小括号中定义,只有循环内部才可使用。while和do...while初始化语句在外部,所以可以在循环出来后继续使用
for (int i = 1; i<=10; i++){ System.out.println("hello"); } System.out.println(i);//报错
跳出语句
- break
1.switch
2.循环语句中
循环体的选择:凡是次数确定的场景多用for循环,否则多用while循环
for (int i = 1; i<=10; i++){ if(i == 4){ break;//第四次打断循环,所以只执行三次 } System.out.println("hello"); }
- continue
跳出本次循环,执行下一次的
for (int i = 1; i<=10; i++){ if(i == 4){ continue;//第四次跳过循环,所以执行9次 } System.out.println(i+"层到了");//唯独没有4层到了 }
扩展知识点
死循环
停不下来
while(true){
...
}
嵌套循环
- 大循环里套着小循环
- 外循环一次,内循环多次
- 好比跳绳:一共跳五组,每组跳10个。5个是外循环,10个是内循环。
for (int hour = 0; i<=23; hour++){//外层控制小时 for(int minute = 0;minute<=59;minute++ ){//内层控制小时内的分钟 System.out.println(hour+"点"+minute+"分"); } }