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

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

最新文章

  1. Linux ls
  2. 浅析c#中登录窗体和欢迎窗体关闭的问题
  3. Java程序员从笨鸟到菜鸟之(一百零二)sql注入攻击详解(三)sql注入解决办法
  4. EasyUI+MVC-搭建后台框架
  5. 【代码笔记】iOS-书架页面
  6. IM即时通讯
  7. Oracle常用命令
  8. [C++] C\C++ printf 输出格式
  9. Auty自动化测试框架第一篇——生成执行列表
  10. PHP字符串——编码与转义
  11. php 共享内存
  12. jQuery 的选择器
  13. 发布后500访问错误 —— dll引用错误
  14. 关于local storage 和 session storage以及cookie 区别简析
  15. OpenStack IdentityService Keystone V3 API Curl实战
  16. 分析java堆
  17. C++ type_traits 原理
  18. MySQL创建视图和Union all的使用案例
  19. Android Gradle基于参数化配置实现差异化构建
  20. Vue.Js初学踩坑

热门文章

  1. 3分钟教你用python制作一个简单词云
  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-tags
  3. java_05_IO
  4. POJ 3663:Costume Party
  5. hostapd 热点设置
  6. 七、SAP中输出当前日期
  7. HDU-1114 完全背包+恰好装满问题
  8. 吴裕雄--天生自然TensorFlow2教程:填充与复制
  9. java伪代码 (第一章)
  10. 使用js检测页面是在electron app中运行还是在浏览器中运行