全程跟b站博主@遇见狂神说
 Java基础视频
一、用户交互Scanner
 1.实现程序与人的交互,java提供给我们一个工具类,我们就可以获取用户的输入,可以通过Scanner类来获取用户的输入。
 2.基本语法:
Scanner  s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前,我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
 3.next()
 (1)一定要读取到有效字符后才可以结束输入;
 (2)对输入之前有效字符之前遇到的空白,next()方法会自动将其去掉;
 (3)只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符;
 (4)next()不能得到带有空格的字符串。
 
 4.nextLine()
 (1)以Enter为结束符,即,nextLine()方法返回的是输入回车之前的所有字符;
 (2)可以获得空白。
 
 5.Scanner的进阶用法
 
 二、顺序结构
 1.JAVA的基本结构就是顺序结构,顺序结构是最简单的算法结构。
 2.语句与语句之间,按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
三、选择结构
 1.if 单选择结构
 判断一个东西是否可行才去执行
 语法:
if(boolean表达){
	//如果布尔表达式为true将执行的语句
}

- if 双选择结构
 true-----执行一个语句
 false------执行另外一个程序
 即 if-else结构
 语法:
if(布尔表达式){
	//布尔表达式的值为true
}else{
	//布尔表达式的值为false
}

 2. if多选择结构
 存在ABCD…等多种情况,存在区间判断
 语法:
if(布尔表达式1){
	//布尔表达式1的值为true所执行的代码
}else if(布尔表达式2){
	//布尔表达式2的值为true所执行的代码
}else if(布尔表达式3){
	//布尔表达式3的值为true所执行的代码
}......
{
	//布尔表达式n-1的值为true所执行的代码
}else(布尔表达式n){
	//布尔表达式n的值为true所执行的代码
}

 3. 嵌套的if结构
 可以在另一个if或者else if语句中使用if或else if语句,可以嵌套使
if(布尔表达式1){
	//布尔表达式1的值为true所执行的代码
	if(布尔表达式2){
		//布尔表达式2的值为true所执行的代码
	}
}
例如:想要寻找一个数,在1-100之间
 
 4. switch 多选择结构
 (1)swich case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
 (2)switch语句中的变量类型可以是:
 byte、short、int或者char
 从Java SE7开始可以支持String类型
 同时case标签必须为字符串常量或字面量
 (3)语法:
switch(expression){
	case value:
	//语句
		break;//可选
	case value:
	//语句
		break;//可选
	//你可以有任意数量的case语句
	default://可选
		//语句		
}

 
 如何找出反编译的地方:
 
 
 
 
 
 
 
 5.while循环
 (1)最基本的循环,循环会一直执行下去
 (2)语法结构
while(布尔表达式){
	//循环内容
}
(3)只要布尔表达式的值为true,循环就会一直执行下去
 (4)大多数形况下是让循环停止下来,需要一个让表达式失效的方式来结束循环
 (5)少部分会让循环一直进行下去,比如服务器的响应
 (6)避免死循环
 (7)思考:1+2+3+4+…+100=?

 6. do…while循环
 (1)即使不满足某一个条件,至少也要执行一次
 (2)与while相似,不同的是,do…while循环至少会执行一次
 (3)语法结构:
do{
	//代码语句
}while(布尔表达式);
(4)while和do…while的区别:
 while先判断后执行,do…while先执行后判断,do…while总是循环体会被至少执行一次
7.for 循环
 (1)for循环语句是支持迭代的一种通用结构,是最优先、最灵活的循环结构。
 (2)for循环执行的次数是在执行前就确定的
 语法结构:
for(初始化;布尔表达式;更新){
	//代码语句
}
练习:(1)计算0-100之间的奇数和偶数的和。
 
 (2)用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个。
 
 (3)打印九九乘法表。
 
 7. 增强for循环
 (1)在遍历数组和集合的for循环
 (2)语法格式:
