Scanner
` Scanner: 一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串
构造方法:
Scanner(InputStream source) 构造一个新的 Scanner ,产生从指定输入流扫描的值。`
获取一个数字:(无法输出空格,只能输出空格前的数字)
int i = sc.nextInt();
System.out.println(i);
获取一个字符串:(无法输出空格,只能输出空格前的字符串)
String s1 = sc.next();
System.out.println(s1);
获取字符串允许有空格:
String s1 = sc.nextLine(); //可以接收换行等空白特殊字符
System.out.println(s1);
获取数字的时候,我们是不是只能够输入数字呢?
会报错但是使用hasNextXxx()判断下一个输入的内容是否是指定类型
int i = sc.nextInt();
System.out.println(i);
if(sc.hasNextInt()){
int i = sc.nextInt();
System.out.println(i);
}else {
System.out.println("您输入的内容不是一个int类型的值!");
}
object
java中所有的类默认都有一个共同的父类:Object
打印一个对象名,默认调用的是类中的toString()方法
若我们自己没有编写该方法的话,默认使用父类Object类中的toString()
而父类中默认的toString()打印是一个地址值
我们今后打印一个对象名的时候,输出是地址值意义不大,我们今后更多的是想看一个对象中成员变量值的情况
要想实现上面的输出成员变量值的话,重写toString()方法,这样调用的就是自己重写后的toString()
自动生成即可
通过tostring()将其重写本来返回的是地址值比较重写成数值比较
点击查看代码
import java.util.Objects;
class Student{
String name;
int age;
Student(){
}
Student(String name,int age){
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class ToStringDemo1 {
public static void main(String[] args) {
Student s1 = new Student("王骏",21);
Student s2 = new Student("王骏", 21);
System.out.println(s1);
System.out.println(s1.equals(s2));
}
}
克隆
protected Object clone()
int hashCode() 返回对象的哈希码值。 可以看作地址值的另外一种表现形式
java中并不是所有的类都可以被克隆,只有授权的类的对象才可以使用克隆方法
我们通过阅读帮助文档后发现,若一个对象的类没有实现Cloneable接口的话,是不可以调用clone方法的
然后,我们再去看Cloneable接口的时候,发现该接口中没有任何抽象方法,今后像这样的接口称之为标记接口
克隆在IT行业中,称之为拷贝。
拷贝分为两种:
1、浅拷贝
2、深拷贝
面试题:Object类中的clone是浅拷贝还是深拷贝。答:是浅拷贝
点击查看代码
class Demo1 {
int a = 10;
}
class Student3 implements Cloneable {
String name;
int age;
Demo1 demo1;
public Student3() {
}
public Student3(String name, int age, Demo1 demo1) {
this.name = name;
this.age = age;
this.demo1 = demo1;
}
@Override
public String toString() {
return "Student3{" +
"name='" + name + '\'' +
", age=" + age +
", demo1=" + demo1 +
'}';
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class ObjectDemo4 {
public static void main(String[] args) throws Exception {
Demo1 d1 = new Demo1();
Student3 s1 = new Student3("刘亦菲", 36, d1);
System.out.println("s1: " + s1);
System.out.println(s1.hashCode());
// Student3 s2 = new Student3("章若楠", 21);
System.out.println("===========================================");
//首先,如果此对象的类不实现接口Cloneable ,则抛出CloneNotSupportedException 。
// Object o1 = s1.clone();
Object o1 = s1.clone();
System.out.println("o1: " + o1);
System.out.println(o1.hashCode());
}
}