关于JAVA,System.in如何执行的问题。

2024-12-22 16:52:56
推荐回答(4个)
回答1:

1. 此时我还可以继续输入新的字符串,难道程序又跳到System.in吗?

你要知道 IO inputStream outputStream 的原理。

InputStream OutputStream 和他们的缓冲器。 都相当于一条管道。 Buffer 相当于一个水池,或者说一个大的水管。

当 br.readLine(); 的时候 管道会向来源方 抽水(索取一行字符串) 会一直等到有水来了为止。(阻塞,一直等待) 而管道那头连接的是 用户输入(System.in)

所以当你调用 br.readLine(); 的时候。 就相当于会向管道的那头System.in 索取一行数据。

只要没进行 br.close() 之前,这个管道是建立 相通的。

所以 正确上来说。 程序不是 跳到第一个 System.in 那行。 而是 从没关闭的通道 里 获取System.in的用户输入。

希望我的回答,能让你明白。有任何问题请追问。 我的回答如果对你有帮助的话,请采纳。

回答2:

java se5以后提供了一个比较好的输入方法
下面是一个小例子:
import java.util.*;
class test{
public static void main(String []args){
Scanner cin=new Scanner(System.in);
System.out.println("请输入你的名字:");
String name=cin.nextLine();
System.out.println("你输入你的年龄");
int age=cin.nextInt();
System.out.println("你的名字是:"+name+" "+"你的年龄是:"+age);}
}

就像上面一样,如果想输入double则用,nestDouble等

回答3:

语句在执行的时候都是执行等号右边,将返回值赋给左边的变量,在readLine()这里,看似只有一句,其实在方法体里有好多句,这里就阻塞在了等待结束符的地方,只有当你输入结束符(注:readLine()的结束符就是回车),这句才会有返回值,程序才会继续往下走,这句运行之后s指向你新输入的字符串,不可能为空的,即便直接敲回车s="",这也不是null,这是字符串,只是长度为0而已!

回答4:

s = br.readLine();
while(s!=null){
if(s.equalsIgnoreCase("exit")) break;
System.out.println(s.toUpperCase());
s = br.readLine();
}
这个循环基本上是个死循环,这里的s不可能为null
s = br.readLine() 这里的s,每次执行完都指向一个新的字符串。但执行到这里的时候会阻塞,阻塞期间s的值还是上一次循环时的值