for(声明语句:表达式){
	//代码句子
}
(3)声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数字元素的值相等。
 (4)表达式:是要访问的数组名
 
 8.break和continue
 (1)break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强制退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)。
 (2)continue语句用在循环语句体中,用于终止某次循环过程,即跳出循环体中尚未执行的语句,接着执行下一次是否执行循环的判定。
9.goto关键字
 可以在break和continue这两个关键字上可以看到goto的影子
四、方法
 1.什么是方法?
 Java方法是语句的集合,它们在一起执行一个功能。
 
 调用系统类中的标准输出对象out中的println()方法
 (1)是解决一类问题的步骤的有序组合;
 (2)方法包含于类或对象中;
 (3)方法在程序中被创建,在其他地方被引用。
 2.设计方法的原则:一个方法只完成1个功能,即保持方法的原子性。
 
 3.方法的定义语法
 方法包含一个方法头和一个方法体,以下是一个方法的所有部分:
 (1)修饰符,如public、static、final等。是可选择的,可写可不写
 (2)返回值类型:返回值的数据类型。若没有返回值,则是用void
 (3)方法名:实际名称
 (4)参数类型:形参和实参,像是一个占位符
 (5)方法体
修饰符 返回值类型 方法名(参数类型 参数名){
	....
	方法体
	....
	return 返回值
}

 值传递和引用传递??
4.方法的重载
 (1)重载就是在一个类中,有相同的函数名称,但形参不同的函数。
 (2)方法的重载的规则:
 方法名称必须相同;
 参数列表必须不同(个数或类型或参数排列顺序不同);
 方法的返回类型可以相同也可以不相同;
 仅仅返回类型不同不足以成为方法的重载。
 
 5.命令行传参
 运行一个程序的时候再传递给它消息。这要靠传递命令行参数给main()函数实现。
6.可变参数
 (1)支持传递同类型的可变参数。
 (2)在方法声明中,在指定参数类型后加一个省略号(…)。
 (3)一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
 
 7.递归(会占用大量的空间内存,但是方便写程序,能不用就不用,基数较小可以使用)
 (1)A方法调用A方法,自己调用自己;
 (2)利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于有限的语句来定义对象的无限集合。
 (3)递归包含两个部分:
 第一部分
 递归头:表示什么时候不调用自身方法。如果没有头,将陷入死循环。
 第二部分
 递归体:什么时候需要调用自身方法。
 
 8.写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现
 思路推荐:
 (1)写4个方法:加减乘除;
 (2)利用循环+switch进行用户交互;
 (3)传递需要操作的两个数;
 (4)输出结果
import java.util.Scanner;
public class Demo07 {
    // 写一个计算器,要求实现加减乘除功能,并且能够循环接收新的数据,通过用户交互实现
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        double n1 = scanner.nextDouble();
        System.out.println("请输入第二个数:");
        double n2 = scanner.nextDouble();
        System.out.println("请输入运算符(+、-、*、/):");
        String opertor = scanner.next();
        switch (opertor){
            case "+":
                System.out.println("运算结果为:"+add(n1,n2));
                break;
            case "-":
                System.out.println("运算结果为:"+cut(n1,n2));
                break;
            case "*":
                System.out.println("运算结果为:"+multiply(n1,n2));
                break;
            case "/":
                System.out.println("运算结果为:"+divide(n1,n2));
                break;
            default:
                System.out.println("运算符输入错误!!");
        }
        scanner.close();
    }
    public static double add(double num1,double num2){
        double sum = num1+num2;
        return sum;
    }
    public static double cut(double num1,double num2){
        double reduce = num1-num2;
        return reduce;
    }
    public static double multiply(double num1,double num2){
        double mult = num1*num2;
        return mult;
    }
    public static double divide(double num1,double num2) {
        double divi = 0;
        if (num2 != 0) {
            divi = num1 / num2;
        }else {
            System.out.println("第二个数字不能为0!!");
        }
        return divi;
    }
}










