Java内容梳理(13)API学习(1)时间日期类
1、Object类
(1)Object类的基本介绍
Object类是所有类的父类(包括自己定义的类),一个类若没有明确编写extends时,默认继承Object。java.lang.Object(lang包默认被导入)
(2)toString()方法
1、作用:将当前对象转化成字符串形式
2、用法:在许多情况下会默认被调用
System.out.println(obj);其实是:System.out.println(obj.toString());
String str = "hello"+obj;实是String str = "hello" + obj.toString();
3、重写toString()方法
若要显示某个类的对象所有属性,需要在类中重写toString方法
public String toString(){
return name+age;
}
(3)equals()方法
1、比较的原理:equals默认采用==比较,比较的是变量的值;基本数据类型即是数据本身;引用数据类型即是地址
2、在比较对象是否相等时,需要重写类中的equals方法;重写逻辑一般如下
若要比较当前Person对象和一个对象是否相等 ,是根据其中属性name是否相等判别,则:
public boolean equals(Object obj){
if(obj == null) return false;
if(this == obj) return true;//这种情况下,两个引用指向的是同一个对象
if( !( obj instanceof Person ) ) return false;
Person p = (Person)obj;
if( this.name.equals( p.name ) ) return true;
return false;
}
2、包装类
(1)包装类的基本介绍
每一种基本数据类型都对应一种引用类型;基本数据类型可以直接运算
(2)包装类的对应
byte(关键字) ---- Byte(类)Byte类型的对象就是一个byte型数据
short ---- Short
int ---- Integer
long ---- Long
float ---- Float
double ---- Double
boolean ---- Boolean
char ---- Character
(3)装箱和拆箱
JDK1.5及其以上版本:自动装箱和自动拆箱
自动装箱:自动将基本类型转换成它的包装类型,如 Integer n1 = 1;
自动拆箱:自动的将包装类转换成基本类型,如 int n2 = n1;
3、时间日期类
(1)java.lang.System类
获取当前时刻:获取当前系统时间距1970-1-1 0:0:0之间的毫秒数
long nowTime = System.currentTimeMillis();
long nowTime = System.nanoTime();//单位更小
作用1:获取一段代码的执行时间(开始和结束的时间差),如下:
long startTime = System.nanoTime();
System.out.println( "你好帅" );
long endTime = System.nanoTime();
System.out.println( endTime - startTime );
作用2:让某段代码执行指定的时间后结束
//让下面代码执行2s后结束
long nowTime = System.currentTimeMillis();
startTime = System.currentTimeMillis();
while( true ){
nowTime = System.currentTimeMillis();
if( nowTime - startTime > 2 * 1000 )
break;
System.out.println( "继续执行逻辑" );
}
(2)java.util.Date类
获得date对象所表示的时间距离1970-1-1 0:0:0的毫秒数
Date date = new Date();//获得当前系统时间的date对象
long time = date.getTime();
(3)java.text.SimpleDateFormat类
作用1:将Date型转化成String型并按照某种日常格式输出
Date date = new Date(); //创建当前时间对象
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );
String str = sdf.format( date );//按照给定格式转化成字符串
System.out.println( str );
作用2:将String类型转化成Date(解析格式必须和字符串的时间格式一致,否则报错)
Date date = new Date(); //创建当前时间对象
String dateStr = "2014-08-11 05:48";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
date = sdf1.parse(dateStr);
System.out.println( date );
(4)java.util.Calendar类
注意:Calendar是抽象类,不能创建对象 需要使用静态方法获取当前系统时间的日历对象:
Calendar calendar = Calendar.getInstance();
常用方法:
获取指定的时间分量: 如:calendar.get( Calendar.YEAR )获得当前系统的年份
int get( int )://该类中有get方法,返回值是int
Calendar.YEAR
Calendar.MONTH
Calendar.DATE
Calendar.HOUR
Calendar.MINUTE
Calendar.SECOND
set( int field, int value) // 设置指定的时间分量的值: 前int是分量,后int是值
add(int field, int amount) //在指定的分量上,进行加法运行, 超出分量最大值时,自动进位
int getActualMaximum(int field) //获取当前时间的指定分量上的可能的最大值
类型转换:
1.Calendar --> Date
Date date = new Date(); //创建当前时间对象
date = calendar.getTime()
2.Date --> Calendar
Date date = new Date(); //创建当前时间对象
Calendar calendar = Calendar.getInstance();//获取日历对象
calendar.setTime(date); //转化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = sdf.format( calendar.getTime() );//先转化成Date
System.out.println(str);//再转化成固定格式的字符串输出
(5)举例:万年历
package calendar;
import java.util.Calendar;
import java.util.Scanner;
public class PerCalendar {
/**设置一个日历对象,接收用户端输入的年月*/
private Calendar c = Calendar.getInstance();
/**
* 根据输入的年月显示日历
*/
public int show(int year,int month) {
c.set(year, month-1, 1);
/**
* 计算这个月有多少天
* c.DAY_OF_MONTH表示当天在当月内的表示方式,然后得到这个值的最大值,也就是当月的最大天数
*/
int DAYS_OF_MONTH = c.getActualMaximum(c.DAY_OF_MONTH);
/**
* 这个月的第一天是星期几
* c.DAY_OF_WEEK表示当天在周内的表示方式,然后得到这个值
* 注意:周1到周日返回2345671
*/
int DAY_OF_WEEK = c.get(c.DAY_OF_WEEK);
System.out.println("========="+year+"年"+month+"月"+"=========");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int i;
for(i=1;i<DAY_OF_WEEK;i++) {
System.out.print("\t");
}
i--;
for(int j=1;j<=DAYS_OF_MONTH;j++) {
System.out.print(j+"\t");
i++;
if(i%7==0) {
System.out.println();
}
}
System.out.println();
System.out.println("============================");
System.out.println("1.上一页\t2.下一页");
Scanner input = new Scanner(System.in);
return input.nextInt();
}
}
package calendar;
import java.util.Scanner;
public class Run {
/**
* 输入年月,能正确显示日历
* @param args
*/
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年份:");
int year = scan.nextInt();
System.out.println("请输入月份:");
int month = scan.nextInt();
PerCalendar c = new PerCalendar();
int res = c.show(year,month);
if(res == 1) {
c.show(year,month-1);
}else if(res == 2){
c.show(year,month+1);
}else {
System.out.println("error");
}
}
}
结果: