学习目标
- 能够说出Object类的特点:
它是一个类。所以的类都直接或间接的继承了此类。祖宗类。 - 能够重写Object类的toString方法
Alt+insert - 能够重写Object类的equals方法
Alt+insert - 能够使用日期类输出当前日期
Date date = new Date();
System.out.print(date); - 能够使用将日期格式化为字符串的方法:
- DateFormat --> SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
- 能够使用将字符串转换成日期的方法:
String format(Date);
Date parse(String); - 能够使用Calendar类的get、set、add方法计算日期
- 能够使用System类获取当前系统毫秒值
long System.currentTimeMillis();
System.arraycopy(Object src,int s,Object dest,int s,int length);
exit(0); - 退出JVM 能够使用Arrays类的sort方法
Arrays.sort(数组对象) 给数组进行升序排序 - 能够使用Arrays类的toString方法
Arrays.toString(数组对象); 把数组转换为字符串返回
一.Object类
1.Object类介绍(了解)
Object
是类层次结构的根类。每个类都使用 Object
作为超类。(所有的类都继承自此类,它是所有类的祖宗类)。
所有对象(包括数组)都实现这个类的方法。
方法 | 说明 |
String toString() | 返回该对象的字符串表示。 |
boolean equals(Object obj) | 表示其他某个对象是否与此对象“相等”。 |
2.Object类的toString方法(重点)
需求:输出Student:{name = 迪丽热巴 , age = 18}
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//Ctrl + Alt + L 格式化代码
/*public String toString() {
return "Student:{name=" + name + ",age=" + age + "}";
}*/
//Alt + insert 生成toString的快捷键
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
重点记忆
1.直接打印对象的名字,会默认调用对象的toString方法
2.Object类的toString方法,默认打印对象的地址值
3.重写toString方法快捷键 alt+insert 选择 toString方法
3.Object类中的equals方法(重点)
==和equals的用法:
基本数据类型比较: ==
(基本类型变量比较值。引用类型比地址值。)
字符串比较使用: equals ()
(比较字符串的内容。)
/*
==:
基本类型变量比较值。 int a=10,b=10; a==b true
引用类型比地址值。 "abc"=="abc"
equals:
比较字符串的内容。
注意:字符串比较要使用equals
*/
public class TestEuqals {
public static void main(String[] args) {
int a = 10,b = 10;
System.out.println(a==b);//true
String s1 = "abc";
String s2 = "abc"; // s2 = s1;
//对于字符串类型数据,有个常量池概念
System.out.println(s1==s2); //true
String s3 = new String("abc");
String s4 = new String("abc");
//因为强制创建了2个对象,所以没有常量池的使用,所以比较的是地址值,结果为false
// System.out.println(s3==s4); //false
//String类的equals方法是把2个字符串的每个字符进行比较,所以比较的是内容。
System.out.println(s3.equals(s4)); //true
System.out.println(s1.equals(s3)); //true
}
}
重写equals方法
需求:比较2个学生对象是否相等
(对比之前需要重写equals方法)
代码实现:
import java.util.Random;
public class TestEquals2 {
public static void main(String[] args) {
//创建2个学生对象
Student stu1 = new Student("古力娜扎", 18);
Student stu2 = new Student("古力娜扎", 18);
//引用类型:==比较的是地址值,所以结果为false
// System.out.println(stu1==stu2); //false
/*
public boolean equals(Object obj) {
return (this == obj);
}
this:代表本类对象的引用。
obj:代表参数对象的引用。
*/
//Random r = new Random();
//System.out.println(stu1.equals(r)); //false
//重写Object对象的equals方法后
System.out.println(stu1.equals(stu2)); //true
/* String s1 = null; // "" null
String s2 = "abc";
System.out.println(s1.equals(s2)); //会抛异常 NullPointerException空指向异常*/
}
}
重点记忆
1.没有重写Object类的equals方法,默认比较两个对象的地址值
2.会使用快捷键 alt+insert equals() and hashCode()重写equals方法,比较两个对象的属性
4.native本地方法
native修饰的方法: 表示这个方法不是java语言实现的
调用的是其他语言编写的代码或者操作系统底层的代码,看不到具体的方法
也就意味着Java可以和其它的编程语言进行交互。
Object类:
public native int hashCode();
public final native Class<?>getClass();
二.Date类
为什么要使用Date类?
String date1 = “2020-10-18”;
String date2 = “2020-10-28”;
date2 - date1 不行。
所以我们要学习Date类。
Date
类表示特定的瞬间,精确到毫秒。
它允许把日期解释为年、月、日、时、分和秒值。
年:正常年份值
月: 0 至 11 整数表示;0 是一月、1 是二月等等;因此 11 是十二月。
日:1 至 31 表示。(一月中的某天)。
时:0至23
分:0至59
秒:0至59
周:0至6 0周日
1.毫秒值的概念和作用(了解-扩展)
1秒=1000毫秒 1 天 = 24 × 60 × 60 = 86400 秒 = 86400 * 1000 = 86400000毫秒
时间原点:0毫秒的时间点
1970 年 1 月 1 日 00:00:00 英国格林威治的时间(世界标准时间)
中国:东八区标准时间+8个小时的时差
1970 年 1 月 1 日 08:00:00
把当前日期和时间转换为毫秒值:就是当前时间和时间原点的一个差值
当前时间(2020年8月10日 11:21:33)-时间原点(1970 年 1 月 1 日 00:00:00) =1597029762998
2.Date类的构造方法和成员方法(重点)
构造方法摘要 | 说明 |
Date() | 分配 |
Date(long date) | 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。 |
long getTime() | 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
代码展示:
import java.util.Date;
/*
Date类:是一个日期类
构造方法:
Date();
Date(long l);
long getTime(); 得到1970-1-1 00:00:00 到当前系统时间的时间毫秒值
*/
public class TestDate {
public static void main(String[] args) {
method2();
}
/*
long getTime(); 得到1970-1-1 00:00:00 到当前系统时间的时间毫秒值
*/
private static void method3() {
Date date = new Date();
System.out.println(date.getTime()); //1602990270976
}
/*
Date(long l); 有参构造 参数是毫秒值
CST: 中国标准时间
*/
public static void method2(){
//创建Date日期对象
Date date = new Date(1602990270976L);
System.out.println(date); //Sun Oct 18 10:59:40 CST 2020
}
/*
Date(); 无参构造
CST: 中国标准时间
*/
public static void method1(){
//创建Date日期对象
Date date = new Date();
System.out.println(date); //Sun Oct 18 10:59:40 CST 2020
}
}
三.DateFormat类
1.DateFormat类介绍(了解)
DateFormat作用:
- 格式化(也就是日期 -> 文本)
- 解析(文本-> 日期)
方法 | 说明 |
String format(Date date) | 参数传递Date日期,把日期格式化为符合模式的字符串 |
Date parse(String source) | 参数传递字符串,把符合模式的字符串解析为Date日期 |
DateFormat类本身还是一个抽象类,无法直接创建对象使用,需要使用DateFormat类的子类创建对象使用
java.text.SimpleDateFormat extends DateFormat类
SimpleDateFormat类的构造方法:
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
参数:
String pattern:传递日期和时间的模式 在模式中写y代表年
在模式中写M代表月
在模式中写d代表日
在模式中写H代表时
在模式中写m代表分
在模式中写s代表秒
“yyyy-MM-dd HH:mm:ss” “2020-08-10 11:56:03”
“yyyy年MM月dd日 HH时mm分ss秒”
“yyyy/MM/dd HH:mm:ss”
注意:
1.表示模式的字母不能随便写(y代表年,M代表月…),表示年月日时分秒的连接符号可以随意写(-,/…)
2.表示模式的字母严格区分大小写
2.SimpleDateFormat类的常用方法(重点)
代码展示:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*
DateFormat类:它是一个抽象类。不能new
String format(Date date) 将日期转成字符串格式。
Date parse(String source) 将字符串转成日期格式。
SimpleDateFormat是DateFormat的子类。
*/
public class TestDateFormat {
public static void main(String[] args) throws ParseException {
method2();
}
/*
Date parse(String source) 将字符串转成日期格式。
*/
public static void method2() throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.print("请输入日期(yyyy-MM-dd):");
String d = sc.next(); // 2020-10-18
//创建SimpleDateFormat对象,把字符串转换为日期类型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(d);
System.out.println(date); //Sun Oct 18 00:00:00 CST 2020
}
/*
SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
new SimpleDateFormat(pattern);
参数:
String pattern:传递日期和时间的模式
在模式中写y代表年
在模式中写M代表月
在模式中写d代表日
在模式中写H代表时
在模式中写m代表分
在模式中写s代表秒
*/
public static void method1(){
//创建日期对象
Date date = new Date();
System.out.println(date);
//使用SimpleDateFormat对象,把日期转换为字符串格式输出
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
String d = sdf.format(date);// 将日期转成字符串格式。
System.out.println(d); //2020年10月18日 11:20:21
}
}
四.Calendar类
1.Calendar类介绍&创建对象的方式(重点)
- 概述:
Calendar
类是一个抽象类,它为特定瞬间与一组诸如YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日历字段之间的转换提供了一些方法。 - 创建对象:
对象表示的是系统当前时间 :
Calendar c = Calendar.getInstance();
示例:
import java.util.Calendar;
public class TestCalender {
public static void main(String[] args) {
//创建日历对象
Calendar c = Calendar.getInstance();
System.out.println(c);
}
}
输出结果:
java.util.GregorianCalendar[time=1603003120822,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id=“Asia/Shanghai”,offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2020,MONTH=9,WEEK_OF_YEAR=43,WEEK_OF_MONTH=4,DAY_OF_MONTH=18,DAY_OF_YEAR=292,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=38,SECOND=40,MILLISECOND=822,ZONE_OFFSET=28800000,DST_OFFSET=0]
- 常用方法:
方法 | 说明 |
int get(int field) | 获取某个字段的值 |
void set(int field,int value) | 设置某个字段的值 |
void add(int field,int amount) | 偏移某个字段的值(在原有的基础上加减) |
2.Calendar类中的常用成员方法(重点)
/*
Calendar类中的常用成员方法(重点)
int get(int field) 获取指定日历字段的值
void set(int field, int value) 将给定的日历字段设置为给定值
void add(int field, int amount) 把指定的日历字段,增加|减少指定的值
以上这些方法的参数(int field),传递指定的日历字段,这些字段在Calendar类中被定义为了常量
年:public final static int YEAR = 1;
月:public final static int MONTH = 2;
日:public final static int DATE = 5;
日:public final static int DAY_OF_MONTH = 5;
时:public final static int HOUR = 10;
分:public final static int MINUTE = 12;
秒:public final static int SECOND = 13;
星期:public final static int DAY_OF_WEEK = 7;
*/
package com.itheima.demo6Calendar;
import java.util.Calendar;
public class TestCalender {
public static void main(String[] args) {
show4();
}
//void add(int field,int amount) 在原有的基础上加/减
private static void show4() {
Calendar c = Calendar.getInstance();
//处理年
c.add(Calendar.YEAR,-1);
//处理月份
c.add(Calendar.MONTH,2);
//处理日
c.add(Calendar.DATE,25);
//得到年
int year = c.get(Calendar.YEAR);
System.out.println(year+"年");
//得到月
int month = c.get(Calendar .MONTH);
System.out.println((month+1)+"月");
//得到日
int date = c.get(Calendar.DATE);
System.out.println(date+"日");
}
//void set(int field,int value)设置某个字段的值
private static void show3() {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR,8888);
c.set(Calendar.MONTH,11);
c.set(Calendar.DATE,35);
System.out.println(c.get(Calendar.YEAR)+"年");
System.out.println((c.get(Calendar.MONTH)+1)+"月");
System.out.println(c.get(Calendar.DATE)+"日");
}
//get方法获取日历字段的数据
/*
get方法的参数:
public final static int YEAR = 1; 年
public final static int MONTH = 2; 月
public final static int DATE = 5; 日
public final static int DAY_OF_MONTH = 5;
public final static int DAY_OF_WEEK = 7; 星期 0~6
public final static int DAY_OF_WEEK_IN_MONTH = 8; 本月的第几周
public final static int HOUR = 10;
public final static int MINUTE = 12;
public final static int SECOND = 13;
*/
private static void show2() {
//创建日历对象
Calendar c = Calendar.getInstance();
//得到年
int year = c.get(Calendar.YEAR);
System.out.println(year+"年");
//得到月
int month = c.get(Calendar .MONTH);
System.out.println((month+1)+"月");
//得到日
int date = c.get(Calendar.DATE);
System.out.println(date+"日");
//得到时分秒
//System.out.println(c.get(Calendar.HOUR)+"时"+c.get(Calendar.MINUTE)+"分"+c.get(Calendar.SECOND)+"秒");
System.out.println(c.get(Calendar.HOUR_OF_DAY)+"时"+c.get(Calendar.MINUTE)+"分"+c.get(Calendar.SECOND)+"秒");
System.out.println("星期:"+(c.get(Calendar.DAY_OF_WEEK)-1));
System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
}
//创建日历对象
public static void show1(){
//创建日历对象
Calendar c = Calendar.getInstance();
System.out.println(c);
}
}
五.Arrays类(重点)
- 概述:
- Arrays是数组的工具类,里面有一些和数组相关的方法,工具类是为了当做工具给程序员使用的,所以工具类中的方法全都是静态方法。
- 常用方法:
方法 | 说明 |
static void sort(数组) | 排序 |
static String toString(数组) | 把数组转成字符串 |
- 示例代码
import java.util.Arrays;
/*
java.util.Arrays类:操作数组的工具类
里边的方法都是静态的,通过类名.方法名可以直接使用
常用方法:
static void sort(Object[] a) 根据元素的自然顺序对指定对象数组按升序进行排序。 升序:12345 降序:54321
static String toString(Object[] a) 遍历数组,把数组中的元素,按照格式拼接为字符串返回
*/
public class TestArrays {
public static void main(String[] args) {
int[] arr = {1,3,5,4,2};
//要求输出的结果为: [1,3,5,4,2]
String s = Arrays.toString(arr);
System.out.println(s);
String[] str = {"aa","dd","ac","bb","哈","AA","12","df"}; //根据ASCII码表进行排序的。
System.out.println(Arrays.toString(str));
//sort方法
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
Arrays.sort(str);
System.out.println(Arrays.toString(str)); // ["12","AA","aa","ac","bb","dd","df"]
}
}
六.System类(重点)
- 概述:
System也是一个工具类,类中的所有方法都是静态方法,方便调用。 - 常用方法:
方法 | 说明 |
static void exit(int status) | 退出虚拟机 |
static long currentTimeMillis() | 获取当前时间毫秒值 |
static void arraycopy(五个参数) | 数组内容拷贝 |
- 示例代码:
import java.util.Arrays;
/*
System 类包含一些有用的类字段和方法。它不能被实例化。 提供了静态方法,所以我们称之为工具类。
static void exit(int status) 终止当前正在运行的 Java 虚拟机。
参数0:正常停止虚拟机
非0:异常退出。
static long currentTimeMillis() 返回以毫秒为单位的当前时间。
等价: new Date().getTime();返回1970-1-1 00:00:00到当前时间的毫秒值
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
*/
public class TestSystem {
public static void main(String[] args) {
show3();
}
//static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
//把src数组中的前3个值,复制到dest数组的前3个。
private static void show3() {
int[] src = {1,2,3,4,5,6,7}; //源数组
//int[] dest = {6,7,8,9,0}; //目标数组
int[] dest = new int[src.length];
// System.out.println("复制前:"+Arrays.toString(dest)); //[6,7,8,9,0]
// System.arraycopy(src,0,dest,0,3);
// System.out.println("复制后:"+Arrays.toString(dest)); //[1,2,3,9,0]
System.out.println("复制前:"+Arrays.toString(dest)); //[6,7,8,9,0]
System.arraycopy(src,0,dest,0,dest.length);
System.out.println("复制后:"+Arrays.toString(dest));
}
//static long currentTimeMillis() 返回以毫秒为单位的当前时间。
//统计当前方法执行的时间
private static void show2() {
long s = System.currentTimeMillis();
System.out.println("执行前:"+s);
for (int i = 0; i < 100000; i++) {
}
long e = System.currentTimeMillis();
System.out.println("执行后:"+e);
System.out.println("使用了:"+(e-s));
}
//static void exit(int status) 终止当前正在运行的 Java 虚拟机。
public static void show1(){
while (true){
System.out.println("我想找一个漂亮的女朋友");
System.exit(0);
}
//System.out.println("其实并不难~");
}
}