Object类、Date类、Calendar(日历)类、System类、StringBuilder类、包装类

版权声明:版权归 你的pizza到了 所有,未经允许不可转载 https://blog.csdn.net/qq_38353993/article/details/82389313

1、Object类-概述

1)、在java.lang包之下,lang包是物理存在的,jdk中,lang包之下的都不需要进行导包

2)、Object是Java中任何”引用类型“的父类

3)、任何引用类型都会从Object中继承来方法

2、Object类-toString方法

1)、toString()方法的作用,就是打印所有属性的值

在使用println()时,会直接自动的调用一个toString()(会将引用类型的地址打印出来),建议在(引用类型中)使用toString方法时,对其进行重写

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

测试类:

public class Demo01 {
    public static void main(String[] args) {
        Student stu = new Student("ez",12);
        System.out.println(stu);//当时用println()时,会自动的调用对象重写后的toString
    }
}
  • [ ] 在开发时使用alt+ins快捷重写toString方法

3、Object类-equals方法

1)、equals()方法的作用,就是比较”俩个对象“的所有属性值是否完全相同

直接使用时,是对俩个对象的地址进行比较,所以建议在使用时最好对其进行重写

在类中对其进行重写:

public class Student {
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        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);
    }

}

测试类:

public class Demo01 {
    public static void main(String[] args) {
        Student student = new Student("ez",12);
        System.out.println(student);//调用toString方法,因为没有对其进行重写,打印出的是对象的地址

        Student stu1 = new Student("卡尔萨斯",68);
        Student stu2 = new Student("卡尔萨斯",68);
        System.out.println(stu1.equals(stu2));
        System.out.println(stu1.equals(student));
    }
}
  • [ ] 在开发时使用alt+ins快捷键重写equals方法
  • [ ] 注意:==运算符是比较俩对象的地址

4、Object类-Objects类

1)、java.util.Objects类:内部定义了大量的对”对象”操作的一些”静态方法”

2)、equals(Object o1,Object o2,),比较俩个对象”是否完全相同”

此方法也是基于重写后的equals方法,使用前也需要对equlas方法进行重写

对方法进行重写:

public class Student {
    String name;
    int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        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);
    }
}

测试类:

public class Demo02 {
    public static void main(String[] args) {
        Student stu1 = new Student("ez",12);
        Student stu2 = new Student("马尔扎哈",888);
        Student stu3 = new Student("马尔扎哈",888);

        System.out.println(stu2.equals(stu1));
        System.out.println(stu2.equals(stu3));

        System.out.println(Objects.equals(stu1,stu2));
        System.out.println(Objects.equals(stu2,stu3));
        //equlas()方法与Objects.equals()方法结果一样,但是当有对象为空时,是用后者更加安全
    }
}
  • [ ] Objects类中的equlas()方法,会对对象是否为空做出判断更加完整
  • [ ] 而Object中的equlas()方法,不对是否为空做出判断,在使用时容易发生空指针异常

5、日期和时间类-Date类

1)、java.util.Date类,代表了一个特定时间:单位:毫秒

2)、构造方法:

​ 1)、Date(),使用当前系统时间构造一个Date对象

​ 2)、Date(long m),使用一个”毫秒值”表示时间,起始时间为1970年1月1日零时

3)、成员方法:

​ 1)、public long getTime():获取此Date对象代表的毫秒值,从1970年1月1日零时起始

​ 2)、public long setTime(long m):设置次Date对象的毫秒值,此Date的值对被其修改

public class demo03 {
    public static void main(String[] args) {
        //1、无参的构造方法
        Date date = new Date();
        System.out.println(date);//使用默认的Date的打印方式

        System.out.println("从1970年01月01日零时,到现在的总毫秒值:"+date.getTime());//获取现在到1970-01-01 00:00的毫秒值
        System.out.println("重新设置date对象");
        date.setTime(1000 * 3600);
        System.out.println(date);

        //2、带参的构造方法 Date(long l),在创建对象时,就对date对象进行setTime
        Date date1 = new Date(1000 * 3600);
        System.out.println(date1);
        System.out.println("d2的getTime():"+date1.getTime());
    }
}

6、DateFormat类-将Date转换为String

1)、java.text.DateFormat(抽象类):可以对Date进行”格式化显示”的一个工具类。

2)、java.text.SimpleDateFormat(DateFormat的子类)

​ 1)、format(Date date)将date对象按照指定的格式转化为一个String

