java file类包_Java基础——常用类(Date、File)以及包装类

本文要点:

基本数据类型的包装类

字符串相关类:

不可变字符序列:String

可变字符序列:StringBuffer、StringBuilder

时间处理相关类:

Date

DateFormat、SimpleDateFormat

Calendar

Math类

File类

枚举类

一、基本数据类型的包装类(Wrapper Class)

为什么需要包装类?

Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中,这时,我们就需要将基本类型数据转化成对象。

包装类均位于java.lang包,包装类和基本数据类型的对应关系如下:

8a029639f443ee1329cedcacb2fee0f0.png

包装类的作用:

提供:字符串、基本类型数据、对象之间互相转化的方式

包含每种基本数据类型的相关属性,如最大值、最小值等。

所有的包装类(Wrapper Class)都有类似的方法,掌握一个其他都类似。下面例子就是以Integer为例。

代码示例:

1 public classtest01 {2

3 public static voidmain(String[] args) {4

5 Integer i=new Integer(1000);6 System.out.println(Integer.MAX_VALUE);//最大值

7 System.out.println(Integer.toHexString(i));//把i变量转成十六进制的字符串8

9 //把字符串转换成有符号十进制整数

10 Integer i2=Integer.parseInt("234");//方式1

11 System.out.println(i2);12 System.out.println(i2+10);13 Integer i3=new Integer("333");//方式2

14 System.out.println(i3);15

16 System.out.println(i2.intValue());//如i2.intValue();intValue可以把当前对象转换成真正的数字17

18 //整数转字符串

19 String str=234+"";20

21 }22

23 }

二、自动装箱和自动拆箱(auto-boxing & unboxing)

自动装箱

基本类型就自动地封装到与它相同类型的包装中,如:

Integer i=100;

本质上是,编译器编译时为我们添加了:

Integer  i=new Integer(100);

自动拆箱

包装类对象自动转换成基本类型数据,如:

int i=new Integer(1500);

代码示例:

1 /**@Description: 测试自动装箱和自动拆箱2 * @date 2016-2-17 下午3:50:213 */

