01 语言基础+高级:1-5 常用API第二部分_day01.【Object类、常用API: Date类、System类、StringBuilder类】
主要内容
-
Object类
-
Date类
-
DateFormat类
-
Calendar类
-
System类
-
StringBuilder类
-
包装类
java.lang.Object
public String toString()
:返回该对象的字符串表示。toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
03_Object类的equals方法
对象内容比较
这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数IDE都可以自动生成equals方法的代码内容。tips:Object类当中的hashCode等其他方法,今后学习。
05_Objects类的equals方法
在刚才IDEA自动重写equals代码中,使用到了java.util.Objects
类,那么这个类是什么呢?
在JDK7
-
public static boolean equals(Object a, Object b)
:判断两个对象是否相等。
06_毫秒值的概念和作用
-
public long getTime()
07_Date类的构造方法和成员方法
08_DateFormat类&SimpleDateFormat类介绍
09_DateFormat类的format方法和parse方法
-
public String format(Date date)
:将Date对象格式化为字符串。 -
public Date parse(String source)
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秒 } }
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();
}
}
-
public int get(int field)
:返回给定日历字段的值。 -
-
public abstract void add(int field, int amount)
:根据日历的规则,为给定的日历字段添加或减去指定的时间量。 -
public Date getTime()
:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
字段值 | 含义 |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周几,周日为1,可以-1使用) |
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(); } } }
14_StringBuilder的原理
15_StringBuilder的构造方法和append方法
16_StringBuilder的toString方法
第6节 基本类型包装类
17_包装类的概念
18_包装类_装箱与拆箱
19_包装类_自动装箱与自动拆箱
20_包装类_基本类型与字符串类型之间的相互转换
=======================================================================================================
end