Java进阶01常用类

Java进阶01常用类

包装类

image
image
image

package com.mingmao.commonclass.wrapperclass;

import org.omg.PortableInterceptor.INACTIVE;

public class Test {
    public static void main(String[] args) {
        //调用Integer类的属性
        System.out.println(Integer.MAX_VALUE);//返回int类型数据的最大值
        System.out.println(Integer.MIN_VALUE);//返回int类型数据的最小值
        //物极必反
        System.out.println(Integer.MAX_VALUE+1);//返回int类型数据的最小值
        System.out.println(Integer.MIN_VALUE -1);//返回int类型数据的最大值

        //创建Integer类的对象
        Integer i1=new Integer(12);//int-->Integer
        //Integer i2=new Integer("abc");//抛出异常
        Integer i2=new Integer("12");//可以传能转换成int类型的字符串,String-->Integer

        //int-->Integer其他方法:自动装箱
        Integer i3=12;//int-->Integer
        //自动拆箱
        int i4=i3;//Integer-->int

        //调用Integer的方法
        //compareTo
        System.out.println(i1.compareTo(i2));//0:x=y->0,x<y->-1,x>y->1

        //equals
        System.out.println(i1.equals(i2));//true 比较值
        System.out.println(i1 == i2);//false 比较地址

        //自动装箱的比较
        Integer i5=13;
        Integer i6=13;
        System.out.println(i5==i6);//true byte类型范围内-128-127,地址相同

        Integer i7=129;
        Integer i8=129;
        System.out.println(i7==i8);//false byte类型范围外,地址不同

        //intValue
        System.out.println(i8.intValue());//返回int类型

        //parseInt
        System.out.println(Integer.parseInt("129"));//返回int类型

        //toString
        System.out.println(i8.toString());//转换成String类型

        //valueOf
        Integer.valueOf(129);//int类型转换成Integer,与自动装箱一致
    }
}

String

package com.mingmao.commonclass.stringcode;

public class Test {
    public static void main(String[] args) {
        String s1="你好,2021!";
        System.out.println(s1);

        //创建对象
        String s2="abc";
        String s3=new String();
        String s4=new String("abc");
        String s5=new String(new char[] {'a','b','c'});

        //输出数组长度
        System.out.println(s1.length());

        //判断是否是空数组
        System.out.println(s3.isEmpty());
        System.out.println(s2.isEmpty());

        //输出字符串中第n个字符
        System.out.println(s1.charAt(2));

        //比较字符串的值
        System.out.println(s2.equals(s4));//比较值
        System.out.println(s2==s4);//比较地址

        //  按字典顺序比较两个字符串。
        String s6="abc";
        String s7="abcdefg";
        System.out.println(s6.compareTo(s7));//-4

        //返回特定字符在字符串中的索引值
        System.out.println(s7.indexOf('d'));//3

        //返回指定索引的子字符串
        System.out.println(s7.substring(2,5));

        //拼接两个字符串
        System.out.println(s6.concat(s7));

        //替换字符串中的特定字符
        System.out.println(s7.replace('a','h'));

        //去除字符串头尾空格
        String s9="  hjknmm   ";
        System.out.println(s9);
        System.out.println(s9.trim());

        //int转String
        System.out.println(String.valueOf(12));

    }
}

String内存加反编译验证

package com.mingmao.commonclass.stringcode;

public class Test1 {
    public static void main(String[] args) {
        String s1="abc";
        String s2="a"+"b"+"c";
        String s3="abc"+"";
        String s4=s1+"";
        String s5=new String("abc");

        System.out.println(s1==s2);//true
        System.out.println(s1==s3);//true
        System.out.println(s1==s4);//false
        System.out.println(s1==s5);//false
    }
}

image

StringBuilder

空构造器:长度16
image
数组的扩容
image

package com.mingmao.commonclass.stringbuildercode;

public class Test {
    public static void main(String[] args) {
        StringBuilder sb1=new StringBuilder();//可变字符串 长度16,count=0
        StringBuilder sb2=new StringBuilder(23);
        StringBuilder sb3=new StringBuilder("abc");//长度19,count=3

        System.out.println(sb1);
        System.out.println(sb2);
        System.out.println(sb3);

        //增
        System.out.println(sb3.append("defyuioopjkl"));

        //删
        System.out.println(sb3.delete(3,6));
        System.out.println(sb3.deleteCharAt(3));

        //改
        System.out.println(sb3.insert(3,"aaa"));
        System.out.println(sb3.replace(3,5,"我好累"));
        sb3.setCharAt(3,'!');
        System.out.println(sb3);

        //查
        System.out.println(sb3.substring(3,6));
    }
}

