01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】

day01【Object类、常用API】

主要内容

  • Object类

  • Date类

  • DateFormat类

  • Calendar类

  • System类

  • StringBuilder类

  • 包装类


java.lang.Object类是Java语言中所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。

02_Object类的toString方法

public String toString():返回该对象的字符串表示。

toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值

由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此需要重写它。

在IntelliJ IDEA中,可以点击Code菜单中的Generate...,也可以使用快捷键alt+insert,点击toString()选项。选择需要包含的成员变量并确定。

小贴士: 在我们直接使用sout输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。

 

03_Object类的equals方法

默认地址比较

如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。

对象内容比较

如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。

04_重写Object类的equals方法

这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数IDE都可以自动生成equals方法的代码内容。tips:Object类当中的hashCode等其他方法,今后学习。

05_Objects类的equals方法

在刚才IDEA自动重写equals代码中,使用到了java.util.Objects类,那么这个类是什么呢?

JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:

  • public static boolean equals(Object a, Object b):判断两个对象是否相等。

 


 

06_毫秒值的概念和作用 

Date类中的常用的方法有:

  • public long getTime() 把日期对象转换成对应的时间毫秒值。

07_Date类的构造方法和成员方法

 

08_DateFormat类&SimpleDateFormat类介绍

09_DateFormat类的format方法和parse方法

DateFormat类的常用方法有:

  • public String format(Date date):将Date对象格式化为字符串。

  • public Date parse(String source):将字符串解析为Date对象。

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

/*
    java.text.DateFormat:是日期/时间格式化子类的抽象类
    作用:
        格式化(也就是日期 -> 文本)、解析(文本-> 日期)
    成员方法:
        String format(Date date)  按照指定的模式,把Date日期,格式化为符合模式的字符串
        Date parse(String source)  把符合模式的字符串,解析为Date日期
    DateFormat类是一个抽象类,无法直接创建对象使用,可以使用DateFormat类的子类

    java.text.SimpleDateFormat extends DateFormat

    构造方法:
        SimpleDateFormat(String pattern)
          用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
        参数:
             String pattern:传递指定的模式
        模式:区分大小写的
            y   年
            M   月
            d   日
            H   时
            m   分
            s   秒
        写对应的模式,会把模式替换为对应的日期和时间
            "yyyy-MM-dd HH:mm:ss"
        注意:
            模式中的字母不能更改,连接模式的符号可以改变
             "yyyy年MM月dd日 HH时mm分ss秒"

 */
public class Demo01DateFormat {
    public static void main(String[] args) throws ParseException {
        demo02();
    }

    /*
         使用DateFormat类中的方法parse,把文本解析为日期
         使用步骤:
            1.创建SimpleDateFormat对象,构造方法中传递指定的模式
            2.调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为Date日期
            注意:
                public Date parse(String source) throws ParseException
                parse方法声明了一个异常叫ParseException
                如果字符串和构造方法的模式不一样,那么程序就会抛出此异常
                调用一个抛出了异常的方法,就必须的处理这个异常,要么throws继续抛出这个异常,要么try catch自己处理
     */
    private static void demo02() throws ParseException {
        //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        //2.调用SimpleDateFormat对象中的方法parse,把符合构造方法中模式的字符串,解析为Date日期
        //Date parse(String source)  把符合模式的字符串,解析为Date日期
        Date date = sdf.parse("2088年08月08日 15时51分54秒");
        System.out.println(date);
    }

    /*
        使用DateFormat类中的方法format,把日期格式化为文本
        使用步骤:
            1.创建SimpleDateFormat对象,构造方法中传递指定的模式
            2.调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
     */
    private static void demo01() {
        //1.创建SimpleDateFormat对象,构造方法中传递指定的模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        //2.调用SimpleDateFormat对象中的方法format,按照构造方法中指定的模式,把Date日期格式化为符合模式的字符串(文本)
        //String format(Date date)  按照指定的模式,把Date日期,格式化为符合模式的字符串
        Date date = new Date();
        String d = sdf.format(date);
        System.out.println(date);//Sun Aug 08 15:51:54 CST 2088
        System.out.println(d);//2088年08月08日 15时51分54秒
    }
}
public class Demo01DateFormat

 

10_练习_计算出一个人已经出生了多少天

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

/*
    练习:
        请使用日期时间相关的API,计算出一个人已经出生了多少天。
    分析:
        1.使用Scanner类中的方法next,获取出生日期
        2.使用DateFormat类中的方法parse,把字符串的出生日期,解析为Date格式的出生日期
        3.把Date格式的出生日期转换为毫秒值
        4.获取当前的日期,转换为毫秒值
        5.使用当前日期的毫秒值-出生日期的毫秒值
        6.把毫秒差值转换为天(s/1000/60/60/24)
 */
