JAVA学习笔记总结(三):JAVA语法入门

来源:互联网 发布:淘宝上下架规则可行吗 编辑:程序博客网 时间:2024/04/28 18:00

1. 使用Scanner取得输入

在命令行模式下要输入数据到程序中时,可以使用标准输入串对象System.in。然而实际上很少使用它,因为System.in对象所提供的read()方法是从输入串中取得一个字节的数据,并返回该字节的整数值。在Java SE 6以上版本中可以使用java.util.Scanner类取得用户的输入。

import java.util.Scanner;

public class ScannerDemo {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);                 // 实际上还是System.in在取得用户的输入

        System.out.print("请输入你的名字: ");

        System.out.printf("Hello! %s!\n", scanner.next());          // scanner.next() 来取得用户输入的字符串

        System.out.print("请输入一个数字: ");

        System.out.printf("您输入了 %d!\n", scanner.nextInt());//scanner.nextInt() 会将取得的字符串转换成int类型的整数

    }                                                                                // 还可以使用Scanner的nextFloat(), nextBoolean()等方法来取得用户的输入,并转换成正确的数据类型   

}

Scanner取得输入的一句是空格符,按下空格键,Tab键或者是Enter键,Scanner就会返回下一个输入,所以在用户输入的字符串中包含空格的时候就不适用了。这时候比较简单的方法是使用java.io.BufferedReader类取得输入。

2. 使用BufferedReader取得输入

使用BufferedReader对象的readLine()方法必须处理java.io.IOException, 现阶段处理IOException的方法是在main()函数中加上throws IOException.

BufferedReader对象在构建时接受一个java.io.Reader对象,在读取标准输入时,可以使用java.io.InputStreamReader, 它继承了Reader类。

import java.io.*;                                                                    // 这次使用到的类都位于java.io包下,所以可以使用*号

public class  BufferedReaderDemo {

    public static void main(String[] args) throws IOException {

         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

         System.out.print("请输入一行文字,可以包括空白: ");

         String text = bufferedReader.readLine();                  // Readline()方法会返回用户在按下Enter键之前所有的字符输入,不包括最后按下的Enter键

         System.out.println("您输入的文字:" + text);

    }

3. 标准输入输出流

Java程序开始执行之后,会自动开启标准输出流(System.out), 标准输入流(System.in)以及标准错误流(System.err), 他们都是System类中的静态对象。

我们可以将System.out的输出重定位到一个文件,只需要在执行程序时使用 > 或者 >> 将输出结果定位至指定的文件即可:

java HelloWorld > HelloWorldResult.txt     //这会将原本命令行模式下的显示结果定位至HelloWorldResult.txt

java HelloWorld >> HelloWorldResult.txt  //除了重新定位之外,还有Append的功能

System.in的read()方法可以接受键盘或其他来源的输入,不过很少使用,通常使用Scanner对象或者BufferedReader来取得输入。

System.err会立即显示指定的(错误)信息让用户知道,及时指定程序将结果重新定位至文件, err输出流的信息也不会被重新定位,而仍然会显示在指定的显示设备上

4. final变量

在定义变量的同时加上Final关键词来限定,则这个变量一旦指定了值,就不可以再改变它的值,否则编译器会报错:

final int maxNum = 10;

maxNum = 20;

错误信息: cannot assign a value to final variable maxNum

5. autoboxing和unboxing

基本数据类型(Primitive Types):long, short, int, double, float, boolean, byte, char

基本数据类型不是对象,除了数值本身的信息之外,基本数据类型不带有其他的信息和可操作的方法

在J2SE 5.0 之前,如果想要让基本数据类型能像对象一样进行操作,那么要使用Long, Integer, Double, Float, Boolean, Byte等Wrapper类来打包(Wrap).

// 使用Integer来打包int数据

int data1 = 10;

Integer data1Wrapper = new Integer(data1);

System.out.println(data1Wrapper.doubleValue() / 3);

J2SE 5.0 提供了基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)功能,可以直接使用下面的语句来打包基本数据类型:

Integer integer = 10;

也可以使用更一般化的java.lang.Number类来自动装箱:

Number number = 3.14f;   // 3.14f会先被自动装箱为Float,然后指定给number

J2SE 5.0 也提供了自动拆箱(unboxing),也就是从对象中取出基本数据信息, 例如

Integer i = 10;

System.out.println(i + 10);  // 10会先被装箱, 然后在i+10时会先拆箱,在进行加法运算

自动装箱(autoboxing)与拆箱(unboxing)功能提供了方便性,但隐藏了一些细节, 实际上是编译器的帮忙, 也就是所谓的"编译器蜜糖" (Compiler Sugar).