常用API(2)-(Object类/Date类/StringBuilder/基本包装类)

Object类

  • java.lang.Object
  • Object类是每个类的父类(超类)
  • 所有对象(包括数组)都能实现这个类的方法

toString方法

  • 返回值为:该对象地址的字符串
Person p=new Person("张三");
System.out.println(p.toString());//Person@75412c2f
System.out.println(p);//直接打印对象的名字,其实就是调用对象的toString()方法
  • 直接打印对象的地址值是没有意义的,需要重写Object类中的toString方法,让该方法打印对象的属性
    快捷键:Alt+insert
  • 看一个类是否重写了toString方法,直接打印这个类的对象即可;(打印的是对象的地址值则重写了toSting方法)

Object类中的equals()方法

  • boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”
//源码
public boolean equals(Object obj) {
    return  (this == obj);
}
//参数:Object obj:可以传递任意对象
  返回值: ==比较运算符,如果是基本数据类型,比较的是值,如果是引用类型,比较的是地址值
                 这里比较的是两个对象的地址值
//测试
Person  p1 = new Person("弟弟"19);
Person  p2 =new Person("哥哥",20);
p1.equals(p2);//false,两个对象在堆内存中的地址值不一样

重写equals方法

  • 比较两个对象的地址值,没有意义,所以需要重写equals方法,比较两个对象的属性
  • 问题:隐含着一个多态,而多态的弊端是:无法使用子类特有的内容(方法和属性)
  • 解决:使用向下转型(强转)把obj类型转换成子类类型
  • 快捷键:Alt+insert
//假设子类为Person
//Person类中重写equals方法
public boolean equals(Object obj) {
    //使用向下转型,将obj转换成Person类型
    Person  p = (Person) obj;
    //比较两个对象的属性,一个对象为this(p1),一个对象为p(obj-->p2)
    boolean b = this.name.equals(p.name);
    return  b;
}

Object工具类

  • java.util.Object(注意:这不是每个类的超类,只是工具类,两个Object类在不同都路径下)
  • 该工具类中提供的是静态方法,且方法是null-save(空指针安全的)或null-tolerant(容忍空指针的)
  • java.lang.Object类中的equals方法容易抛出空指针异常,而java.util.Object类中的equals方法则优化了这个问题
  • public static boolean equals(Object a,Object b){ return (a ==b) || (a != null &&a.equals(b)); };
String s1 = null;
String s2 = "aaa";
s1.equals(s2);//空指针异常,null不能调用方法
Object.equals(s1,s2);//false,工具类中的equals方法优化了空指针问题

Date类

  • java.util.Date:表示日期和时间的类
  • 类Date表示特定的瞬间,精确到毫秒

毫秒值概念和作用

  • 1000毫秒 = 1秒
  • 特定的瞬间:2088-08-08 9:55:33:333 瞬间
  • 毫秒值的作用:可以对时间和日期进行计算
    1)如:2099-01-03 到 2099-02-09中间有多少天,可以将日期转换成毫秒进行计算,计算完毕,再将毫秒转换成日期;
    2)把日期转换成毫秒
    当前的日期:2088-01-01
    时间原点(0毫秒): 1970年1月1日 00:00:00
    计算当前时间到时间原点一共经历了多少毫秒
    3)把毫秒转换成日期:1天 = 246060 = 86400秒 = 86400*1000毫秒
  • 注意:中国属于东八区,会把时间增加8个小时
      所以时间原点为:1970年1月1日 08:00:00

Date类的构造方法和成员方法

//Date类的空参数构造方法
//Date()获取当前系统的日期和时间
Date  date = new Date();
System.out.println(date);//Thu Jun 06 16:46:36 CST 2088     (打印的不是地址值,说明Date类重写了toString方法)
//Date类的带参构造方法
//Date(long date):传递毫秒值,把毫秒值转换成Date日期
Date date1 = new Date(0L);
System.out.println(date1);//Thu Jan 01 08:00:00 CST 1970
//long getTime():把当前时间转换成毫秒值(相当于System.currentTimeMills()方法)
//Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
Date date = new Date();
long time = date.getTime();//返回毫秒值

