JAVA基础笔记——IO、流程控制、方法、数组

JAVA基础笔记——IO、流程控制、方法、数组

  • 一、用户交互Scanner
    • 1.1 next()、nextLine()
    • 1.2 nextInt()、nextFloat()等
    • 1.3 println()和print()
  • 二、顺序结构
  • 三、选择结构
    • 3.1 if-else选择结构
    • 3.2 switch选择结构
  • 四、循环结构
    • 4.1 while循环结构
    • 4.2 do-while循环结构
    • 4.3 for循环结构
    • 4.4 增强for循环
  • 五、break 、continue、goto
    • 5.1 break和continue
  • 六 、 方法
    • 6.1 方法定义和调用
    • 6.2 值传递和引用传递
    • 6.3 方法重载
    • 6.4 命令行传参
    • 6.5 可变参数
    • 6.6 递归
  • 七、数组
    • 7.1 数组声明和初始化
    • 7.2 Arrays类


一、用户交互Scanner

1.1 next()、nextLine()

tips:

  1. Java提供包java.util.Scanner,使用Scanner类来获取用户输入。
  2. 定义语法
Scanner s =new Scanner(System.in);
  1. 使用流程和区分
    1)新建(new)一个Scanner类;
    2)hasNext()、hasNextLine()判断键盘是否有输入数据;
    3)next()、nextLine()获取输入字符串
    4)IO流的的类记得在代码最末尾关闭close(),避免浪费资源
函数名 特点
next() 空格作为结束符,一定要读到有效字符后才结束输入
遇到有效字符前的空格,会自动去掉
遇到有效字符后,后面的空格作为分隔符或结束符,不会接收空格后的字符
nextLine() 以回车键(Enter)为结束符,会输出回车键之前所有的字符,包括空格

example:

package scanner;
import java.util.Scanner;//Alt+Enter自动带入java的Scanner类

public class demo01 {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);//新建一个scanner类
        System.out.println("next方式接收:");
        if(s.hasNext())//使用hasNext()判断有无输入
        {
            String var=s.next();//用next()获取输入
            System.out.println("内容为"+var);//显示
        }
        Scanner sLine=new Scanner(System.in);//新建一个scanner类
        System.out.println("nextLine方式接收:");
        if(sLine.hasNextLine())//使用hasNextLine()判断有无输入
        {
            String var=sLine.nextLine();//用nextLine()获取输入
            System.out.println("内容为"+var);//显示
        }
        //!!!!!!对IO流的类记得关闭,避免浪费资源!!!!!!!!!!
        s.close();
        sLine.close();
    }
}

测试:
JAVA基础笔记——IO、流程控制、方法、数组_第1张图片

1.2 nextInt()、nextFloat()等

tips:

  1. 用于判断输入的数据是否符合next后面规定的数据类型,比如nextInt()接收Int类型。
  2. example:
package scanner;


import java.util.Scanner;

public class demo02 {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        int i=0;
        float f=0.0f;
        System.out.println("请输入数字:");
        if(s.hasNextInt())
        {
            i=s.nextInt();
            System.out.println("数据为整数"+i);
        }
        else if(s.hasNextFloat())
        {
            f= s.nextFloat();
            System.out.println("数据为浮点数"+f);
        }
        else
        {
            System.out.println("数据不为整数或浮点数");
        }
        s.close();
    }
}

测试:
JAVA基础笔记——IO、流程控制、方法、数组_第2张图片
JAVA基础笔记——IO、流程控制、方法、数组_第3张图片

1.3 println()和print()

tips:

  1. println()输出完后会自动换行
  2. print()输出完后不会换行,但可以通过 “\n" 输出换行符

二、顺序结构

最基础的结构,从上到下依次执行

三、选择结构

3.1 if-else选择结构

tips:

  1. 语法结构:
if(条件一)
{
	语句块1}
else if(条件二)
{
	语句快2}
//可叠加多个else if(){}
else//不满足条件一二的余下语句
{
	语句块3}
  1. 多个出口的判断,能用switch使用switch;因为if-else语句会依序判断条件,直到符合条件的出口,在算法上对后面的出口不利;而switch只判断一次。

3.2 switch选择结构

tips:

  1. 语法结构
