黑马程序员技术交流社区

标题: 键盘录入对象需要创建几次? [打印本页]

作者: lijiy09    时间: 2016-3-18 20:52
标题: 键盘录入对象需要创建几次?
public static void main(String[] args) {   
      Scanner sc = new Scanner(System.in);
      ArrayList<Integer> array = new ArrayList<Integer>();
  
      while(true){
             System.out.println("请输入数据");
             int number =sc.nextInt();
             if(number!=0){
             array.add(number);
            }else{
             break;
            }
      }
  
      Integer[] i = new Integer[array.size()];
      array.toArray(i);
      Arrays.sort(i);
      System.out.println("最大值为"+i[i.length-1]);
}
-------------------------------------------------------------------------------------
public static void main(String[] args) {   
      ArrayList<Integer> array = new ArrayList<Integer>();
  
      while(true){
             Scanner sc = new Scanner(System.in);
             System.out.println("请输入数据");
             int number =sc.nextInt();
             if(number!=0){
             array.add(number);
            }else{
             break;
            }
      }
  
      Integer[] i = new Integer[array.size()];
      array.toArray(i);
      Arrays.sort(i);
      System.out.println("最大值为"+i[i.length-1]);
}
这里把Scanner sc = new Scanner(System.in);分别放在while语句外面和里面,并不影响结果,放在外面时,只创建一次对象,但为什么当进行while语句循环时都可以存储一个输入数据,和每次在while里面创建对象是等效的吗?求解?


作者: a302550641    时间: 2016-3-18 23:01
因为你是通过sc调用Scanner类的方法,方法可以反复调用
作者: 陈文广    时间: 2016-3-18 23:45
显然不一样啊,只要是new 就会创建新的对象, Scanner sc = new Scanner(System.in);放循环里面代表每次都是新的键盘录入对象,这样会在内存中有很多垃圾.
作者: zapple926    时间: 2016-3-19 00:02
一次就可以吧,可以循环录入的吧
作者: zhangchao5292    时间: 2016-3-19 00:03
Scanner sc = new Scanner(System.in只在本类方法中有效
作者: lijiy09    时间: 2016-3-19 10:21
嗯,谢谢解答,我明白了~
作者: 就是我    时间: 2016-3-19 11:14
Scanner 创建对象,实际上是 输入流的 创建,将sc关联到你的键盘输入
就相当于创建了一个连接键盘和 Scanner对象的一个通道
通道不关闭,你再创建同样的通道是没有意义的,Scanner对象被创建多次的操作时无效的,
之后通过对象的方法来接收键盘的数据
Scanner 创建的对象也是可以被关闭的 .close()方法,
但一般不会关闭,因为关闭后再次创建sc对象会出错(Scanner对象只能被创建一次)


作者: ameanboy    时间: 2016-3-19 11:24
就是我 发表于 2016-3-19 11:14
Scanner 创建对象,实际上是 输入流的 创建,将sc关联到你的键盘输入
就相当于创建了一个连接键盘和 Scanner ...

正解 Scanner被多次创建无效。但是有没有大神来说说到运行期,虚拟机是怎么处理在循环内的新建scanner代码的呢?
作者: 赵国政    时间: 2016-3-19 11:50
签到 随便看看回复贴
作者: willsame    时间: 2016-3-19 11:57
我是来看评论的,可还是没看懂
作者: little_bear123    时间: 2016-3-19 12:20
scanner对象只能创建一次,多次创建会不会报错?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2