第一章 方法入门

  • 定义一个方法的格式:
    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+"分");    
}

}