java基础2
Java学习第12天内容:
一、Object类
二、Date类
三、SimpleDateFormat类
四、Calendar类
五、System类
六、StringBuilder类
七、包装类
一、Object类
Object类是所有类的父类,任何子类都可以使用Object类中的方法。
public String toString()
把一个对象转换为字符串(默认格式:全类名+"@"+地址值)
【建议子类重写此方法,做自己的实现,返回属性值】
快捷键:alt+inert-->toString
Object类的toString()方法打印的时对象的地址值,意义不大
所以建议子类复写此方法
public boolean equals(Object obj)
比较两个对象的地址值是否相等(底层是==进行比较)
==比较的是地址值
【建议子类重写此方法,做自己的实现,按照属性值进行比较】
快捷键:alt+inert-->equals And hashCode
Object类的equals方法默认比较两个对象的地址值,意义不大
所以要重写equals方法
二、Date类
Date用来表示日期和时间(精确到毫秒值)
构造方法:
无参构造方法:
以当前时间来创建Date对象
public Date()
如:
Date date=new Date();//创建一个Date对象,表示当前时间
有参构造方法:
以指定的毫米值来创建Date对象
public Date(long date)
如:
//创建一个Date对象,表示指定某个毫秒值的时间
Date date1=new Date(1000*60*60*24); //距离1970年1月1日0时0分0秒 ,往后的1天时间
成员方法
设置Date对象的毫秒值:
public void setTime(long time)
如:
//修改date对象的时间为 1970年1月1日1时0分0秒
date.setTime(1000L*60*60);
获取Date对象的毫秒值:
public long getTime()
如:
//获取date对象的毫秒值
long time=date.getTime();
代码示例:
//创建的当前时间的Date对象
Date date1=new Date();
System.out.println(date1);
//指定毫秒值,创建Date对象
Date date2=new Date(1000L*60*60*24*365*2);
System.out.println(date2);
System.out.println("----------------");
//获取date1对象的毫秒值
long time1 = date1.getTime();
System.out.println(time1); //1554521496490
//获取date2对象的秒值
long time2 = date2.getTime();
System.out.println(time2);//63072000000
System.out.println("-----------------");
//修改date2对象的毫秒值
date2.setTime(1000);
System.out.println(date2);
//获取date2对象修改后的毫秒值
long time3 = date2.getTime();
System.out.println(time3); //s1000
三、SimpleDateFormat类
用来对日期进行【格式化】和【解析】
格式化(format):Date对象–>String
解析(parse): String–>Date对象
常用的模式
y 年
M 月
d 月中的日
D 年中的日
H 小时(0~23)
m 分钟(0~59)
s 秒(0~59)
S 毫秒(0~999)
创建SimpleDateFormat对象的时候,需要指定模式(如:yyyy-MM-dd HH:mm:ss)
案例代码:
//1.创建SimpleDateFormat对象,需要指定模式 yyyy-MM-dd HH:mm:ss
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//2. 格式化 : Date-->String
Date date=new Date();
String str = sdf.format(date);
System.out.println(str);
//3. 解析: String-->Date
String str1="2008-08-08";
SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf1.parse(str1); //alt+enter --> add exception ...
System.out.println(date1);
练习:键盘录入一个生日(yyyy-MM-dd),计算这个人活了多少天?
/*
步骤
1)键盘录入一个生日(yyyy-MM-dd),采用Scanner键盘录入
2)把生日的字符串,通过SimpleDateFormat解析成Date对象
3)获取生日那天的毫秒值
4)获取当前当前时间的毫秒值
5)计算中的时间差,转换为为天
*/
//键盘录入一个生日(yyyy-MM-dd),采用Scanner键盘录入
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的生日(yyyy-MM-dd):");
String birthday = sc.next();
//把生日的字符串,通过SimpleDateFormat解析成Date对象
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(birthday); //alt+enter
//获取生日那天的毫秒值
long birthday_time = date.getTime();
//获取当前时间的毫米值
long current_time = System.currentTimeMillis();
//计算中的时间差,转换为为天
long time=(current_time-birthday_time)/1000/60/60/24;
System.out.println(time);
四、Calendar类
表示日历类,可以对日历的字段(年、月、日…)进行操作.
注意:Calendar是一个抽象类,不能够直接创建对象。API提供了一个方法,getInstance() 获取一个Calendar子类对象。
//获取Calendar对象
Calendar c=Calendar.getInstance();
常见的日历字段
Calendar.YEAR 年
Calendar.MONTH 月
Calendar.DAY_OF_MONTH 月中的日
Calendar.DAY_OF_YEAR 年中的日
Calendar.DAY_OF_WEEK 星期几
Calendar常用方法
public int get(int field)
获取日历字段的值
public void set(int field,int value)
设置日历字段的值
public void add(int field,int value)
计算日历字段的值
案例代码:
//获取的对象,本质上Calendar的子类对象。表示的时间为当前时间
Calendar c = Calendar.getInstance();
//设置 2008年-8月-8日(分别设置年、月、日)
//c.set(Calendar.YEAR,2008);
//c.set(Calendar.MONTH,7);
//c.set(Calendar.DAY_OF_MONTH,8);
//设置 2008年-8月-8日(一起设置年、月、日)
c.set(2008,7,8);
//把时间进行计算(正数:往后,负数:往前)
c.add(Calendar.DAY_OF_MONTH,2);
//获取年
int year=c.get(Calendar.YEAR);
//获取月
int month = c.get(Calendar.MONTH)+1; //月份是从0开始的(表示1月)
//获取月中的日
int day_of_month = c.get(Calendar.DAY_OF_MONTH);
System.out.println("月中的天:"+day_of_month);
//获取年中的天
int day_of_year = c.get(Calendar.DAY_OF_YEAR);
System.out.println("年中的天:"+day_of_year);
//获取星期几
//星期是按照下面的顺序排列
//SUNDAY(1) MONDAY(2) TUESDAY(3) WEDNESDAY(4) THURSDAY(5) FRIDAY(6) SATURDAY(7)
//星期日(1) 星期一(2) 星期二(3) 星期三(4) 星期四(5) 星期五(6) 星期六(7)
int index = c.get(Calendar.DAY_OF_WEEK);
String[] weeks={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
System.out.println(weeks[index]);
//拼接字符串
System.out.println(year+"年"+month+"月"+day_of_month+"日"+" 是一年中的"+day_of_year+"天"+",这一天是"+weeks[index]);
五、System类
public long currentTimeMillis()
获取当前系统时间的毫秒值
public void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
把源数组中的元素复制到目标数据中
参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
代码示例:
//获取当前系统的毫秒值
long time=System.currentTimeMillis();
int[] arrayA={1,2,3,4,5};
int[] arrayB=new int[5];
//把arrayA中的元素全都复制到arrayB中
System.arraycopy(arrayA,0,arrayB,0,5);
六、StringBuilder类
字符串缓冲区,其实就是一个容器(底层是数组)
所有的容器底层都是靠数组实现的
StringBudilder特有的方法append()
public void append(String str)
往缓冲区中添加任何类型的数据,都会变成字符串
注意:返回字符串缓冲区本身
public String toString()
把字符串缓冲区转换为字符串
小扩展:StringBuffer有和StringBuilder完全兼容的API
区别:
StringBuiler: 线程不安全(不同步)、效率高
StringBuffer: 线程安全(同步)、效率低
代码示例:
//创建字符串缓冲区的对象(容器)
StringBuiler sb=new StringBuiler();
//追加到缓冲区末尾
sb.append("hello");
sb.append(3.14);
sb.append(true);
sb.append(new Student()); //如Student没有复写toString。添加的就是地址
//把字符串缓冲区中的内容,单独拿出来转换为字符串
String str=sb.toString();
System.out.println(str); //hello3.14truecom.itheima01.Student@af4768c
【只有变量字符串相加才会产生新的字符串
而常量字符串相加是不会产生的字符串的,因为常量在被编译时编译器有优化】
七、包装类
每一个基本类型都有一个包装类与之对应
基本类型 包装类(引用类型)
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
自动装箱和自动拆箱
1)自动装箱: 基本类型–>包装类
Integer x=10; //自动装箱:10自动转换为Integer类型
2)自动拆箱:包装类–>基本类型
int y=x+1; //自动拆箱:x本类是Integer类型,拆箱变为int类型,再和1做加法运行
基本使用
1)获取最大值和最小值
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
2)字符串和其他类型相互转换
a: 其他类型转换为字符串
1)任何数据+""做拼接,都会变成字符串
2)String.valueOf(xxx),可以把任何数据xxx转换为String类型
b: 把字符串转换为其他类型
口诀:要转换为什么类型,就找什么类型的包装类,parseXxx方法
String s1="1000";
//把"1000"转换为int
int a = Integer.parseInt(s1);
System.out.println(a*10);
String s2="3.14";
//把"3.14"转换为3.14
double b = Double.parseDouble(s2);
System.out.println(b);
String s3="true";
//把"true"转换为true
boolean c = Boolean.parseBoolean(s3);
System.out.println(c);
代码示例:
-
字符串转其他类型
//把"12345"转化为12335 int a=Integer.parseInt("12345"); //把"12.345"转化为12.345 float类型 float b=Float.parseFloat("12.345"); //把"12.345"转化为12.345 double类型 double c=Double.parseDouble("12.345"); //把"true"转化为true boolean d=Boolean.parseBoolean("true");
-
其他类型转字符串
//把12345转换为"12345" String s1=String.valueOf(12345); //把123.345转换为"12.345" String s2=String.valueOf(12.345); //把true转换为"true" String s3=String.value(true); //Object对象转换为String。底层其实调用了对象的toString方法并返回 String s4=String.valueOf(new Object());
-
【注意】
带s的类都是工具类
父类 对象名 = new 子类();
对象名.子类方法();
编译看左边,运行看右边
即在编译时(.java文件),先看父类中有没有这个方法,如果没有idea就报错
程序执行时(.calss文件),才会去调用子类的方法
null与isEmpty的区别
isEmpty是指集合对象存在但没有存放数据
null是指对象不存在
Java学习第13天内容链接:
https://blog.csdn.net/LJN951118/article/details/89093471