public static void main(String[] args) {
        //先创建SimpleDateFormat对象,并指定格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //指定格式后,使用其format方法对date的对象进行格式化
        String string = dateFormat.format(new Date());
        System.out.println(string);
    }
  • [ ] 注意在使用时要先new一个SimpleDateFormat对象,并指定要格式化的格式

7、将String转换为Date格式

1)、public Date parse(String str);将一个字符串的对象转换为Date对象

先创建SimpleDateFormat对象指定与String相同的格式

public static void main(String[] args) throws ParseException {
        String string = "2018-09-04 16:24:45";
        //创建SimpleDateFormat对象时的格式必须与String的格式相同
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = dateFormat.parse(string);
        System.out.println(d);
    }
  • [ ] 注意在创建SimpleDateFormat对象时的格式必须与String的格式相同

练习:计算自己来到世界的天数

分析图:

这里写图片描述

通过使用getTime()方法,计算出自己生日到 1970年的毫秒数date1,再计算出今天到1970年的毫秒数date2,用date2减去date1得到自己来到世界的毫秒数,在换算为天数即可

代码:

public static void main(String[] args) throws ParseException {
        //获取你的生日
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的生日(格式:yyyy-MM-dd):");
        String s = scanner.next();
        //将输入的生日转换为Date对象
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dateFormat.parse(s);
        //获取生日到1970年1月1日的毫秒值
        long date1 = date.getTime();
        //获取今天到1970年1月1日的毫秒值
        long date2 = new Date().getTime();

        //计算俩毫秒值的差,并转换
        System.out.println("你到这个世界已经:"+(date2-date1)/1000/3600/24+"天了");
    }

8、Calendar(日历)类

1)、java.util.Calendar(抽象类),代表一个日历,可以进行日期运算

2)、GregorianCalendar(子类)获取这个子类:Calendar c = Calendar.getInsetance();

3)、常用方法:

​ 1)、public int get(int field):获取某个字段的值;

​ 2)、public void set(int field,int value):设置某个字段的值;

​ 3)、public void add(int field,int value):给某个字段增加指定的值;

代码:

public static void main(String[] args) {
        //获取GregorianCalendar子类对象
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);

        //获取各个字段的值
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH)+1;//系统是从零开始记起的
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int hour = calendar.get(Calendar.HOUR);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
        int week = calendar.get(Calendar.DAY_OF_WEEK);//系统是从星期日开始记为0,星期一为1...

        System.out.println(year + "年" + month + "月" + day + "日 " + hour + ":" + minute + ":" + second + " " + getWeek(week));

        //设置某个字段的值
        calendar.set(Calendar.YEAR,1995);
        calendar.set(Calendar.MONTH,1-1);//月份在系统中是从零开始计算所以是要设置的月份-1
        calendar.set(Calendar.DAY_OF_MONTH,27);
        week = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println("修改后的日期是:"+getWeek(week));

        //将某个字段增加指定值(可以泳衣计算多久之后是什么日期什么时间)
        Calendar c = Calendar.getInstance();//不能再使用calendar,因为他已经被set改变
        c.add(Calendar.YEAR,1);
        int a = c.get(Calendar.YEAR);
        System.out.println("现在过去一年是:"+a+"年");
    }
//使用查表法来获取星期几
    public static String getWeek(int week){
        String[] strings = {"","星期日","星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        return strings[week];
    }

9、System类-作用及常用方法

1)、java.lang.System(太监类):包含了一些实用的静态方法

2)、常用方法:

​ 1)、public static void arraycopy(Object src, //原数组

​ int srcPos, //原数组的起始位置

​ Object dest, //目标数组

​ int destPos, //目标数组的索引位置

​ int length) //复制的数量

​ 2)、public static long currentTimeMillis():获取当前系统时间的毫秒值;常用来计算代码的执行时间。

​ 相当于:Date date = new Date();

​ long m = date.getTime();

​ 3)、public static void exit(int status):结束jvm虚拟机的运行,结束程序

代码:

public static void main(String[] args) {

        //复制数组
        int[] arr = {1,24,6,765,5,3,7,3};
        int[] arr1 = new int[arr.length];
        System.arraycopy(arr,2,arr1,0,2);
        System.out.println(Arrays.toString(arr1));
        //获取系统时间
        //用来查看执行时间
        long start = System.currentTimeMillis();
        int[] arr2 = new int[500000000];
        for (int i = 0; i < arr2.length; i++) {
            arr2[i]=i;
        }
        long end = System.currentTimeMillis();
        System.out.println("执行时间为:"+(end-start)+"毫秒");
    }