StringBuffer

package com.mingmao.commonclass.stringbuffercode;

public class Test {
    public static void main(String[] args) {
        StringBuffer sb3=new StringBuffer("abc");//长度19,count=3

        System.out.println(sb3);

        //增
        System.out.println(sb3.append("defyuioopjkl"));

        //删
        System.out.println(sb3.delete(3,6));
        System.out.println(sb3.deleteCharAt(3));

        //改
        System.out.println(sb3.insert(3,"aaa"));
        System.out.println(sb3.replace(3,5,"我好累"));
        sb3.setCharAt(3,'!');
        System.out.println(sb3);

        //查
        System.out.println(sb3.substring(3,6));
    }
}

StringBuilder与StringBuffer的区别

image

模拟集合ArrayList

package com.mingmao.commonclass.arraylist;

import java.util.Arrays;

public class MyCollection {
    //底层是一个数组--Object[]
    Object[] value;

    //数组中被占用的个数
    int size;

    //定义空构造器
    public MyCollection() {
        //value=new Object[16];
        this(16);
    }
    //定义有参构造器
    public MyCollection(int num) {
        value=new Object[num];
    }

    //定义增方法
    public MyCollection add(Object obj){
        value[size]=obj;
        size++;
        //数组扩容
        if(size>value.length-1){
            Object[] obj2=new Object[value.length*2+2];
            for (int i =0 ;i <=value.length-1; i++) {
                obj2[i]=value[i];
            }
            value=obj2;
        }
        return this;
    }

    //定义取方法
    public Object get(int index){
        if(index<0 || index>=size){
            throw new RuntimeException("超出边界");
        }
        return value[index];
    }

    //定义获取长度的方法
    public int size(){
        return size;
    }

    //重写toString方法


    @Override
    public String toString() {
       StringBuilder sb=new StringBuilder("[");
        for (int i = 0; i <size-1; i++) {
            sb.append(value[i]+",");
        }
        sb.append(value[size-1]);
        sb.append("]");
        return sb.toString();
    }

    public static void main(String[] args) {
        //创建对象
        MyCollection mc=new MyCollection();
        MyCollection mc2=new MyCollection(23);

        //调用方法
        mc.add("abc");
        mc.add(123);
        mc.add(new Student("lili",18));
        System.out.println(mc.get(2));
        for (int i = 0; i <mc.size(); i++) {
            System.out.print(mc.get(i)+" ");
        }
        System.out.println();

        //System.out.println(mc.get(-2));
        System.out.println(mc.toString());

        mc.add(23).add("po");
        System.out.println(mc.toString());
    }
}
package com.mingmao.commonclass.arraylist;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

时间处理类

Date

package com.mingmao.commonclass.timeprocessingclass;

import java.sql.Time;
import java.sql.Timestamp;
import java.util.Date;

public class Test {
    public static void main(String[] args) {
        Date d1=new Date();

        //打印当前时间
        System.out.println(d1); //Sat Sep 11 14:21:24 CST 2021=GMT+8
        System.out.println(d1.toGMTString());//11 Sep 2021 06:21:24 GMT 有中划线的方法是过期方法,建议不用
        System.out.println(d1.toLocaleString());//2021-9-11 14:26:06

        System.out.println(d1.getYear());//121  +1900=2021
        System.out.println(d1.getMonth());//8  +1=9
        System.out.println(d1.getDate());//11
        System.out.println(d1.getDay());//6  星期

        System.out.println(d1.getTime());//1631341966992 距离1970年1月1号0:0:0的毫秒数
        System.out.println(System.currentTimeMillis());//1631341967039 同上,常用,不用创建对象

        //java.sql.data
        java.sql.Date sqlDate=new java.sql.Date(45678909008L);
        java.sql.Date sqlDate1=new java.sql.Date(1631341967039L);

        System.out.println(sqlDate);//1971-06-14
        System.out.println(sqlDate1);//2021-09-11
        System.out.println(java.sql.Date.valueOf("2019-01-08"));//2019-01-08

        //java.sql.data与java.util.Date相互转换
        //sql-->util 子类转父类
        Date ud=sqlDate;
        System.out.println(ud);//1971-06-14

        //util-->sql
        java.sql.Date sd=new java.sql.Date(new Date().getTime());
        System.out.println(sd);//2021-09-11

        //java.sql.Time
        Time t=new Time(100L);
        Time t2=new Time(new Date().getTime());

        System.out.println(t);//08:00:00
        System.out.println(t.toGMTString());//1 Jan 1970 00:00:00 GMT
        System.out.println(t2);//14:52:37
        System.out.println(t2.toGMTString());//11 Sep 2021 06:52:37 GMT

        //java.sql.Timestamp 时间戳
        Timestamp ts=new Timestamp(new Date().getTime());

        System.out.println(ts);//2021-09-11 14:54:39.768
    }
}

