Java 里你键入的一行
你想让屏幕显示程序开始之后你键入的一个词,一个文件里没有写过的词。上一页里,词写在保存行的引号中间,所以换一个屏幕就是改 Mint.java。这一页的文件里根本没有 leaf。它创建一个名字 plant,然后等着。你键入 leaf 并按下 Enter。书写行使用裸名字,程序写出 leaf。你不是在重新安装 Java。你不是在加一条注释,也不是在学结束一行的第二种办法。你已经知道一个名字可以保存字母,println 会写出这些字母。新的工作是用你键入的那一行把这个名字填上。
文件等着你键入的一行
打开 Mint.java。文件名仍是 Mint.java,因为 public class Mint 仍是文件的名字。这一页不给文件改名,也不改 public class Mint。文件的第一行,在 public class Mint 上面,是 import java.util.Scanner;。这一行让文件可以使用 Scanner。它不是书写行。Scanner 不是给屏幕的字母。分号结束这一行 import。在它下面留一个空行,然后是你已经有的那个 public class Mint。这份文件仍然没有 package 行。import 是第一行,不是 main 里面的一行。
在 main 里面,第一行新的内容做出读取工具:Scanner reader = new Scanner(System.in);。Scanner 说明 reader 是哪一种东西。reader 是名字,以小写 r 开头。= 把这个工具保存在这个名字里。new Scanner(System.in) 做出工具,并把它接到 System.in。System.in 是读出你键入的字母的地方。System.out 是你已经用在书写行上的屏幕。这两者不是一回事。分号结束这一行。这一行不写屏幕,也不等你键入。它只做出 reader。
下一行填上你在上一页已经认识的名字:String plant = reader.nextLine();。String 仍然表示这个名字保存字母。plant 仍然以小写 p 开头。= 仍然把字母保存在这个名字里。新的是右边。reader.nextLine() 没有引号。这一行上没有 leaf。这一行向 reader 要一行键入的内容。程序等在那里,直到你按下 Enter。你按下 Enter 之后,nextLine 保存你在那个 Enter 之前键入的字母。它不保存 Enter 键本身。然后这一行在分号处结束。保存仍然不是书写。程序还没有写出自己的一行。
书写行仍是裸名字,样子和你在上一页保留的文件一样:System.out.println(plant);。没有引号。Java 读名字 plant,写出这个名字保存的字母,并结束这一行。那些字母就是 nextLine 刚刚保存的内容。如果你键入的是 leaf,程序写出 leaf。如果你键入的是 stem,程序写出 stem。两次运行之间文件没有改。保存文件。
你保留的文件
把这段存成 Mint.java。这是这一页要保留的文件。你将要键入的词不在文件里。在文件里找字母 l、e、a、f。它们不在那里。读取工具的名字是 reader。保存的那一行的名字是 plant。书写行使用 plant,里面没有引号。
import java.util.Scanner;
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
}
}
从上往下读文件,判断什么能到达屏幕。import java.util.Scanner; 只让文件可以使用 Scanner。public class Mint 给文件起名。public static void main(String[] args) 是 Java 开始的地方。这些词里没有一个是给屏幕的字母。main 那一行里的 String 不是创建 plant 的那个 String。Scanner reader = new Scanner(System.in); 做出工具 reader。它什么都不写。String plant = reader.nextLine(); 把一行键入的内容保存在 plant 里。它自己什么都不写。System.out.println(plant); 是唯一的书写行。它写出保存的字母并结束这一行。名字 plant 不被写出。名字 reader 不被写出。System 不被写出。分号不被写出。
你键入什么,程序写出什么
在放着这份 Mint.java 的文件夹里输入 javac Mint.java。文件没问题时,这条命令不写任何一行。有 import 行、有 reader,不会让 javac 写出一行,也不会让它失败。然后输入 java Mint。java 后面不要写 .java。Windows 和 macOS 上你输入的就是这两条命令。这一页不引用外壳在命令前面显示的那个记号。那些记号各不相同,它们不是程序的一行。
java Mint 之后,程序在 reader.nextLine() 上等着。它还没有结束,也还没有写出 leaf,因为你还没有给它一行。光标在新的一行上。键入字母 l、e、a、f。你按键的时候,终端就把这些字母显示出来。这个显示是终端在重复你的按键。它不是 System.out.println。然后按下 Enter。
Enter 结束这次等待。nextLine 把单词 leaf 保存在 plant 里,不保存 Enter。然后 println 写出 leaf 并结束这一行。你看见 leaf,下面又是一个 leaf。第一个 leaf 是终端显示出的按键。第二个 leaf 是程序。程序的这一行没有引号。四个字母,然后这一行结束。程序在这行书写之后结束。如果你只判断程序的那一行,就看按下 Enter 之后出现的那一行。
如果程序的那一行是 plant,书写行里 plant 的两边有引号。你保留的文件不是这样。如果程序的那一行是 mint,书写行仍是 System.out.println("mint");,或者文件里仍保存着更早一页引号中的词。如果 java Mint 立刻写出 leaf、一次也不等,文件里仍保存着引号中的词,例如 String plant = "leaf";,并且没有使用 nextLine。去找 leaf 两边的引号。你保留的文件里没有。屏幕显示错了词,不要因此重新安装 Java。
大写字母按你键入的样子照写。如果你键入带大写 L 的 Leaf 并按下 Enter,程序的那一行就是 Leaf。文件里仍然没有这些字母。空的 Enter 也是真正的一行。不键入字母就按下 Enter。nextLine 不在 plant 里保存任何字母。println 写出一行没有字母的内容。程序运行过了。等待结束,是因为你按下了 Enter。你保留的文件就是拿 leaf 试的那一份,四个小写字母。
空格留在这一行里
nextLine 读到 Enter 为止,不是读到空格为止。键入 leaf,然后一个空格,然后 stem,然后 Enter。保存在 plant 里的是 leaf、一个空格、还有 stem。System.out.println(plant) 写出 leaf stem。空格是被保存的一个字符,和上一页引号里面的空格会被保存是同一件事。这一页不在空格处把这一行切开。你保留的文件仍然只读一行。你想让屏幕上有空格时,只改你键入的内容,不改文件。
两行键入,两次 Enter
一个 reader 还可以再取一行。在第一行书写的下面,把新的一行保存进同一个名字,然后再写一次这个名字。新的保存行是 plant = reader.nextLine();。它不以 String 开头。plant 已经存在,所以这一行只替换名字保存的字母。下一行书写又是 System.out.println(plant);。程序现在等两次。每个 nextLine 等自己的 Enter。
这是第二份文件。它不是你保留的文件。你保留的文件等一次、写一次。想看两行键入时,把这份第二文件存成 Mint.java,看完再把单独的 nextLine 和单独的 println 放回去。
import java.util.Scanner;
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
plant = reader.nextLine();
System.out.println(plant);
}
}
输入 javac Mint.java。文件没问题,所以 javac 不写任何一行。第二行保存可以不写 String,这个省略不会让 javac 失败。然后输入 java Mint。程序等着。键入 leaf 并按下 Enter。终端显示 leaf,程序在下面写出 leaf。程序再等一次。它还没有结束。键入 stem 并按下 Enter。终端显示 stem,程序在下面写出 stem。程序的两行是 leaf,然后是 stem。终端从按键显示出来的字母,坐在这两行每一行的上面。如果程序的两行都是 leaf,第二个 nextLine 没有运行,或者你两次都键入了 leaf。如果程序在你键入第二行之前就写出 stem,第二个 println 并不在第二个 nextLine 下面。屏幕跟着文件里各行的顺序。每一次等待,跟着的是还没有收到 Enter 的那个 nextLine。
不要给同一个名字再写一次 String。在已经创建过 plant 的行下面写 String plant = reader.nextLine(); 是另一种错误。那一行试图再创建一次 plant。javac 会写出错误,不会保持安静。你不需要记住那条错误的原文。有用的事实是 javac 写了一行,所以先不要输入 java Mint。删掉第二个 String,留下 plant = reader.nextLine();。名字只创建一次。后面的行只改它保存的字母。你保留的文件里根本没有第二个 nextLine。看到 leaf 再看到 stem 之后,把只有一行的文件放回去。
import 那一行在 public class 上面
没有 import 那一行,文件不认识 Scanner。如果你删掉 import java.util.Scanner;,留下你保留的文件的其余部分,javac 会写出错误。它不会保持安静。没有屏幕可读,因为 javac 写出错误时你不要输入 java Mint。你不需要记住错误的原文。改法是把 import java.util.Scanner; 连同分号放回第一行,在 public class Mint 上面。保存,再输入一次 javac Mint.java,等到 javac 不写任何一行。
这第三份文件没有 import。它不是你保留的文件。只保存到 javac 写出错误,然后把 import 那一行放回去。
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
String plant = reader.nextLine();
System.out.println(plant);
}
}
如果把 import 放进 main,放在开头的花括号下面,或者放在 public class 下面,它同样会失败。Java 在 public class 上面读 import,不把它当成 main 里面的一步。把它放回第一行。这一行少了分号也是同一种失败:javac 写出错误,你不要运行 java Mint。你保留的文件有这个分号。
这一页把 reader 接到的唯一地方是 System.in。Scanner reader = new Scanner(System.out); 要的是屏幕上的读取工具。System.out 是 println 写出去的地方。它不是读出键入字母的地方。javac 会写出错误。它不会保持安静。不要输入 java Mint。在那一行上把 System.out 改成 System.in。书写行保留 System.out,因为书写行是屏幕。reader 那一行保留 System.in,因为 reader 那一行是键盘。把两者换掉就是这个错误。
这第四份文件把工具接到了屏幕上。它不是你保留的文件。只保存到 javac 写出错误,然后把 out 改成 in。
public class Mint {
public static void main(String[] args) {
Scanner reader = new Scanner(System.out);
String plant = reader.nextLine();
System.out.println(plant);
}
}
reader 必须先存在
Java 从上往下读文件。做出 reader 的那一行必须在使用 reader 的那一行上面。如果先写 String plant = reader.nextLine();,然后才写 Scanner reader = new Scanner(System.in);,保存行在 reader 存在之前就使用了名字 reader。javac 会写出错误。它不会保持安静。这和上一页的顺序是同一条:当时 plant 用在了 String plant 之前。改法是把 Scanner 那一行放到 nextLine 那一行上面。名字不能用在创建它的那一行更靠上的地方。
这份第五文件的顺序是坏的。它不是你保留的文件。只保存到 javac 写出错误,然后把 Scanner 那一行放回 nextLine 上面。你真正运行的文件里,import 那一行仍然需要。这份坏文件留着 import,好让新的错误只是顺序。
import java.util.Scanner;
public class Mint {
public static void main(String[] args) {
String plant = reader.nextLine();
Scanner reader = new Scanner(System.in);
System.out.println(plant);
}
}
输入 javac Mint.java。javac 写出错误。不要输入 java Mint。把 Scanner reader = new Scanner(System.in); 放到 String plant = reader.nextLine(); 上面。保存。再输入一次 javac Mint.java。现在 javac 不写任何一行。然后 java Mint 等着。键入 leaf,按下 Enter,程序写出 leaf。
书写行上的引号仍然是上一页那个意思。一次真正的 nextLine 之后,如果书写行是 System.out.println("plant");,你可以键入 leaf 并按下 Enter,程序的那一行仍然是 plant。引号标出字母 p、l、a、n、t。Java 不去找这个名字。你键入的那一行保存在 plant 里,没有被写出来。改法是裸名字 System.out.println(plant);。你保留的文件里已经是这个裸名字。保存行上也不要在 leaf 两边放引号。String plant = "leaf"; 会从文件自己保存 leaf,并且一次也不等。这一页让 nextLine 留在保存行上,让书写行保持是裸的。
你现在可以运行 Mint.java,等着,键入一行,按下 Enter,看见程序写出那一行。import java.util.Scanner; 在 public class 上面。Scanner reader = new Scanner(System.in); 在键盘上做出工具。String plant = reader.nextLine(); 保存这一行,不保存 Enter。System.out.println(plant); 写出它并结束这一行。后面的 plant = reader.nextLine(); 等第二次 Enter。import、System.in、以及 reader 在使用之前已经存在,这些让 javac 保持安静。下一页离开键盘。它看一个名字在你把值写进文件时可以保存哪些种类的值,从数字开始,不是从你键入的一行开始。
屏幕是你键入的那一行
你保留的文件不含 leaf。你在 java Mint 之后键入 leaf 并按下 Enter。终端显示这次键入。然后程序在下一行写出 leaf。你键入的空格是这一行的一部分。第二个 nextLine 是第二次 Enter,它不在你保留的文件里。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部