Java SE 02(Scanner类、流程控制、方法、方法的重载、Java命令行传递参数、可变参数、IDEA快捷键)

Java SE 02

一、用户交互Scanner

java.util.Scanner是Java5的新特性,可以通过Scanner类来获取用户的输入

基本语法:

Scanner s = new Scanner(System.in);
/*......
  ......
  ......
*/
s.close();

通过Scanner类的next()与nextLine()方法获取用户输入的字符串,在读取前我们一般要使用hasNext()与hasNextLine()判断是否还有输入的数据

//next()不能得到带有空格的字符串,且只有有效字符输入才能结束输入
Scanner scanner = new Scanner(System.in);
System.out.println("using next() to receive:");
if(scanner.hasNext()) {
    String str = scanner.next();
    System.out.println("The input is :" + str);
}
scanner.close();
//nextline()以enter为结束符,nextline()返回输入回车之前的所有字符,可以获得空格的内容
Scanner scanner = new Scanner(System.in);
System.out.println("using nextLine() to receive:");
//这句判断可省略,因为nextline()只返回输入回车之前的所有字符串
if(scanner.hasNextLine()){
    String str = scanner.nextLine();
    System.out.println("The input is:" + str);
}
scanner.close();

hasNext()或hasNextLine()作用是判断不是接收,若判断成功则next()或nextLine接收

Scanner scanner = new Scanner(System.in);
int i = 0;
double j = 0;

if(scanner.hasNextInt()) {
    i = scanner.nextInt();
    System.out.println("input number is " + i);
}
else {
    System.out.println("input is not an integer");
}
//第一次遇到hasNext()阻塞,输入后判断若成功就接收,到第二次hasNext()继续阻塞等待输入再判断
// 若失败,到第二次因为有未接收的输入,hasNext()不阻塞直接进行判断,若成功就接收
// 若失败,到第三次因为有未接收的输入,hasNext()不阻塞直接进行判断……
//……
if(scanner.hasNextDouble()) {
    j = scanner.nextDouble();
    System.out.println("input number is " + j);
}
else {
    System.out.println("input is not a decimal");
}

if(scanner.hasNextDouble()) {
    j = scanner.nextDouble();
    System.out.println("input number is " + j);
}
else {
    System.out.println("input is not a decimal");
}

scanner.close();

二、流程控制

System.out.println();//自带换行
System.out.print();//不带换行

增强for循环

Java5引入的一种主要用于数组和集合的for循环

for(声明语句 : 表达式) {
    //代码
}

声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。作用域限定在循环语句块,其值与此时数组元素的值相同。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

int[] arr = {2, 4, 6, 7, 2};
for(int x : arr) {			//IDEA快捷键 arr.for
    System.out.println(x);
}
/*
output:
2
4
6
7
2
*/

打印三角形

for(int i = 0; i < 5; i++) {
    for(int j = 5; j > i; j--){
        System.out.print(" ");
    }
    for(int k = 0; k<= i; k++){
        System.out.print("*");
    }
    for(int l = 0; l < i; l++){
        System.out.print("*");
    }
    System.out.println();
}
/*
output:
     *
    ***
   *****
  *******
 *********
*/

三、方法(函数)

  • 对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己

    public static void method {
        return;
    }
    
  • 对于方法中最后一行的return可以省略不写

  • 一个方法中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写

四、方法的重载(Overload)

重载:多个方法的名称一样,但是参数列表不一样

方法重载与下列因素相关

  • 方法名称必须相同
  • 参数列表必须不同(参数个数不同、或参数类型不同、或参数的多类型顺序不同)

方法重载与下列因素无关

  • 与形式参数的名称无关
  • 与方法的返回值类型无关(若有关,会出现二义性)
  • 与方法的修饰符无关

五、Java命令行传递参数

Java编译运行命令行

javac xxxxx.java//compile (.java file -> .class file)
java  xxxxx//run (has the same filename)

运行时输入参数测试

//测试运行时在命令行输入的参数
package flowControl;

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

步骤

  1. 在当前包下用javac编译.java文件
  2. 退到项目的src文件夹下用java运行刚才编译好的(文件名前要加包名)再加测试的输入参数

六、可变参数

  • JDK1.5开始, Java支持传递同类型的可变参数给一个方法
  • 在方法声明中,在指定参数类型后加一个省略号(...)
  • 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。(int x, int... numbers)
  • 可变参数的本质就是数组
  • 实例:定义一个计算n个数中的最大值的函数,参数列表中参数个数可变(为n)

//可变参数通用实例
package flowControl;

public class demo015 {
    public static void main(String[] args) {
        demo015 demo150 = new demo015();
        demo150.test(1, 4, 7, 8, 10);
    }
    public void test(int... i){
        for(int j = 0; j < i.length; j++) {
            System.out.println(i[j]);
        }

    }
}
/*
output:
1
4
7
8
10
*/

IDEA快捷键

  1. shift + F6按住可以改动与当前变量名相同的所有变量名
  2. ctrl + 左键点击一个方法名或类名可以查看源码
posted @   Ramentherapy  阅读(494)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示