时间格式
image

package com.mingmao.commonclass.timeprocessingclass;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test2 {
    public static void main(String[] args) {
        //String--> Date
        //方法一:字符串格式必须是yyyy-mm--dd
        Date d=java.sql.Date.valueOf("2019-1-8");
        System.out.println(d);//2019-01-08

        //方法二:日期格式化类
        DateFormat df=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");//自己给定输出格式

        try {
            System.out.println(df.parse("2019-1-8 12:30:21"));//Tue Jan 08 12:30:21 CST 2019
        } catch (ParseException e) {
            e.printStackTrace();
        } finally {
        }

        //Date-->String
        System.out.println(df.format(new Date()));//此处打印指定的输出格式 2021-15-11 15:15:13
    }
}

Calendar

Calendar很强大,但是用得少!

package com.mingmao.commonclass.timeprocessingclass;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test3 {
    public static void main(String[] args) {
        //创建一个日历
        Calendar cal=Calendar.getInstance();
        Calendar cal2=new GregorianCalendar();

        System.out.println(cal);
        /*
        java.util.GregorianCalendar[
        time=1631345063783,
        areFieldsSet=true,
        areAllFieldsSet=true,
        lenient=true,
        zone=sun.util.calendar.ZoneInfo[
        id="Asia/Shanghai",
        offset=28800000,
        dstSavings=0,
        useDaylight=false,
        transitions=31,
        lastRule=null],
        firstDayOfWeek=1,
        minimalDaysInFirstWeek=1,ERA=1,
        YEAR=2021,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=254,DAY_OF_WEEK=7,
        DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=24,SECOND=23,MILLISECOND=783,
        ZONE_OFFSET=28800000,DST_OFFSET=0]
         */

        //常用方法
        //读取get
        System.out.println(cal.get(Calendar.YEAR));//2021
        System.out.println(cal.get(Calendar.MONTH));//8  +1=9
        System.out.println(cal.get(Calendar.DATE));//11
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));//7 周日是第一天
        System.out.println(cal.getActualMaximum(Calendar.DATE));//30 这月最大的一天
        System.out.println(cal.getActualMaximum(Calendar.MONTH));//11  +1=12从0开始

        //设置set
        cal.set(Calendar.DATE,16);
        cal.set(Calendar.MONTH,3);
        cal.set(Calendar.YEAR,2009);
        System.out.println(cal);

        /*
        java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
        YEAR=2009,MONTH=3,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=16,DAY_OF_YEAR=254,DAY_OF_WEEK=7,
        DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=35,SECOND=35,MILLISECOND=39,ZONE_OFFSET=28800000,DST_OFFSET=0]
         */

        //String-->Calendar
        cal.setTime(java.sql.Date.valueOf("2019-1-8"));
        System.out.println(cal);

    }
}

练习:输入日期,给出日历
image

package com.mingmao.commonclass.timeprocessingclass;

import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class CanlendarCode {

    public void calendar(){
        Scanner s=new Scanner(System.in);
        System.out.print("请输入你想要查看的日期--(格式例如:2016-10-21):");
        String date=s.nextLine();
        System.out.println();

        if(!(date.isEmpty())){
            printCalendar(date);
        }
    }

    public void printCalendar(String date){
        System.out.println("日"+"\t"+"一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六");

        //获取输入月份1号是星期几
        Date d=java.sql.Date.valueOf(date);
        int year=d.getYear()+1900;
        int month=d.getMonth()+1;
        int day=d.getDate();
        Date d2=java.sql.Date.valueOf(year+"-"+month+"-"+1);
        int initalweek=d2.getDay();
        //获取输入月份的天数
        Calendar cal=Calendar.getInstance();
        int daynum=cal.getActualMaximum(Calendar.DATE);

        int num=0;
        //输出前面的空格
        if(initalweek<=6 && initalweek>=1){
            for (int i = 0; i <initalweek; i++) {
                System.out.print("\t");
                num++;
            }
        }
        //输出日历
        for (int i = 1; i <=daynum; i++) {
            if(num%7==0){
                System.out.println();
            }
            if(i==day){
                System.out.print(i+"*"+"\t");
            }else{
                System.out.print(i+"\t");
            }
            num++;
        }
    }

    public static void main(String[] args) {
        CanlendarCode calc=new CanlendarCode();
        calc.calendar();
    }
}

枚举

值固定的时候使用枚举

package com.mingmao.commonclass.timeprocessingclass;

public enum Gender {
    男,女;
}
package com.mingmao.commonclass.timeprocessingclass;

public class Person {
    private String name;
    private int age;
    //private String sex;
    private Gender sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Gender getSex() {
        return sex;
    }

    public Person() {
    }

    public Person(String name, int age, Gender sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public void setSex(Gender sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public static void main(String[] args) {
        Person p=new Person();
        p.setName("lili");
        p.setAge(18);
        p.setSex(Gender.女);
        System.out.println(p);

        Person p2=new Person("nana",21,Gender.女);
        System.out.println(p2);

        //switch后面可以放枚举类型
        Gender sex=Gender.男;
        switch (sex){
            case 男:
                System.out.println("这是男孩");
                break;
            case 女:
                System.out.println("这是女孩");
                break;
            default:
                break;
        }
    }
}

Math类

package com.mingmao.commonclass.mathandrandom;
//静态导包
import static java.lang.Math.*;
public class Test {
    public static void main(String[] args) {
        //Math类
        //属性
        System.out.println(Math.PI);

        //方法,静态导包后调用时不用加Math.
        System.out.println(Math.pow(3.0,2.0));//x^y
        System.out.println(Math.sqrt(9.0));//开平方
        System.out.println(ceil(9.1));//向上取整
        System.out.println(floor(9.1));//向下取整
        System.out.println(round(5.3));//四舍五入
        System.out.println(random());//随机数0.0<=x<1.0
        System.out.println(abs(-9.8));//绝对值
        System.out.println(min(9.0,18.8));//取小
        System.out.println(max(9.0,18.8));//取大
    }
}

Random类

package com.mingmao.commonclass.mathandrandom;

import java.util.Random;

public class Test1 {
    public static void main(String[] args) {
        System.out.println(Math.random());//[0.0,1.0)之间的随机数

        //Random类
        //有参
        Random r=new Random(10);//随机数种子为10,所以每次产生的随机数一样
        for (int i = 1; i <=3; i++) {
            System.out.println(r.nextInt());
        }

        System.out.println("---------------------------------------------------");
        Random r1=new Random(8);
        for (int i = 1; i <=3; i++) {
            System.out.println(r1.nextInt());
        }

        System.out.println("---------------------------------------------------");
        Random r2=new Random(System.currentTimeMillis());//产生变化的随机数
        for (int i = 1; i <=3; i++) {
            System.out.println(r2.nextInt());
        }

        //无参
        System.out.println("---------------------------------------------------");
        Random r3=new Random();//产生变化的随机数
        for (int i = 1; i <=3; i++) {
            System.out.println(r3.nextBoolean());
        }

        System.out.println("---------------------------------------------------");
        Random r4=new Random();//产生变化的随机数
        for (int i = 1; i <=3; i++) {
            System.out.println(r4.nextDouble());//[0.0,1.0)
        }

        System.out.println("---------------------------------------------------");
        for (int i = 1; i <=3; i++) {
            System.out.println(r4.nextInt(10));//[0,10)
        }
    }
}

学习视频

学习视频

File类

package com.mingmao.commonclass.file;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;

public class Test {
    public static void main(String[] args) {
        File f=new File("D:\\file\\javatest\\JavaSE\\java进阶\\src\\com\\mingmao\\commonclass\\file\\1.jpg");

        //判断文件状态
        System.out.println(f.isDirectory());//是否是文件夹 false
        System.out.println(f.isFile());//是否是文件 true
        System.out.println(f.exists());//文件是否存在 true
        System.out.println(f.canRead());//文件是否可读 true
        System.out.println(f.canWrite());//文件是否可写 true
        System.out.println(f.isHidden());//是否是隐藏状态 false

        //获取文件信息
        System.out.println(f.getAbsolutePath());//获取绝对路径
        System.out.println(f.getPath());//获取相对路径,一般用相对路径,与盘符无关
        System.out.println(f.getName());//获取文件名称
        System.out.println(f.length());//获取文件长度,字节
        System.out.println(f.lastModified());//获取最后一次修改时间 1631353336943返回的是毫秒
        System.out.println(new Date(f.lastModified()));//Sat Sep 11 17:42:16 CST 2021
        SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(s.format(new Date(f.lastModified())));//2021-09-11 17:42:16

    }
}

学习视频

学习视频

Object类

每个类都直接或者间接的继承Object类

hashCode方法和getClass方法

package com.mingmao.commonclass.object;

public class Student {
}
package com.mingmao.commonclass.object;

public class StudentTest {
    public static void main(String[] args) {
        //hashCode方法
        Student s1=new Student();
        System.out.println(s1.hashCode());//460141958,根据地址值根据哈希算法换算成的一个整数值

        Student s2=new Student();
        System.out.println(s2.hashCode());//1163157884

        Student s3=s1;
        System.out.println(s3.hashCode());//460141958,与s1哈希值一样


        //getClass方法
        //返回运行时类,Class类有一个方法getName,返回对象名
        Student s4=new Student();
        Class c=s4.getClass();
        System.out.println(c.getName());//com.mingmao.commonclass.object.Student

        //链式编程
        System.out.println(s4.getClass().getName());//com.mingmao.commonclass.object.Student

    }
}

toString方法

package com.mingmao.commonclass.object.tostring;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.mingmao.commonclass.object.tostring;

public class StudentTest {
    public static void main(String[] args) {
        //toString 方法 返回对象的字符串表示
        //建议所有子类都重写此方法
        //toString等价于this.getClass().getName()+@+Integer.toHexString(this.hashCode)
        Student s1=new Student();

        //Object类的toString方法
        System.out.println(s1.toString());//com.mingmao.commonclass.object.tostring.Student@1b6d3586,十六进制
        System.out.println(s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode()));
        //com.mingmao.commonclass.object.tostring.Student@1b6d3586,十六进制

        //重写的toString方法
        System.out.println(s1.toString());//Student{name='null', age=0}

        //直接输出对象名称相当于调用了toString方法
        System.out.println(s1);//Student{name='null', age=0}
    }
}

equals方法

package com.mingmao.commonclass.object.equals;

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.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);
    }
}
package com.mingmao.commonclass.object.equals;

