# 开发命令行程序

# 1. 输入输出

输入:

  • 由使用者告诉程序要操作的数据
  • System.in / new Scanner(System.in)

输出:

  • 由程序向使用者展现执行的结果
  • System.out

示例:

# System.in 不是很方便
jshell> System.in.read()
a
$5 ==> 97

jshell> var scanner = new Scanner(System.in)
scanner ==> java.util.Scanner[...]

jshell> var in = scanner.nextLine()
abc
in ==> "abc"

jshell> in
in ==> "abc"

jshell> System.out.println(in)
abc

# 2. 字符运算

字符值:

  • 有且仅有一个字符,单引号界定

  • 如:

    'a'
    '中'
    

字符串值:

  • 可以有N个字符,双引号界定

  • 如:

    "abc"
    "abc" + "de"; //=> "abcde"
    

文本块值:

  • 多行文本,三个双引号界定

  • 如:

    """
    abc
    123
    """
    

转义字符:

  • 特殊含义,以 \ 打头

  • 如:

    jshell> System.out.println('\'')
    '
    
    jshell> System.out.println("\"")
    "
    
    jshell> System.out.println("\\")
    \
    
    jshell> System.out.println("12\n34")
    12
    34
    
    jshell> System.out.println("12\b34") // 退格
    134
    
    jshell> System.out.println("12\r34") // 回车,从头开始
    34
    
    jshell> System.out.println("12\t34")
    12      34
    

# 3. 数学运算

类型:

  • ./images/02-01.png

数字类型:

  • ./images/02-02.png

定义变量:

  • 例:

    int num = 10;
    // num ==> 10
    
    double salary = 12000.00
    // salary ==> 12000.0
    
    char ch = 'a';
    // ch ==> 'a'
    
    String name = "张三";
    // name ==> "张三"
    
    var scanner = new Scanner(System.in);
    
    String in = scanner.nextLine();
    // abc
    // in ==> "abc"
    
    int in2 = scanner.nextInt();
    // 123
    // in2 ==> 123
    

运算符:

  • 例:

    1 + 1;
    //==> 2
    
    2 - 1;
    //==> 1
    
    2 * 2;
    //==> 4
    
    5 / 3;
    //==> 1
    
    5.0 / 3;
    //==> 1.6666666666666667
    
    5 / 0;
    //|  异常错误 java.lang.ArithmeticException:/ by zero
    //|        at (#14:1)
    
    5.0 / 0;
    //==> Infinity
    
    5 % 3;
    //==> 2
    

数字的货币格式化:

java.text.NumberFormat.getCurrencyInstance(Locale.US)
  .format(123456789.123456789);
//==> "$123,456,789.12"

# 4. 条件语句

示例:

if (score >= 90) {
  // A
} else if (score >= 80) {
  // B
} else if (score >= 60) {
  // C
} else {
  // D
}

逻辑运算符:

逻辑运算符

优化:

// 一个入口,一个出口
if (c) {
  // 分支 1
} else {
  // 分支 2
}

//==> 一个入口,多个出口

if (!c) {
  // 分支 2
  return;
}
// 分支 1

# 5. 循环语句

语法:

for (初始化变量 (1); 终止条件 (2); 更新变量 (3)) {
  // 循环体 (4)
}

顺序:

1 -> 2 -> 4 -> 3 ->
     2 -> 4 -> 3 ->
     2 -> 4 -> 3 ->
     ...

示例:

int sum = 0;

for (int i = 1; i <= 100; i++) {
  sum += i;
}

System.out.println(sum);

# 6. 方法使用

语法:

定义:

  [修饰符] [static] 结果类型 方法名([类型1 参数1, 类型2 参数2, ...] ) {

    代码

    return [返回结果];
  }

调用:

  方法名([实参1, 实参2, ...])

作用:

  • 隐藏实现细节
  • 减少重复代码

# 7. package

通过 package 来划分名称空间

通过 import 导入非不同名称空间的类

java.lang.* 不需要额外导入,如 java.lang.String

# 8. jar

配置 Artifacts:

配置 Artifacts

执行 artifact:

执行 artifact

运行 jar:

java -jar C:\dev\...\module1.jar
本章目录