Scanner主要功能是扫描键盘录入的数据
1.判断
2.获取下一个标记
1.1 首先引入Object类
1.1.1-Object 概述:
Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。
java.lang包在使用的时候无需显示导入,编译时由编译器自动导入。
Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。
Object类是Java中唯一没有父类的类。
其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法.
1.1.2-Object 构造方法:
Object():无参构造
Java中规定:在类定义过程中,对于未定义构造函数的类,默认会有一个Object基类无参数的构造函数。
当然,并不是所有的类都是通过此种方式去构建,也自然的,并不是所有的类构造函数都是public。
1.1.3-Object 成员方法:
public int hashCode()返回一个整形数值,表示该对象的哈希码值
public final Class getClass()返回一个对象的运行时类
public boolean equals(Object obj)指示某个其他对象是否与此对象“相等”
protected
void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
protectedObject clone() 创建并返回此对象的一个副本
public String toString() 返回该对象的字符串表示
注意1:toString()方法相信大家都经常用到,即使没有显式调用,但当我们使用System.out.println(obj)时,其内部也是通过toString()来实现的。
注意2:==和equals()的区别?
==:既可以比较基本数据类型也可以比较引用数据类型
基本类型:比较的是值是否相同
引用类型:比较的是地址值是否相同
equals():只能比较引用数据类型
默认情况下,比较的是地址值是否相同。
重写,比较两个内容是否相等。
1.1.4-Object 注意事项:
因为Object类时所有类的基类,所以任何类中都存在这些方法,但是只要用到这些方法时基本都需要重写,因为在object类中的这些方法并不一定适合我们的需求环境。所以这里就不再写代码实现了。
2.1 其次最终引入Scanner的应用
2.1.1- Scanner 概述:
键盘录入类。在JDK1.5版本出现。
Java.util.Scanner是Java5的新特征,主要功能是键盘录入数据。
2.1.2- Scanner 构造方法:
Scanner(InputStreamsource) 键盘录入
例如:Scanner Scanner = newScanner(System.in);
2.1.3- Scanner 成员方法:
hasNext() 判断扫描器中当前扫描位置后是否还存在下一段
hasNextLine()如果在此扫描器的输入中存在另一行,则返回 true。
next() 查找并返回来自此扫描器的下一个完整标记。
nextLine() 此扫描器执行当前行,并返回跳过的输入信息。
以下是对以上四类的详解:
intnextInt(int radix) //将输入信息的下一个标记扫描为一个 int。
String nextLine() // 此扫描器执行当前行,并返回跳过的输入信息。
long nextLong() // 将输入信息的下一个标记扫描为一个 long。
short nextShort() // 将输入信息的下一个标记扫描为一个short。
常用的成员方法代码如下所示:
将键盘录入的信息全部打印输出到控制台代码如下所示:
2.1.4- Scanner 五个注意事项:
1、使用nextInt()时输入的内容必须为数字,如果输入了字符串,程序结束并且会报异常.
效果如下图所示:
注:需要仔细审题,再进行其测试.
(1)使用nextInt()时输入的内容必须为数字,如果输入了字符串,程序结束并且会报异常。
案例:
int i = scanner.nextInt();
System.out.println(i);
2、nextInt()和next()判断读取结束的标识是空白符;比如空格、回车、tab键,而nextLine()的结束标识是回车也就是"\r".
效果如下图所示:
-1(第一种是当(即遇到那些字符就会结束掉):
第二种是(如果不想让它遇到空格结束的解决方案是:nextLine())):
(2)nextInt()和next()判断读取结束的标识是空白符;比如空格、回车、tab,而nextLine()的结束标识是回车也就是“\r”。
案例:
int i = scanner.nextInt();//遇到空格、回车、tab键就会结束
System.out.println(i);
//如果不想让他遇到空格结束的解决方案是:nextLin()
String s = scanner.nextLine();
System.out.println(s);
3、next()和nextInt()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键,
Tab键或Enter键等结束符,next()方法会自动将其去掉,而nextLine()不管是否读到有效字符
遇到结束符都会结束.
效果如下图所示:
-1(第一种:nextInt()):
-2(第二种:next()):
-3(第三种:nextLine()):
(3)next()和nextInt()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,而nextLine()不管是否读到有效字符,遇到结束符回车都会结束。
代码:
String i = scanner.next();//遇到有效字符才会结束
System.out.println(i);
String s = scanner.nextLine();//空格
System.out.println(s);
4、next()和nextInt()读到有效字符后不会将结束符擦除,而nextLine()是会将结束符擦除的.
效果如下图所示:
-1(第一种:next()):注:以下效果图中只显示了next()的案例,将nextInt()缩写了.
-2(第二种:nextLine()):
(4) next()和nextInt()读到有效字符后不会将结束符擦除,而nextLine()是会将结束符擦除的。
案例:
String next = scanner.next();//中间遇到空格,会自动将后面的字符擦除掉,只输出空格前的字符
System.out.println(next);
String nextLine = scanner.nextLine();//会将结束符擦除
System.out.println(nextLine);
String nextLine2 = scanner.nextLine();
System.out.println(nextLine2);
5、同一个Scanner对象,不能先录入int,再录入String值,会出异常.
//解决方案一、a:使用两个Scanner对象分别接收即可.
//解决方案二、/b:将第一个值,使用String类型,后转换为int即可.
(5) 同一个Scanner对象,不能先录入int,再录入String值,会出异常。
代码:
int i = scanner.nextInt();
Scanner scanner2 = new Scanner(System.in);
String s = scanner2.nextLine();
System.out.println(i + ":" + s);
//将String类型的数值,转换化为in类t型
String num1 = scanner.nextLine();
String num2 = scanner.nextLine();
int num3 = Integer.valueOf(num1);
System.out.println(num3 + ":" + num2);