10、StringBuilder类-概述及常用方法

因为String的不可变性,在做字符串连接时,效率低下,且消耗内存,所以提供了StringBuilder类来专门做字符串连接

1)、java.lang.StringBuilder:专门做字符串连接

2)、构造方法:

​ 1)、StringBuilder():构造一个有16的倍数个空位置的数组

3)、常用方法

​ 1)、public StringBuilder append(各种类型):向StringBuilder中添加数据

​ 2)、public StringBuilder reverse():将StringBuilder中的数据进行反转

public static void main(String[] args) {
        String s1 = "hello";
        String s2 = s1 + "world";
        System.out.println(s2);//共创建了三个对象,分别有三个地址,占用更多的内存

        //使用StringBuilder对字符串进行拼接
        StringBuilder bld = new StringBuilder();
        //bld在使用append()方法后返回的是一个StringBuilder对象,所以可以连着用
        bld.append("hello").append("world").append(12445).append(3.456);
        System.out.println(bld.toString());

        //反转
        System.out.println("反转后:");
        bld.reverse();
        System.out.println(bld.toString());
    }
  • [ ] 注意使用前一定要创建StringBuilder对象

11、String类和StringBuilder类的区别

1)、String是java中的字符串,可以不用new就直接进行赋值,但在拼接时会耗费内存

String因为其底层是数组,是不可变的,当拼接时就会产生新的地址和空间

2)、是对一个字符串进行拼接操作的”工具类”,必须new出对象

StringBuilder是可变的,占用内存时只会使用同一个地址同一个地址

12、包装类-概念

1)、基本类型 包装类

​ byte Byte

​ short Short

​ int Integer

​ long Long

​ float Float

​ double Double

​ char Character

​ boolean Boolean

2)、每个包装类中都有对此类型数据进行操作的方法:

​ 将某种类型转换为字符串:

int a = 24;
String str = Interger.toString(a);

​ 将字符串转换为某种类型:

String a = "24";
int age = Interger.parseInt(a);

任何包装类(除Character)都有对应的parsexxx(String str)对应,将字符串转为自己的那种类型

byte            Byte        parseByte(String s)
short           Short       parseShort(String s)
int             Integer     parseInt(String s)
long            Long        parseLong(String s)
float           Float       parseFloat(String s)
double          Double      parseDouble(String s)
char            Character   .......
boolean         Boolean     parseBoolean(String s)

13、包装类-装箱和拆箱

1)、装箱:将”基本类型”赋值给”包装类型”

Integer intnum = 10//直接对其赋值

2)、拆箱:将”包装类型”赋值给”基本类型”

int a = intnum;

3)、好处:可以将”包装类型”和”基本类型”同等看待,操作起来比较方便

复习

  • [ ] 能够说出Object类的特点

    Object类是所有引用类型的父类

  • [ ] 能够重写Object类的toString方法

    使用alt+ins快捷键

  • [ ] 能够重写Object类的equals方法

    使用alt+ins快捷键

  • [ ] 能够使用日期类输出当前日期

    Date对象.toString();

  • [ ] 能够使用将日期格式化为字符串的方法

    先创建SimpleDateFormat对象,并规定格式,再使用这个对象.format(Date对象)返回一个字符串

  • [ ] 能够使用将字符串转换成日期的方法

    创建一个SimpleDateFormat对象,规定格式与字符串 相同,在使用这个对象.parse(字符串)返回一个Date

  • [ ] 能够使用System类的数组复制方法

    System.arraycopy(原数组名,原数组索引值,目标数组名,目标数组索引值,复制长度);

  • [ ] 能够使用System类获取当前毫秒时刻值

    System.currentTimeMillis(),常用来处理代码执行时间

  • [ ] 能够说出使用StringBuilder类可以解决的问题

  • [ ] 能够使用StringBuilder进行字符串拼接操作

    创建StringBuilder对象,使用对象名.append(任意基本类型)

  • [ ] 能够说出8种基本类型对应的包装类名称

    Byte Short Integer Long Float Double Character Boolean

  • [ ] 能够说出自动装箱、自动拆箱的概念

    装箱:Integer i = 10;//基本类型赋值给包装类型

    拆箱:int a = i;//包装类型赋值给基本类型

  • [ ] 能够将字符串转换为对应的基本类型

    int a = Integer.parseInt(“45”);

  • [ ] 能够将基本类型转换为对应的字符串

    String str = Interger.toString(45);

猜你喜欢

转载自blog.csdn.net/qq_38353993/article/details/82389313
今日推荐