switch(i)
{
	case 0:
		语句块1break;
	case 1:
		语句块2break;
	default:
	//余下所有
		语句块3}
  1. 合理设置switch的分支变量i
  2. 每个case出口需要有break跳出,若没有,则会继续执行下一个case内的语句块,直到遇到break
  3. i 的类型支持byte、short、int、char、String(从JDK7开始)

四、循环结构

4.1 while循环结构

tips:

  1. 语法结构
while(条件)
{
	语句块;
}

  1. 先判断条件,若为真,则一直循环执行语句块;若为假,则停止。最少的的情况是语句块一次都不会执行
  2. 大多数情况条件内包含动态改变的变量,不会一直循环(死循环),少部分情况会需要一直循环,如,服务器的请求响应监听等

4.2 do-while循环结构

tips:

  1. 语法结构
do
{
	语句块;
}while(条件);
  1. 先执行语句块,再去判断,若为真,继续执行;若未假,则停止。语句块至少会被执行一次

4.3 for循环结构

tips:

  1. 语法结构
for(初始化;循环条件;更新语句)
{
	语句块;
}
  1. 执行过程:初始化语句->判断条件->若符合条件,执行语句块和更新语句 / 若不符合条件,直接退出。
  2. for循环的括号内三个语句都可为空,但尽量不全为空(死循环)
  3. for循环的括号内的语句用 ;隔开
  4. 嵌套for循环语句
    example:九九乘法表
    JAVA基础笔记——IO、流程控制、方法、数组_第4张图片

4.4 增强for循环

tips:

  1. 主要应用于简化数组和集合的遍历,jdk5以后被引入,底层依赖的是一个迭代器。
  2. 语法格式
for(type 变量名:数组或者集合对象)
{
	System.out.println(变量名);
}

1)声明语句:声明新的局部变量。变量类型type与数组元素类型一致;变量的作用域为循环体内;变量的值与此时数组元素的值相等。
2)表达式:要访问的数组名,或是返回值为数组的方法。

  1. 特点:
    1)只能遍历数组或集合的全体,不能遍历子集;
    2)遍历过程不能获取下标
    3)使用简单(被创造的主要原因)
  2. 普通for循环遍历与增强for循环遍历对比:
public static void main(String[] args) {
        double[] arr={1,2,3,4,5};
        
        System.out.println("普通循环遍历:");
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+",");
        }
        
        System.out.println('\n'+"增强for循环遍历:");
        for(double j:arr )
        {
            System.out.print(j+",");
        }
    }


五、break 、continue、goto

5.1 break和continue

名称 特点
break 用于强制终止整个循环语句或switch 语句,跳出整个语句块,执行之后的程序代码
continue 用于跳过某次循环,直接执行下一次循环的判定
goto 在java中作为保留字,但没有正式使用

六 、 方法

6.1 方法定义和调用

tips:

  1. 一个方法实现一个独立的功能
  2. 定义方法的语法结构:
修饰符 返回值类型 方法名(type 形参名,)
{
	语句块;
	return 返回值;
}

  1. 调用方法的语法结构:
    其中,“ 形参: ”的形式可有可无,不需要手动输入,在填写实参时idea会自动填写对应的形参。
type var=方法名(形参:实参,形参:实参,);
type var=方法名(实参表);
  1. example:累加器
package method;

import java.util.Scanner;

public class demo01 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int getNumsMax=0;//数组长度
        System.out.println("输入累加数字的个数");
        if(sc.hasNextInt()) {
            getNumsMax = sc.nextInt();
            double[] addNums = new double[getNumsMax];//累加数据存储数组
            System.out.println("输入累加的数字,以回车键隔离");
            int getNums = 0;//已经获得的输入数据个数
            //获取输入的数字
            while (getNums < getNumsMax) {
                if (sc.hasNextDouble()) {
                    addNums[getNums] = sc.nextDouble();
                    getNums++;
                }
            }
            double sum;//累加总和
            //调用方法
            sum = add(addNums, getNumsMax);
            System.out.println("结果为:" + sum);
        }
        else {
            System.out.println("输入有误");
        }
        sc.close();

    }

    /**
     *
     * @param nums:累加数据存储数组
     * @param numsLen:累加个数
     * @return:累加结果
     */
    public static double add(double[] nums,int numsLen)
    {
        double sum=0;
        //遍历累加
        for(int i=0;i<numsLen;i++)
        {
            sum+=nums[i];
        }
        return sum;
    }
}