public class Demo02Test {
    public static void main(String[] args) throws ParseException {
        //1.使用Scanner类中的方法next,获取出生日期
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的出生日期,格式:yyyy-MM-dd");
        String birthdayDateString = sc.next();
        //2.使用DateFormat类中的方法parse,把字符串的出生日期,解析为Date格式的出生日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthdayDate = sdf.parse(birthdayDateString);
        //3.把Date格式的出生日期转换为毫秒值
        long birthdayDateTime = birthdayDate.getTime();
        //4.获取当前的日期,转换为毫秒值
        long todayTime = new Date().getTime();
        //5.使用当前日期的毫秒值-出生日期的毫秒值
        long time = todayTime-birthdayDateTime;
        //6.把毫秒差值转换为天(s/1000/60/60/24)
        System.out.println(time/1000/60/60/24);
    }
}
View Code

 

11_Calendar类介绍_获取对象的方式

获取方式

Calendar为抽象类,Calendar类在创建对象时并非直接创建,而是通过静态方法创建。

Calendar静态方法

  • public static Calendar getInstance():使用默认时区和语言环境获得一个日历对象

例如:

import java.util.Calendar;

public class Demo06CalendarInit {
   public static void main(String[] args) {
       Calendar cal = Calendar.getInstance();
  }    
}

常用方法

根据Calendar类的API文档,常用方法有:

  • 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对象。

Calendar类中提供很多成员常量,代表给定的日历字段:

字段值含义
YEAR
MONTH 月(从0开始,可以+1使用)
DAY_OF_MONTH 月中的天(几号)
HOUR 时(12小时制)
HOUR_OF_DAY 时(24小时制)
MINUTE
SECOND
DAY_OF_WEEK 周中的天(周几,周日为1,可以-1使用)

12_Calendar类的常用成员方法

get/set方法

get方法用来获取指定字段的值,set方法用来设置指定字段的值,代码使用演示:

import java.util.Calendar;

public class CalendarUtil {
   public static void main(String[] args) {
       // 创建Calendar对象
       Calendar cal = Calendar.getInstance();
       // 设置年
       int year = cal.get(Calendar.YEAR);
       // 设置月
       int month = cal.get(Calendar.MONTH) + 1;
       // 设置日
       int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
       System.out.print(year + "年" + month + "月" + dayOfMonth + "日");
  }    
}

add方法

add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。代码如:

import java.util.Calendar;

public class Demo08CalendarMethod {
   public static void main(String[] args) {
       Calendar cal = Calendar.getInstance();
       System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2018年1月17日
       // 使用add方法
       cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
       cal.add(Calendar.YEAR, -3); // 减3年
       System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2015年1月18日;
  }
}

getTime方法

Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。

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

public class Demo09CalendarMethod {
   public static void main(String[] args) {
       Calendar cal = Calendar.getInstance();
       Date date = cal.getTime();
       System.out.println(date); // Tue Jan 16 16:03:09 CST 2018
  }
}

小贴士:西方星期的开始为周日,中国为周一。在Calendar类中,月份的表示是以0-11代表1-12月。

 


13_System类的常用方法 

实际上,currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值。

获取当前操作系统的类型,实现自动替换文件上传路径的分隔符。

/**
  *  根据不同操作系统获取文件上传路径
 * 
 */
public class PathUtil {
    //1.获取当前操作系统的分隔符
    private static String separator = System.getProperty("file.separator");   
    public static String getImgBasePath() {
        //2.获取当前操作系统的名称
        String os = System.getProperty("os.name");
        String basePath = "";
        //3.调用String类的常用成员方法判断并替换
        if(os.toLowerCase().startsWith("win")) {
            basePath = "F:/javaweb/taotao-upload";
        }else {
            basePath = "/home/ftpuser/www/o2o-upload";
        }
        basePath = basePath.replace("/", separator);
        return basePath;
    }
    
    //根据shopId分配不同的上传目录
    public static String getShopImagePath(Long shopId) {
        String imagePath = "/o2o-upload/images/item/shop/" + shopId +"/";
        return imagePath.replace("/", separator);
    }
    
    //删除文件夹目录
    public static void deleteFile(String storePath) {
        File file = new File(getImgBasePath() + storePath);
        if (file.exists()) {
                if (file.isDirectory()) {
                        File files[] = file.listFiles();
                        for (int i = 0; i < files.length; i++) {
                                files[i].delete();
                        }
                }
                file.delete();
        }
    }
    
}
String os = System.getProperty("os.name");


14_StringBuilder的原理 

15_StringBuilder的构造方法和append方法 

16_StringBuilder的toString方法

 


第6节 基本类型包装类

17_包装类的概念

18_包装类_装箱与拆箱

19_包装类_自动装箱与自动拆箱

20_包装类_基本类型与字符串类型之间的相互转换

=======================================================================================================

end

posted @ 2019-11-12 15:44  Marlon康  阅读(160)  评论(0编辑  收藏  举报