java的輸入語句與輸出語句
Java中其實有三個標準的“流”,他們被統稱為standard streams:
標準輸入:基于流的輸入(stdin),Java中對應的API是System.in;
標準輸出:基于流的輸出(stdout),Java中對應的API是System.out;
標準錯誤:基于流的錯誤輸出(stderr),Java中對應的API是System.err;
這三者之間的關系是,我們在命令行中輸入各種指令,轉到stdin的環境中運行處理,并在控制臺中將處理好的結果,利用stdout和stderr進行輸出顯示為文本,還可以將結果重定向到對應的磁盤文件等。接下來就給大家詳細地講講輸入和輸出。
一. 輸出語句
我們在前面的文章和案例中,其實早就知道Java是如何實現輸出功能的了。沒錯,就是利用System.out.println()語句來實現的!接下來壹哥就給大家詳細解讀一下這個語句的作用及其含義。
System
我們先來看看System是個什么東東。
System是Java自帶的一個類,它代表著系統類。該類位于https://baike.baidu.com/item/java.lang/5179788?fromModule=lemma_inlink包中,很多有用的系統級別的屬性、控制方法都在該類里面。
System類的構造方法是private(私有)修飾的,所以我們無法直接創建該類的對象,即無法實例化該類。關于這些對象的實例化,壹哥在后面講解面向對象時會再詳細講解,大家先不要著急哦。System內部的成員變量和成員方法都是static的,我們可以很方便的直接進行調用。在System類里面,給我們提供了如下幾個核心功能:
●標準輸入輸出:如out、in、err;
●外部定義的屬性和環境變量的訪問:如getenv()、setenv()、getProperties()和setProperties();
●加載文件和類庫的方法:如load()和loadLibrary();
●快速拷貝數組的方法:arraycopy();
●jvm操作:如gc()、runFinalization()、exit();
●獲取時間方法:如System.nanoTime 和 System.currentTimeMillis。
Java中的輸出語句通常使用System.out.println()方法來實現。這個方法可以將括號內的內容輸出到控制臺。例如:
System.out.println("Hello, world!");
out與err
out表示一種“標準”的輸出流,它是System類中的靜態成員,可以直接被我們調用,且這個成員變量是java.io.PrintStream類的引用。
另外還有一個與out功能類似的輸出流err。err表示“標準”的錯誤輸出流,此流可以打開并準備接受輸出的數據。一般err流用于顯示錯誤消息,或者用于顯示需要引起用戶特別注意的信息,在控制臺中會顯示紅色的文字。
其實out和err的用法完全一樣,功能也基本相同。out和err的唯一區別就是,out往往是帶緩存功能的,而err沒有緩存功能(默認設置,可以更改)。
print和println
print()和println()都是java.io.PrintStream類里的方法,它們的作用都是向控制臺輸出信息。兩者的基本作用完全一樣,只是print()方法不會產生換行,println()會產生換行,因為println是print line的縮寫,表示輸出并換行。
通過以上這3個API(應用程序接口)的講解,我們可以總結出一個基本的規則:在Java中,被static關鍵字修飾的成員變量,可以直接通過"類名.成員名"的形式來引用,不用創建類的實例對象。所以我們可以直接調用System類里的靜態成員out,即System.out。又因為System.out是java.io.PrintStream類的實例引用,所以又可以通過 System.out.println(); 的形式來調用。
以上這段話,如果你看著有點懵逼,請不用糾結。這屬于面向對象的知識,我們暫時還沒學到哦!!!但是后續大家都會讓大家學到的!!!
基本案例
以下是關于標準輸出的代碼案例,大家對著練習一下即可,很簡單的哦。
public class Demo01 {
}
運行效果如下圖所示:
格式化輸出
5.1 概念
有時候,計算機默認輸出的數據格式,并不一定能夠滿足我們的閱讀需求,比如有的人想要保留小數點后兩位,也有的人想要保留小數點后四位,大家的需求是個性化的,那么Java能不能針對特殊的需求,進行一些個性化的輸出呢?這是可以實現的!這就需要用到格式化輸出了!
利用格式化輸出功能,可以把數據顯示成我們期望的格式。我們可以使用System.out.printf()語句,并結合%與?這兩個占位符來實現,printf()方法可以把后面的參數格式化成指定的格式。
5.2 占位符
Java為了實現格式化功能,給我們提供了多種占位符,可以把各種數據類型“格式化”成指定的字符串。常用的占位符有如下這些:
這里我們要注意,在輸出語句中,%表示占位符。如果連續使用兩個%%,應該傳入兩個對應的數字,否則會把后面的%字符給原文輸出。
如果我們想了解更詳細的格式化參數,可以參考JDK文檔:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#syntax
5.3 案例
下面是設計的與本小節對應的代碼案例,大家可以對照練習。
public class Demo01 {
}
二. 輸入語句
輸入簡介
壹哥在前面給大家講過,Java中給咱們提供了有三個標準的“流”,他們被統稱為standard streams。除了負責輸出的流之外,還有一個負責輸入的標準流,Java中對應的API是System.in。
與標準輸出相比,標準輸入則復雜的多。尤其是直接使用System.in時,雖然可以讀取到用戶的輸入,但該方式特別的復雜,對咱們初學者來說很不友好。所以為了更方便地實現輸入功能,壹哥給大家介紹一個更簡單的Scanner類。
Scanner類
2.1 Scanner簡介
Scanner類是Java 5中開始提供的,負責解析基本類型和字符串的簡單文本掃描器。通過Scanner類,我們可以獲取用戶在控制臺里的輸入數據。Scanner類里常用API方法有如下幾個:
nextInt():獲取輸入的整數;
nextDouble():獲取輸入的雙精度浮點數;
nextLine():獲取輸入的字符串,包括單詞里的空格和除回車以外的所有字符;
next():獲取輸入的字符串,只從有效字符計算。在有效字符之前遇到的空格鍵、Tab鍵、換行符或Enter鍵等結束符,next()方法會自動將其去掉。只有在輸入有效字符之后,next()方法才會將其后面輸入的空格鍵、Tab鍵或Enter鍵等都視為分隔符或結束符,并以空格結束。
2.2 使用步驟
我們要想使用Scanner,需要遵循以下步驟:
1.導入Scanner類;
2.創建Scanner對象;
3.使用Scanner對象掃描輸入的內容。
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
String inputString = scanner.nextLine(); // 讀取一行字符串
int inputInt = scanner.nextInt(); // 讀取一個整數
double inputDouble = scanner.nextDouble(); // 讀取一個雙精度浮點數
接下來就給大家設計一個案例,講解Scanner的具體使用。
3. 案例
本案例對初學者來說,具有一定的挑戰性,大家要集中精力哦。
//1.import導包:導入Scanner類
import java.util.Scanner;
/**
@author 一一哥Sun
QQ:2312119590
CSDN、掘金、知乎找我哦
*/
public class Demo03 {
public static void main(String[] args) {
//輸入語句
//2.創建一個從鍵盤錄入的Scanner掃描對象
Scanner sc = new Scanner(System.in);
//3.使用Scanner對象,掃描輸入的內容(整數、小數、字符串、布爾)
//在控制臺或命令行輸入數字,并點擊回車鍵結束
System.out.println("請輸入一個數字");
int num = sc.nextInt();
System.out.println("你輸入的數字為:"+num);
System.out.println("請輸入一個小數");
double num2 = sc.nextDouble();
System.out.println("你輸入的數字為:"+num2);
System.out.println("請輸入一個字符串");
String str = sc.next();
System.out.println("你輸入的字符串為:"+str);
}
}
本案例效果如下: