在学习了基本的输出方法System.out.println()
之后,我们终于在本周正式学习了一种基本的读取输入的方法:Scanner
对象
import java.util.Scanner;
public class MyClass{
public static void main(String[] args){
System.out.println("Please type in your name and press Enter");
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
sc.close();
System.out.println(name);
}
}
当你写下了 Scanner sc = new Scanner(System.in);
语句时,恭喜你成功创建了一个对象,真正接触到了所谓面向对象编程(OOP)中的 对象
。这意味着你开始逐渐脱离所有编程语言中相似的部分,迈入面向对象编程所特有的领域。
import 语句
import
语句后所跟的是官方库的名字,一门编程语言的商业运营是否能成功很大程度上取决于其官方库。
所谓官方库,就是经过千锤百炼的常用功能的实现的集合。通过import
语句,你能将这些设计精良的代码化为己用。
试想,如果没有官方库提供的Scanner
类,一个Java程序员想要实现最基本的读取控制台输入功能就得从最底层的JVM指令开始学习,而且每个开发者实现的途径,实现的细节都有所区别,最终增加了语言的学习成本,也导致了工业开发的混乱和大量重复劳动。
Java语言的官方库是经过了成百上千次迭代优化的智慧结晶,研读经典的官方库代码(Java源码)
是Java开发中重要的学习方式。但是,研读官方库也不可走火入魔,过于底层和晦涩的东西不必深究。
Java API 官方文档收录了所有官方库的功能描述和使用方法,从现在开始,同学们可以逐渐尝试利用 API 文档(https://docs.oracle.com/en/java/javase/12/docs/api/index.html)来辅助学习了。
近期同学们用到的官方库大部分来自于啊 java.util
包,可以用 import java.util.*;
直接导入java.util
包下的所有类
关键词 new
new
表示后面调用的方法是一个类的构造器,由于还没有学习方法
(method),这里不展开讲。同学们只要知道,Scanner sc = new Scanner(System.in);
语句创建了一个名为 sc
的从标准输入流获取输入的 Scanner
对象(实例)。sc
被称为对象的引用,其实就是一个变量名。
如何操作一个对象的引用:点记法
一个对象包含属性和方法,可以通过点记法访问一个对象公有的属性和方法。以刚才创建的Scanner
对象 sc
为例,除了 nextLine()
方法,我们可以通过点记法访问Scanner
类型对象包含的其他方法,例如sc.hasNextLine();
,一般的IDE
在你打出点号之后都会有联想功能,自动列出该对象引用提供的所有的方法和属性( 也被称为域 ) 。
我们可以使用Scanner
和System.out.println();
来实现一个简单的Echo
(回声)功能,这个功能会会将每行输入显示在output
中
public class MyClass{
public static void main(String[] args){
System.out.println("Echo");
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String com = sc.nextLine();
System.out.println(com);
}
sc.close();
}
}
通过按下ctrl+z
来终止这个程序。
关于Scanner本身
在使用Scanner
时,一个关键的问题是用什么样的数据类型来接受输入?
这个问题的答案取决于你调用了Scanner对象中的什么方法来读取输入。这时,就可以先查阅API 文档来解惑:
这个问题牵涉到方法的返回值,现阶段同学们只要记住用 String
类型变量接受 nextLine()
方法的结果即可,下表不用掌握。
Scanner sc = new Scanner(System.in);
sc.nextLine(); | String s = sc.nextLine(); |
---|---|
sc.nextInt(); | Int i = sc.nextInt(); |
sc.nextDouble(); | double d = sc.nextDouble(); |
sc.nextLong(); | long l = sc.nextLong(); |
通过上表就可以发现,官方库的方法命名有一定规律,例如很容易推断出将输出中下一个输入作为byte类型读取的方法为 sc.nextByte();
记住关闭Scanner
在读取环节结束之后,记得调用 sc.close();
这篇文章只是粗浅的介绍了官方库和对象,同学们当作科普看就好。有任何Java学习相关的问题,或者找到了文章中的错误,可以在公众号后台给小猿留言哦。