DateFormat类

  • java.text.DateFormat(抽象类)
  • 作用:可以在Date对象和String对象之间进行来回转换
  • 格式化:日期转String
    解析:String转日期
  • 成员方法:
String format(Date date) : 按照指定的模式,把Date日期格式化为符合模式的字符串
Date parse(String source) : 把符合模式的字符串,解析为Date日期
  • DateFormat类是一个抽象类,无法直接创建对象使用,可以使用Dateformat的子类

simpleDateFormat类

  • 继承了Dateformat抽象类
  • 构造方法:
SimpleDateFormat(String pattern)  :设定日期模式
模式:区分大小写
y  年
M 月
d 日
H 时
m 分
s 秒
S 毫秒
写对应的模式,会把模式替换为对应的日期和时间 , 如:“yyyy-MM-dd  HH:mm:ss”
注意:模式中的字母不能改变,但连接模式的符号可以改变,如:“yyyy年MM月dd日  HH时mm分ss秒”

DateFormat类的format方法和parse方法

//format方法:把日期转化为文本
//步骤:1)创建simpleDateFormat对象,构造方法中传入指定模式
             2)  调用simpleDateFormat对象中的方法format
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        String d = format.format(date);
        System.out.println(d);//2019-06-06 17:18:05
//parse方法:把文本解析为日期
//步骤:1)创建simpleDateFormat对象,构造方法中传入指定模式
             2)  调用simpleDateFormat对象中的方法parse
//注意:
public Date parse(String source) throws ParseException
parse方法声明了一个异常叫ParseException,如果字符串和构造方法的模式不一样,那么程序就会抛出此异常;
调用一个抛出了异常的方法,就必须处理这个异常,要么throws继续抛出,要么try..catch处理
public static  void demo() throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = format.parse("2019-08-09 10:23:33");//要与模式一致
        System.out.println(date);
    }

Calendar类

介绍

  • java.util.Calendar类是一个抽象类,里边提供了很多操作日历字段的方法(YEAR/MONTH/DAY/HOUR)
  • Calendar类无法无法直接创建对象使用,里边有个静态方法getInstance(),该方法返回了Calendar类的子类对象
 Calendar calendar=Calendar.getInstance();//多态

常用方法

  • public int get(int field);//返回给定日历字段的值
  • public void set(int field,int value);//将给定的日历字段设置为给定值
  • public abstract void add(int field,int amount);//根据日历的规划,为给定的日历字段添加或减去指定的时间量
  • public Date getTime();返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象
    其中:int field:日历类的字段,可以使用Calendar类的静态成员变量获取
    Calendar类的静态成员变量
 /*
    public int get(int field):返回给定日历字段的值
    参数:指定的日历字段(YEAR,MONTH,,,,)
    返回值:日历字段当前具体的值
     */
    public static void demo1(){
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        System.out.println(year);//2019

        int month =calendar.get(Calendar.MONTH);
        System.out.println(month);//5(西方的月份0-11,东方1-12)
        
    }
 /*
        public void set(int field,int value):将给定的日历字段设置为给定值
        参数:
          int field:传递指定的日历字段
          int value:给指定字段设置的值
     */
    public void demo2(){
        Calendar calendar = Calendar.getInstance();
        //设置年为2020年
        calendar.set(Calendar.YEAR,2020);
        calendar.set(Calendar.MONTH,5);

        //还可以使用重载方法同时设置年月日
        calendar.set(2020,5,9);
    }
 /*
    public abstract void add(int field,int amount);//把指定的字段增加或减少指定的值
    参数:
      int field:传递指定的日历字段
      int amount:增加或减少指定的值
          正数增加,负数减少
     */
    public void demo3(){
        Calendar calendar = Calendar.getInstance();//多态
        //将年份减少2年
        calendar.add(Calendar.YEAR,-2);
        System.out.println(calendar.get(Calendar.YEAR));//2017
        //将月份增加3个月
        calendar.add(Calendar.MONTH,3);
    }
/*
    public Date getTime();//把日历对象转换成日期对象
     */
    public static void demo4(){
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        System.out.println(date);
    }

