Java基础——常用类(Date、File)以及包装类
本文要点:
- 基本数据类型的包装类
- 字符串相关类:
- 不可变字符序列:String
- 可变字符序列:StringBuffer、StringBuilder
- 时间处理相关类:
- Date
- DateFormat、SimpleDateFormat
- Calendar
- Math类
- File类
- 枚举类
一、基本数据类型的包装类(Wrapper Class)
- 为什么需要包装类?
Java并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。比如:集合的操作中,这时,我们就需要将基本类型数据转化成对象。
- 包装类均位于java.lang包,包装类和基本数据类型的对应关系如下:

- 包装类的作用:
- 提供:字符串、基本类型数据、对象之间互相转化的方式
- 包含每种基本数据类型的相关属性,如最大值、最小值等。
- 所有的包装类(Wrapper Class)都有类似的方法,掌握一个其他都类似。下面例子就是以Integer为例。
代码示例:
public class test01 {
public static void main(String[] args) {
Integer i=new Integer(1000);
System.out.println(Integer.MAX_VALUE);//最大值
System.out.println(Integer.toHexString(i));//把i变量转成十六进制的字符串
//把字符串转换成有符号十进制整数
Integer i2=Integer.parseInt("234");//方式1
System.out.println(i2);
System.out.println(i2+10);
Integer i3=new Integer("333");//方式2
System.out.println(i3);
System.out.println(i2.intValue());//如i2.intValue();intValue可以把当前对象转换成真正的数字
//整数转字符串
String str=234+"";
}
}
二、自动装箱和自动拆箱(auto-boxing & unboxing)
自动装箱
基本类型就自动地封装到与它相同类型的包装中,如:
Integer i=100;
本质上是,编译器编译时为我们添加了:
Integer i=new Integer(100);
自动拆箱
包装类对象自动转换成基本类型数据,如:
int i=new Integer(1500);
代码示例:
/**@Description: 测试自动装箱和自动拆箱
* @date 2016-2-17 下午3:50:21
*/
public class test02 { public static void main(String[] args) {
Integer i=new Integer(1000);//JDK1.5之前
//自动装箱
Integer i1=1000;//JDK1.5之后出现自动装箱:编译器帮我们改进代码Integer i=new Integer(1000);
Integer i2=2000; //自动拆箱
int i3=new Integer(1500);//自动拆箱,编译器改进:new Integer(1500).intValue();
int i4=i2;//i2.intValue(); /*假设Integer i2=null;
* int i4=i2;
* 则程序运行起来会报空指针异常NullPointException*/ Integer d=1234;
Integer d1=1234;
System.out.println(d==d1);//false:属性值相同,但是两个是不同的对象
System.out.println(d.equals(d1));//true:equals()比较的是两个的值intValue()
注意下面:

再者:
public static void main(String[] args) {
Integer a1 = Integer.valueOf(60); //danielinbiti
Integer b1 = 60;
System.out.println("1:="+(a1 == b1));
Integer a2 = 60;
Integer b2 = 60;
System.out.println("2:="+(a2 == b2));
Integer a3 = new Integer(60);
Integer b3 = 60;
System.out.println("3:="+(a3 == b3));
Integer a4 = 129;
Integer b4 = 129;
System.out.println("4:="+(a4 == b4));
}
这段代码的比较结果,如果没有执行不知道各位心中的答案都是什么。
要知道这个答案,就涉及到Java缓冲区和堆的问题。
java中Integer类型对于-128-127之间的数是缓冲区取的,所以用等号比较是一致的。但对于不在这区间的数字是在堆中new出来的。所以地址空间不一样,也就不相等。
Integer b3=60,这是一个装箱过程也就是Integer b3=Integer.valueOf(60)
所以,以后碰到Integer比较值是否相等需要用intValue()
对于Double没有缓冲区。
1:=true
2:=true
3:=false
4:=false
三、时间处理相关类

核心类: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.
/**@Description: 测试时间类的用法
* @date 2016-2-17 下午4:34:41
*/
public class Test01 { public static void main(String[] args) {
//Date的构造器
/* 调用的是Date的无参构造函数:
* public Date() {this(System.currentTimeMillis()); }
* 此处代表系统当前时间*/
Date d=new Date();
long t=System.currentTimeMillis();
System.out.println(t); Date d2=new Date(1000);
System.out.println(d2.toGMTString());//不建议使用,已经被遗弃了。 //getTime():获取毫秒数
System.out.println(d2.getTime());//getTime()返回自1970年1月1日 00:00:00 GMT开始到现在所表示的毫秒数 }
}
2. DateFormat和SimpleDateFormat
它们的工作:完成字符串和时间对象的转化!

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

主要有两个方法:
- parse() 是把字符串转换成时间
- format()是把时间对象转换成字符串

代码示例:时间与字符串相互转换
public class TestDateFormat {
public static void main(String[] args) {
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss,属于本年的第w周");
Date d=new Date(12342213234L);
String str=df.format(d);//format()是将时间对象按照格式化字符串,转换成字符串
System.out.println(str);
System.out.println("我是华丽丽的分割线~~~~");
String str2="1977-7-7 13:14:15";
// String str2="1977,7,7 13:14:15";//不匹配
DateFormat df2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//此处格式化字符串必须要和上面“1977-7-7 13:14:15”匹配
//如果不匹配,则会报错:Unparseable date: "1977,7,7 13:14:15"不可解析的时间
try {
Date d2=df2.parse(str2);//parse()是把字符串转换成时间
System.out.println(d2);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
3. Calendar日历类和GregorianCalendar公历
- 人们对于时间的认识是:某年某月某日,这样的日期概念。计算机是long类型的数字。通过Calendar在二者之间搭起桥梁!
GregorianCalendar是Calendar的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
- 注意:
- 月份:一月是0,二月是1,以此类推,12月是11
- 星期:周日是1,周一是2,以此类推,周六是7
代码示例:
/**@Description: 测试日期类
* @date 2016-2-17 下午5:25:01
*/
public class TestCalendar { public static void main(String[] args) {
Calendar c=new GregorianCalendar();//Calendar类是抽象类
// c.set(2011,3, 14, 12, 2, 34);
c.set(2011,Calendar.MARCH, 14, 12, 2, 34);
// c.set(Calendar.YEAR, 2011); // c.setTime(new Date()); Date d=c.getTime();
// c.getTimeInMillis();
System.out.println(d);
System.out.println(c.get(Calendar.YEAR)); /*c.add(Calendar.MONTH, 3);//加3个月
c.add(Calendar.MONTH, -3);//减3个月
System.out.println(c);*/ } }
【小实例】可视化日历
Java基础——常用类(Date、File)以及包装类的更多相关文章
- Java基础常用类深度解析(包含常见排序算法)
目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...
- java基础---常用类
一.字符串类String String:字符串,使用一对""引起来表示,字符串常量池在方法区中 public final class String implements java. ...
- JAVA基础--常用类 String,StringBuffer, 基础数据类型包装类, Math类, Enum类
字符串相关类: String, StringBuffer String类为不可变的字符序列 String s1="hello"; String s2="hello&quo ...
- Java基础IO类之File类
大三了,目前基础太差了,重新学习过!代码如下,里面都有详细的解释每一行代码代表的意思~ package IODemo; import java.io.File; import java.io.File ...
- Java基础——常用类之日期时间类
如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...
- Java基础—常用类之String类
一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...
- Java基础——日期类Date
一.概述 date代表一个特定的时间,精确到毫秒 二.构造方法 方法名 说明 public Date() 分配一个Date对象,并初始化,以便它代表被分配的时间,精确到毫秒 public Date(l ...
- Java基础---String类和基本数据类型包装类
第一讲 String类 一.概述 String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...
- java基础-Integer类常用方法介绍
java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
随机推荐
- [转]通过继承ConfigurationSection,在web.config中增加自定义配置
本文转自:http://www.blue1000.com/bkhtml/2008-02/55810.htm 前几天写了一篇使用IConfigurationSectionHandler在web.conf ...
- OS | 读写锁【摘】
读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读. 互斥锁与读写锁的区别: 当访问临界区资源时(访问的含义包括所有的操作:读和写 ...
- [排错] PATH_MISSING
症状: 更换了磁带机部件,导致Robots选项卡中的TLD(2) Robotic Path显示为PATH_MISSING. 解决方法: 概括起来就是: 删除TLD(2),重新创建Robot记录,然后重 ...
- 《GK101任意波发生器》升级固件发布(版本:1.0.2build306)
一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build306 编译日期:2014-09-24 ====================================== 二. ...
- gitlab & gerrit & git & repo & jenkins
Omnibus GitLab documentation(中文安装说明) 在自己的服务器上部署 GitLab 社区版->较为全面 GIT & REPO & GERRIT (三) ...
- nVIDIA SDK White Paper ----Vertex Texture Fetch Water
http://blog.csdn.net/soilwork/article/details/713842 nVIDIA SDK White Paper ----Vertex Texture Fetch ...
- 推荐给开发者的20个优秀PHP框架
推荐给开发者的20个优秀PHP框架 来源:developerslane 时间:2015-01-13 19:48:06 阅读数:111916 分享到:14 [导读] PHP是非常受欢迎并且很有影 ...
- coursera-miniproject Pang任务总结
Mini_project开发过程 1.通过添加代码画出一个在乒乓球台移动的球.我们提醒你给乒乓台添加位置信息给draw handler像在”Motion"那节课第二部分介绍的那样 2.添加代 ...
- 8添加一些样式:开始学习CSS
CSS中简单的表达式,成为规则.一个典型的规则包括一个选择符.若干属性和属性值. 1.在XHTML中直接添加CSS样式,必须在<head>元素里添加样式开始和结束标记.(但这未必是最好的方 ...
- Bluetooth数据包捕获
目录 1. 前提 2. 开启功能 3. 抓包 这里介绍一种在Android上捕获蓝牙数据包的方法 1. 前提 首先你要有一部Android手机 然后你的Android系统版本要在4.4及以上 我没有做 ...