常用类--Scanner,object

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());


    }
}

posted @ 2024-09-28 19:48  wang_jun  阅读(14)  评论(0)    收藏  举报