一、方法

方法的分类

方法的分类:

①无参无返回方法

②无参有返回方法

③有参无返回方法

public static void sum(int a,int b){
 int result = a + b;
 System.out.println(result);
}

④有参有返回方法

public static int sum(int a, int b){
 int result = a + b;
 return result;
}

方法参数的两个概念

1、形参:形式参数,指的是定义方法时创建的参数,我们称之为形参。
    例如:public static void sum(int a , int b)
    方法名后面的小括号()中的内容就是参数列表,其中形参为a,b
2、实参:实际参数,指的是在调用方法时传入的具体数据,我们称之为实参。
    例如: sum(10,20)
    	其中的数据10,20就是在调用方法实际传入的参数,在方法的执行过程中,会把实参赋值给形参

方法的重载:overload

在同一个类中,出现了多个同名的方法,但是这些方法的参数列表不一样,我们称之为这些方法出现了方法的重载

重点:(两同一不同)
    1、同一个类中(类)
    2、多个同名方法(方法名)
    3、参数列表不一样:①参数类型②参数个数③参数顺序

注意事项:
    方法的重载跟返回值类型无关,以及参数的名字也无关,还和访问权限修饰符无关。
    public:公共的,访问权限是最大的,在同一个项目中都能够访问到这个public修饰的方法。
    private:私有的,访问权限是最小的,只能在本类中访问这个private修饰的方法。

补充:Scanner键盘输入

对于不同的数据类型,需要调用不同的方法来获取

byte
    short
    int	
    long
    float
    double
    boolean
    String
除了char类型之外,其他的集中类型都有直接的方法来获取到,那么想要通过键盘输入获取char类型的数据时,
    则需要先获取String类型的数据,然后通过String类型的数据调用charAt()方法来获取char类型的数据
    获取步骤:
    	1.获取String类型的数据
    	2.String类型数据调用charAt()就能得到char类型数据
//2.创建扫描器对象
Scanner input = new Scanner(System.in);
//3.通过扫描器对象调用方法
/*
            ①先获取String类型的数据
            ②通过String数据调用charAt()方法
         */
String s = input.next();//字符串
System.out.println("s = " + s);
//调用String中的charAt方法
//按住Ctrl 键,使用鼠标左键点击进入这个方法的源代码中
//charAt方法需要传入一个int类型的参数,一般想要获取String数据中的第一个字符,
// 我们都会传入一个数字0,若想要获取String数据中的第二个字符,则需要传入一个数字1
// 0 代表第一个字符,   1 代表第二个字符  ,依此类推
char c = s.charAt(0);
System.out.println("c = " + c);

二、分支语句

流程控制语句:

在一个程序的执行过程中,各条件语句的执行顺序对程序的结果有直接影响的,也就是说,程序的流程对运行的结果有直接的影响,我们很多时候要通过流程控制语句的执行顺序来实现要完成的功能

执行顺序:
按照书写的顺序,从上到下执行代码

分支语句:
①if语句
②if-else语句
③if-else if语句
④switch语句

①if 语句

if(逻辑表达式){
    代码(语句体)
}
注意:
    1、逻辑表达式的结果一定是一个boolean类型,要么true要么false
    2、特殊情况:没有{}默认if语句

②if-else 语句

if(逻辑表达式){
    语句1;
}else{
    语句2;
}

执行流程:

首先判断逻辑表达式的结果是true还是false

若结果为true,则执行语句1(if大括号里面的代码)

若结果为false,则执行语句2(else大括号里面的代码)

③if-else if 语句

if(逻辑表达式1){
    语句体1;
}else if(逻辑表达式2){
    语句体2;
}else if(逻辑表达式3){
    语句体3;
}
......
 else if(逻辑表达式n){
     语句体n;
 }else{
     语句体n+1;
 }
/*
            根据成绩划分等级
         */
        //创建扫描器对象
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个成绩:");
        //调用扫描器对象中的方法,用来接收一个成绩
        double score = input.nextDouble();
        //进行变量score的值进行判断
        /*
            不断的对if后面的逻辑表达式进行结果的判断,若第一个逻辑表达式不成立,就去继续判断
                第二个逻辑表达式的结果,若第二个逻辑表达式不成立,继续在向下判断其他的逻辑表达式
                直到所有的逻辑表达式都不成立,最后就会执行else后面的代码
            多个逻辑表达式中只能选取对应的某一个,不能说是能同时选取两个
         */
        if(score >= 90 && score <= 100){//90 <= score <= 100
            System.out.println("优秀");
        }else if(score >= 80 && score < 90){//80 <= score < 90
            System.out.println("较好");
        }else if(score >= 70 && score < 80){//70 <= score < 80
            System.out.println("一般");
        }else if(score >= 60 && score < 70){//60 <= score < 70
            System.out.println("及格");
        }else if(score >= 0 && score < 60){// 0 <= score < 60
            System.out.println("不及格");
        }else{
            //当上面所有的if逻辑表达式都不成立的时候,最后就去执行else大括号中的代码
            System.out.println("输入的不是一个合法的成绩!");
        }