System类

  • java.lang.System类,无需导包,可直接使用
  • public static long currentTimeMillis():返回以毫秒为单位的当前时间
  • public static void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);//将数组中指定的数据拷贝到另一个数组中
    参数
 /*
     将src数组中前3个元素,复制到dest数组的前3个位置上
     复制前:src数组元素[1,2,3,4,5] dest数组元素[6,7,8,9,10]
     复制后:src数组元素[1,2,3,4,5] dest数组元素[1,2,3,9,10]
    */
    public static void demo5(){
        int[] src = {1,2,3,4,5};
        int[] dest = {6,7,8,9,10};
        System.arraycopy(src,0,dest,0,3);
        System.out.println(Arrays.toString(dest));
    }

StringBuilder类

  • 字符串缓冲区,可以看成一个长度可以变化的字符串
  • 字符串的底层是一个被final修饰的数组, StringBuilder底层也是一个数组,但是没有被final修饰,可以改变长度;
  • StringBuilder默认长度为16个字节,byte[] value=new byte[16];
  • String和StringBuilder类的区别String和StringBuilder类的区别

StringBuilder构造方法

  • StingBuilder():构造一个不带任何字符的字符串生成器,其初始容量为16个字符;
  • StingBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容;

常用方法

  • public StringBuilder append(....):添加任意类型的数据的字符串形式,并返回当前对象本身
StringBuilder bu=new StringBuilder();
//append方法返回的是this,调用方法的对象是bu,this==bu
StringBuilder bu2=bu.append("abc");//把bu的地址值赋给了bu2
System.out.println(bu);//abc
System.out.println(bu2);//abc
System.out.println(bu==bu2);//true
  • public String toString();//将当前StringBuilder对象转换为String对象;
//String和StringBuilder之间的相互转换
//使用StringBuilder的构造方法,将字符串String转化为StringBuilder
//使用StringBuilder的toString方法,将StringBuilder转换成String
String s="hello";
StringBuilder bu=new StringBuilder(s);
bu.append("world");
s=bu.toString();//"helloworld"

包装类

  • 概念:基本数据类型使用起来很方便,但没有对应的方法来操作这些基本数据类型,可以使用一个类,将基本数据类型装起来,在类中定义一些方法,这个类就是包装类,可以使用类中的方法来操作这些基本类型的数据。
    包装类

装箱与拆箱

  • 装箱:从基本类型转换为对应的包装类对象
         1)使用构造方法(已过时)
             Integer(int value) :构造一个新分配的Integer对象,它表示指定的int值;
            Integer(String s) :构造一个新分配的Integer对象,它表示String参数所指示的int值(传递的字符串必须是对应基本类型的字符串,否则报错,如“100”)
         2)使用静态方法
             static Integer valueof(int i);返回一个表示指定的int值的Integer实例
             static Integer valueof(String s);返回指定的String值的Integer对象
  • 拆箱:从包装类对象转换为对应的基本类型
         1)成员方法
             int intValue():以int类型返回该Integer的值

自动拆箱与自动装箱

  • 基本类型的数据和包装类之间可以相互转换(JDK1.5之后出现的新特性)
/*
自动装箱:直接把int类型的整数赋给包装类
*/
Integer in = 1;//相当于Integer in = new Integer(1);

/*
自动拆箱:in是包装类,无法直接参与运算,可以自动转换为基本数据类型,在进行计算
    in + 2:就相当于in.valueof() + 2 = 3//自动拆箱
    in = in +2 ;//再次自动装箱
*/
in = in + 2;
//ArrayList集合无法直接存储整数,可以存储Integer包装类
list.add(1);//自动装箱,list.add(new Integer(1));
int i = list.get(0);//自动拆箱,list.get(0).valueof();

基本类型与字符串类型之间的相互转换

  • 基本类型转字符串
    1)基本类型值+“” 最常用
    2)包装类的静态方法toString(参数),不是Object类的toString方法
    3)String类的静态方法valueof(参数)
  • 字符串转基本类型
      使用包装类的静态方法parseXXX(“字符串”);
     如 static int parseInt(String s);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值