本文要点:

  • 基本数据类型的包装类
  • 字符串相关类:
    • 不可变字符序列: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)以及包装类的更多相关文章

  1. JAVA基础--常用类 String,StringBuffer, 基础数据类型包装类, Math类, Enum类

    字符串相关类: String, StringBuffer String类为不可变的字符序列 String s1="hello"; String s2="hello&quo ...

  2. Java基础IO类之File类

    大三了,目前基础太差了,重新学习过!代码如下,里面都有详细的解释每一行代码代表的意思~ package IODemo; import java.io.File; import java.io.File ...

  3. Java基础——常用类之日期时间类

    如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...

  4. Java基础—常用类之String类

    一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...

  5. Java基础---String类和基本数据类型包装类

    第一讲     String类 一.概述         String是字符串的类类型,用于描述字符串事物.字符串是一个特殊的对象.特殊之处就在于: Stings= new String();和Str ...

  6. java基础-Integer类常用方法介绍

    java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...

  7. java基础-System类常用方法介绍

    java基础-System类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.System类概念 在API中system类介绍的比较简单,我们给出定义,system中 ...

  8. Java基础-Calendar类常用方法介绍

    Java基础-Calendar类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Calendar类概念 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 Y ...

  9. Java基础-StringBuffer类与StringBuilder类简介

    Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...

随机推荐

  1. Linux学习笔记(2)Linux学习注意事项

    1 学习Linux的注意事项 ① Linux严格区分大小写 ② Linux中所有内容均以文件形式保存,包括硬件,如硬件文件是/deb/sd[a-p] ③ Linux不靠扩展名区分文件类型,但有的文件是 ...

  2. response的Writer输出数据的问题

    package cn.itcast.response; import java.io.IOException; import java.io.OutputStream; import java.io. ...

  3. nginx:配置详细说明

    一.fastcgi param 详情: fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fast ...

  4. c#调用cmd的ping命令

    private static string CmdPing(string strIp) { Process p = new Process(); p.StartInfo.FileName = &quo ...

  5. wikioi 1202 求和(求n个数的和)

    /*============================================================= 1202 求和 题目描述 Description 求n个数的和 输入描述 ...

  6. python pil 安装

    Ubuntu下 sudo pip install pil 安装PIL可能会出现问题,例如安装完成时显示JPEG support not available 或者 ZLIB (PNG/ZIP) supp ...

  7. Java自定义缓冲区MyBufferedReader

    package IODemo; import java.io.FileReader; import java.io.IOException; import java.io.Reader; /** * ...

  8. poj 2533 Longest Ordered Subsequence(线性dp)

    题目链接:http://poj.org/problem?id=2533 思路分析:该问题为经典的最长递增子序列问题,使用动态规划就可以解决: 1)状态定义:假设序列为A[0, 1, .., n],则定 ...

  9. Android 应用内HttpClient 与 WebView 共享 Cookie

    DefaultHttpClient httpclient=....; String toUrl="https://cap.cityu.edu.hk/studentlan/details.as ...

  10. putty完全使用手册--多窗口---git提交---连接数据库--自动日志显示

    01 putty dev 192.168.3.38 02 cd /home/gongfu/tripb/cranedev02.1 git status git add git commit git pu ...