测试:
JAVA基础笔记——IO、流程控制、方法、数组_第5张图片

6.2 值传递和引用传递

参考引用自 Java值传递和引用传递详细说明
参考引用自 Java值传递与“ 引用传递 ”

tips:

  1. Java只有值传递,没有引用传递
  2. 基本概念
概 念 名 称 内容
栈帧 用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素,包括局部变量表、操作数栈、指向运行时常量池的引用、方法返回地址
局部变量表 用来存储方法中的局部变量(非静态变量、函数形参)。当变量为基本数据类型时,直接存储值,当变量为引用类型时,存储的是指向具体对象的引用
虚拟机栈 开始执行一个方法时创建一个栈帧并压栈,在方法结束后,栈帧出栈
虚拟机堆 堆内存是一块线程共享的区域,对象和数组一般都分配在这一块内存中
引用传递 在方法调用时,实参的地址通过方法调用被传递给相应的形参,对形参的操作会影响的真实内容
值传递 在方法调用时,实参通过形参把它的内容副本传入方法内部,在方法内对形参的任何操作,都是对副本的操作不影响原始值
  1. 使用:
    1)对基本数据类型:形参操作不影响实参
    2)对引用类型:
    (1)形参和实参保持指向同一个对象地址,形参操作影响实参
    (2)形参被改动指向新的对象地址,形参操作不会影响实参

6.3 方法重载

tips:

  1. 重载含义:在同一个类中,方法名相同,形参表不同的方法。
  2. 重载规则:
    1)方法名称必须一致
    2)形参表必须不同(个数、类型、参数排列顺序)
    3)返回值的类型可相同也可以不相同,但仅仅返回值的类型不同不可以重载
    example:
    JAVA基础笔记——IO、流程控制、方法、数组_第6张图片

6.4 命令行传参

tips:

  1. 意义:希望运行一个程序时再传递数据,通过传递命令行参数给main()实现。
  2. 方法:
    1)在对需要编译的java文件打开命令行使用 “ javac 文件名.java ”生成.class文件
    2)退回src路径下,执行“ java 完整的包路径.文件名 传入数据"、

example:

package method;

public class demo04 {
    public static void main(String[] args) {
        for(int i=0;i<args.length;i++)
        {
            System.out.println("args["+i+"]"+args[i]);
        }
    }
}

test:
JAVA基础笔记——IO、流程控制、方法、数组_第7张图片

6.5 可变参数

tips:

  1. 含义:jdk1.5之后,支持向一个方法传递同类型的不定量的参数,本质上是一个动态数组
  2. 语法:在指定参数类型后面增加省略号(即三个英文句号);一个方法中只能指定一个可变参数,且必须是方法的最后一个参数
  3. examples:
    JAVA基础笔记——IO、流程控制、方法、数组_第8张图片

6.6 递归

tips:

  1. 含义:方法自调用,用空间内存换代码量,尽量非递归
  2. 过程:前阶段 - > 边界条件 - > 返回阶段

七、数组

7.1 数组声明和初始化

tips:

  1. 含义:相同类型的数据有序集合,长度确定(使用数组名.length)提取,初始下标为0。
  2. 声明语法:在变量的类型(首选)或变量名后面增加[]
int[] nums;//首选
int nums[];
  1. 静态初始化
int[] nums={1,2,3,4,5};
  1. 动态初始化
    使用new定义一个长度为numsLen的数组,默认初始化为类型的默认值
int numsLen=10;
double[] nums=new double[numsLen];
  1. 数组中的元素可以为基本类型和引用类型
  2. java中,数组本身就是对象(new生成),对象保存在堆中。

7.2 Arrays类

tips:

  1. 关于数组的工具类java.util.Arrays
  2. 常用方法:数组变量名为arr
方法名 含义
Arrays.toString(arr) 打印数组元素
Arrays.sort(arr) 升序排序
Arrays.fill(arr,var) arr数组内元素全部赋值为var
Arrays.equals(arr1,arr2) 比较数组中对应元素值是否相等

你可能感兴趣的:(java笔记,java)