4 public classtest02 {5

6 public static voidmain(String[] args) {7 Integer i=new Integer(1000);//JDK1.5之前8 //自动装箱

9 Integer i1=1000;//JDK1.5之后出现自动装箱:编译器帮我们改进代码Integer i=new Integer(1000);

10 Integer i2=2000;11

12 //自动拆箱

13 int i3=new Integer(1500);//自动拆箱,编译器改进:new Integer(1500).intValue();

14 int i4=i2;//i2.intValue();

15

16 /*假设Integer i2=null;17 * int i4=i2;18 * 则程序运行起来会报空指针异常NullPointException*/

19

20 Integer d=1234;21 Integer d1=1234;22 System.out.println(d==d1);//false:属性值相同,但是两个是不同的对象

23 System.out.println(d.equals(d1));//true:equals()比较的是两个的值intValue()

注意下面:

f1790b3db2c0fb95668622a62349f6e2.png

再者:

1 public static voidmain(String[] args) {2 Integer a1 = Integer.valueOf(60); //danielinbiti

3 Integer b1 = 60;4 System.out.println("1:="+(a1 ==b1));5

6 Integer a2 = 60;7 Integer b2 = 60;8 System.out.println("2:="+(a2 ==b2));9

10 Integer a3 = new Integer(60);11 Integer b3 = 60;12 System.out.println("3:="+(a3 ==b3));13

14 Integer a4 = 129;15 Integer b4 = 129;16 System.out.println("4:="+(a4 ==b4));17 }

这段代码的比较结果,如果没有执行不知道各位心中的答案都是什么。

要知道这个答案,就涉及到Java缓冲区和堆的问题。

java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。

Integer b3=60,这是一个装箱过程也就是Integer b3=Integer.valueOf(60)

所以,以后碰到Integer比较值是否相等需要用intValue()

对于Double没有缓冲区。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1:=true

2:=true

3:=false

4:=false

View Code

三、时间处理相关类

4149e8afbf90ac655da80bb2fca3753e.png

核心类:Java.util.Date

java.text.DateFormat:日期/时间格式化子类的抽象类

java.text.SimpleDateFormat:是一个以与语言环境相关的方式来格式化和分析日期的具体类。它允许进行格式化(日期-> 文本)、分析(文本-> 日期)和规范化。

java.util.Calendar:日历

java.util.GregorianCalendar:(阳历)是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

1. Date时间类(Java.util.Date)

在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。

Java中时间的表示,说白了也是数字,是从:标准纪元1970.1.1 0点开始的某个时刻的毫秒数,类型是long.

1 /**@Description: 测试时间类的用法2 * @date 2016-2-17 下午4:34:413 */

4 public classTest01 {5

6 public static voidmain(String[] args) {7 //Date的构造器

8 /*调用的是Date的无参构造函数:9 * public Date() {this(System.currentTimeMillis()); }10 * 此处代表系统当前时间*/

11 Date d=newDate();12 long t=System.currentTimeMillis();13 System.out.println(t);14

15 Date d2=new Date(1000);16 System.out.println(d2.toGMTString());//不建议使用,已经被遗弃了。17

18 //getTime():获取毫秒数

19 System.out.println(d2.getTime());//getTime()返回自1970年1月1日 00:00:00 GMT开始到现在所表示的毫秒数

20

21 }22 }

2. DateFormat和SimpleDateFormat

它们的工作:完成字符串和时间对象的转化!

12eba508e73695285341f72da882a963.png

是一个抽象类。只有一个子类

2afbadbc055ef78df47fe3658d5edd05.png

主要有两个方法:

parse()是把字符串转换成时间

format()是把时间对象转换成字符串

dcf6e86bdab745155ad3d3f6ba4e8d50.png

代码示例:时间与字符串相互转换

1 public classTestDateFormat {2

3 public static voidmain(String[] args) {4 DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss,属于本年的第w周");5 Date d=new Date(12342213234L);6 String str=df.format(d);//format()是将时间对象按照格式化字符串,转换成字符串

7 System.out.println(str);8

9 System.out.println("我是华丽丽的分割线~~~~");10

11 String str2="1977-7-7 13:14:15";12 //String str2="1977,7,7 13:14:15";//不匹配

13 DateFormat df2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//此处格式化字符串必须要和上面“1977-7-7 13:14:15”匹配14 //如果不匹配,则会报错:Unparseable date: "1977,7,7 13:14:15"不可解析的时间

15 try{16 Date d2=df2.parse(str2);//parse()是把字符串转换成时间

17 System.out.println(d2);18 } catch(ParseException e) {19

20 e.printStackTrace();21 }22 }23

24 }

3. Calendar日历类和GregorianCalendar公历

人们对于时间的认识是:某年某月某日,这样的日期概念。计算机是long类型的数字。通过Calendar在二者之间搭起桥梁!

GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。

注意:

月份:一月是0,二月是1,以此类推,12月是11

星期:周日是1,周一是2,以此类推,周六是7

代码示例:

1 /**@Description: 测试日期类2 * @date 2016-2-17 下午5:25:013 */

4 public classTestCalendar {5

6 public static voidmain(String[] args) {7 Calendar c=new GregorianCalendar();//Calendar类是抽象类8 //c.set(2011,3, 14, 12, 2, 34);

9 c.set(2011,Calendar.MARCH, 14, 12, 2, 34);10 //c.set(Calendar.YEAR, 2011);11

12 //c.setTime(new Date());

13

14 Date d=c.getTime();15 //c.getTimeInMillis();

16 System.out.println(d);17 System.out.println(c.get(Calendar.YEAR));18

19 /*c.add(Calendar.MONTH, 3);//加3个月20 c.add(Calendar.MONTH, -3);//减3个月21 System.out.println(c);*/

22

23 }24

25 }

【小实例】可视化日历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值