/*
执行流程:
   不断的对if后面的逻辑表达式进行结果的判断,若第一个逻辑表达式不成立,就去继续判断
       第二个逻辑表达式的结果,若第二个逻辑表达式不成立,继续在向下判断其他的逻辑表达式
       直到所有的逻辑表达式都不成立,最后就会执行else后面的代码
       
   多个逻辑表达式中只能选取对应的某一个,不能说是能同时选取两个
*/

if语句和三元运算符的互换

int a = 200;
        int b = 30;
        //用来存a和b中的最大值
        int c = 0;
        //c = a > b ? a: b ;
        /*
            不推荐省略不写大括号
            if语句之间是可以进行嵌套的,允许if语句里面还有另一个if语句
         */
        if(a > b) {
            /*System.out.println(a);
            c = a;*/
            if (a == 1) {

            } else if (a == 2) {

            } else if (a == 3) {

            } else {

            }
        }else
            c = b;

        System.out.println("c = " + c);


        System.out.println("-----------------------------------");

        double score = 70.5;
        //if(score >= 90 && score <= 100){//90 <= score <= 100
        String s = (score >= 90 && score <= 100) ? "满足":"不满足";
        System.out.println("s = " + s);

④switch 语句

switch*(表达式|值|常量){
    case 常量值1:
        语句体1;
        break
    case 常量值2:
        语句体2;
        break
   ......
   default:
        语句体n;
        break;
}

注意事项:

1、case后面常量值的类型一定要和表达式的类型一致,否则会报错

2、default语句是可以省略不写的,没有任何影响

常量值

类型

含义

数据举例

整数常量

所有的整数

0, 1 2 5 10 100 -200

小数常量

所有的小数

0.1 0.5 200.5

字符常量

单引号引起来的内容,只能写一个字符

‘a’ ‘3’ ‘你’

字符串常量

双引号引起来的内容,可以写多个字符

“A” “你好”

布尔常量

只有两个值(只会用来分支结构中)

true , false

空常量

只有一个值(引用数据类型中)

null

需要注意:switch语句中,表达式的类型数据,可以是byte 、short、int、char、enum(枚举)、String(JDK1.7版本以上才支持)

//表达式为int类型
int number = 1;
//使用switch语句进行判断
switch (number){
    case 1:
        System.out.println("a");
        break;
    case 2:
        System.out.println("b");
        break;
    case 3:
        System.out.println("c");
        break;
    default:
        System.out.println("d");
        break;
}

/*
	执行流程:
		首先先计算表达式的值,其次和case依次比较(把表达式的值与case后面的常量进行判断是否相等),一旦有对应的值,则执行对应case的相应语句,在执行的过程中,若遇到break关键字就会去结束掉switch语句。若到最后,所有的case都和表达式的值不匹配,则执行default语句中的代码,然后结束switch语句。

*/

case 穿透性

在switch语句中,如果case的后面不加break,将出现穿透现象,也就是不会去判断下一个case的值,而是直接去向后运行,直到遇到break或整体switch语句结束。

/*int x = 1;
        int y = 0;
        int a = 0;
        int b = 0;*/
        //switch语句是可以进行嵌套的
        int x = 1,y = 0, a = 0 , b = 0;
        switch (x){//x = 1
            case 1:
                switch (y){
                    case 0:
                        a++;
                        break;
                    case 1:
                        b++;
                        break;
                }
                //break;
            case 2:
                a++;
                break;
            case 3:
                a++;
                b++;
                //break;
        }
        System.out.println("a = " + a);//2
        System.out.println("b = " + b);//0

三、循环语句

循环:重复的,重复某一件事情
    
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句。当我们反复的执行这个循环的时候,需要在合适的时候把循环的条件修改为false,从而结束循环,否则循环将会一直执行下去,形成死循环
    
 
循环的四要素:
    1.初始化表达式
    2.boolean条件表达式
    3.修改循环条件语句
    4.循环体语句
    
循环的分类:
    1.for循环
    2.while循环
    3.do-while循环
        
只要是在Java中发现需要重复执行某一段代码的时候,就要想要使用循环解决此问题

1、for循环

for(初始化表达式1;布尔类型表达式2;修改循环条件语句3){
    循环体4
}

说明:
    对于上面for循环语法中 
    	初始化表达式我们一般都是使用的是一个int类型的变量   例如:int i = 0
    	布尔类型表达式结果一定boolean类型,true则表示满足循环条件,重复执行代码。false则表示循环结束
    	修改循环条件语句我们一般都是用 ++ 或 --

执行流程:

执行初始化表达式,并且只能执行1次,然后判断布尔类型表达式是否成立,若不成立(false),则循环结束;若成立(true),则执行循环体中的内容,再去执行修改循环条件语句,继续判断布尔类型表达式是否还成立,若还成立(true),则继续执行循环体中内容…直到布尔类型表达式不成立时,循环就结束了。

顺序:①②④③—>②④③—>②④③---->②不满足为止,循环就结束