System类中的in属性 Scanner扫描器 读取控制台输入的内容 Scanner类中nextLine()方法的应用 查看所在包名类名的方法 代码连续写法,判断最终接收类型的方法

import java.util.Scanner;
/**
 *cover:
 *System类中的in属性
 *Scanner扫描器 读取控制台输入的内容
 *Scanner类中nextLine()方法的应用
 *查看所在包名类名的方法
 *代码连续写法,判断最终接收类型的方法
 *流、扫描器用后记得关闭和关闭时间节点分析
 *异常java.util.NoSuchElementException: No line found产生原因分析
*/

/**
 * alt+/调出此方法中定义的属性供选择  ctrl+/单行注释  ctrl+shift+/多行注释  ctrl+shift+F文本对齐
 * 编辑器会提示流用完要关闭,输出流由于是System类的静态变量,System.out.close()直接关闭即可,输入流in由于是扫描器封装的,关闭扫描器既关闭输入流,注意关闭的时间节点。
 * @author FFrog
 * */
public class InputCode {
	public static void main(String[] args){
		/*按住Alt+单击in,in在System类中是这样定义的:public final static InputStream in = null;
		同样Scanner在Scanner类是这样定义的:public final class Scanner implements Iterator<String>, Closeable{},Closeable接口抛出了一个异常。
		Scanner类没有static修饰,需要实例化。
		这里说明一下InputStream输入流需要用扫描器封装的原因:
		InputStream实际上是以字节为单位来获取数据,而且需要复杂的判断并创建字节数组作为缓冲,字节转成字符时也容易出现乱码,所以字符数据读取的时候用扫描器封装获得字符串类型的数据。
		*/
		Scanner scan = new Scanner(System.in);
		/*可以看到scan里面是一串数据包:是java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0]
		[match valid=false][need input=false][source closed=false][skipped=false]
		[group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E]
		[positive suffix=][negative suffix=][NaN string=\Q�\E][infinity string=\Q∞\E]*/
		System.out.println("scan里面是:"+scan);
		System.out.print("请输入:");
		String str = scan.nextLine();
		System.out.println("您输入的是"+str);
		/*联续的.属性.方法,我猜返回值是String类型,测试一下  
		注:因为直接用最终类型接收的,编辑器会提示 Resource leak: '<unassigned Closeable value>' is never closed*/	
		System.out.println("返回类型是,所在类class:"+new Scanner(System.in).nextLine().getClass());
		//知道 返回类型了,用String类型的变量接收一下
		String str2 = new Scanner(System.in).nextLine();
		System.out.print("请再次输入:");
		System.out.println("您输入的是:"+str2);
		//scan.close();
		/*由于这时你已经关闭了扫描器,就监听不到控制台你输入的内容
		 * Exception in thread "main" java.util.NoSuchElementException: No line found
		at java.util.Scanner.nextLine(Unknown Source)
		at com.kyxh.javaweb.example.InputCode.main(InputCode.java:23)*/
		System.out.println("第三次输入:");
		System.out.println("所在类class:"+new Scanner(System.in).nextLine().getClass());
		System.out.println("类名:"+new Scanner(System.in).nextLine().getClass().getName());
		//所在包:package java.lang, Java Platform API Specification, version 1.7
		System.out.println("所在包信息:"+new Scanner(System.in).nextLine().getClass().getPackage());
		//包名是:java.lang
		System.out.println("包名是:"+new Scanner(System.in).nextLine().getClass().getPackage().getName());
		//所在类class:class java.lang.String
		System.out.println("所在类class:"+str2.getClass());
		//包名是:java.lang
		System.out.println("包名是:"+str2.getClass().getPackage().getName());
		//类名是:java.lang.String
		System.out.println("类名是:"+str2.getClass().getName());
		//如果此时关闭输出流,则无法执行下一个方法
		//System.out.close();
		InputCode ic = new InputCode();
		ic.checkIDcardLength(str);
		/*checkIDcardLength(str)关闭了扫描器,里面的数据包也就没了,无法执行checkIDcardLength2(str2),
		也会出现异常:java.util.NoSuchElementException: No line found。*/
		InputCode.checkIDcardLength2(str2);
	}
	private String checkIDcardLength(String str){
		Scanner sc =  new java.util.Scanner(System.in);
		System.out.println("进来了。。。");
		System.out.println("请输入身份证号:");
		String result = sc.nextLine();
		System.out.println("原来你的身份证号是"+result.length()+"位数的啊!");
		//sc.close();
		return str;
	}
	private static String checkIDcardLength2(String str2){
		Scanner sc2 =  new java.util.Scanner(System.in);
		System.out.println("进来静态方法了。。。");
		System.out.println("请输入身份证号:");
		String result2 = sc2.nextLine();
		System.out.println("原来你的身份证号是"+result2.length()+"位数的啊!");
		sc2.close();
		return str2;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值