public class StudentTest {
    public static void main(String[] args) {
        //==比较
        //基本数据类型:比较值
        //引用数据类型:比较地址
        Student s1=new Student("lili",13);
        Student s2=new Student("lili",13);
        Student s3=s1;
        System.out.println(s1==s2);//false
        System.out.println(s3==s1);//true
        System.out.println(s2==s3);//false


        //equals方法
        //默认情况下与==一样,但是只能比较引用数据类型,源码如下:
        /*public boolean equals(Object obj) {
                return (this == obj);
        }*/
        System.out.println(s1.equals(s2));//false
        System.out.println(s1.equals(s3));//true
        System.out.println(s2.equals(s3));//false

        //比较地址值一般意义不大,所以我们要重写equals方法
        //调用重写后equals方法
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equals(s3));//true
        System.out.println(s2.equals(s3));//true
    }
}

finalize和clone方法

package com.mingmao.commonclass.object.finalizeandclone;

import java.util.Objects;

public class Student implements Cloneable{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @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);
    }
}
package com.mingmao.commonclass.object.finalizeandclone;

import java.util.Objects;

public class StudentTest {
    public static void main(String[] args) throws CloneNotSupportedException{
        //finalize方法
        //用于垃圾回收,但是什么时候回收不确定

        //clone 创建并返回一个对象的副本
        //需要重写
        //克隆的对象与原对象地址不同
        //重写时必须继承接口Cloneable 它是一个没有方法的接口,叫做标记接口,实现此接口才能实现对象的复制
        Student s=new Student("lili",18);
        Object obj= s.clone();
        Student s2=(Student)obj;
        System.out.println(s2);//Student{name='lili', age=18}
        System.out.println(s2==s);//false
        System.out.println(s2.equals(s));//true

        //如下操作的对象与原对象地址相同
        Student s3=s;
        System.out.println(s3);//Student{name='lili', age=18}
        System.out.println(s3==s);//true
        System.out.println(s3.equals(s));//true

    }
}

学习视频

学习视频

posted @ 2021-09-12 09:12  明懋  阅读(35)  评论(0)    收藏  举报