3.3 Java 中必须了解的常用类(常用工具类)

1、Java 中的包装类

相信各位小伙伴们对基本数据类型都非常熟悉,例如 int、float、double、boolean、char 等。基本数据类型是不具备对象的特性的,比如基本类型不能调用方法、功能简单。。。,为了让基本数据类型也具备对象的特性, Java 为每个基本数据类型都提供了一个包装类,这样我们就可以像操作对象那样来操作基本数据类型。

基本类型和包装类之间的对应关系:

基本类型 对应的包装类
byte Byte
short Short
int Interger
long Long
float Float
double Double
char Character
boolean Boolean

包装类主要提供了两大类方法:

  1. 将本类型和其他基本类型进行转换的方法

  2. 将字符串和本类型及包装类互相转换的方法

我们将在后面的小节逐步讲解,表着急哦~~

public class HelloWorld {
    public static void main(String[] args) {
        
        // 定义int类型变量,值为86
        int score1 = 86; 
        
        // 创建Integer包装类对象,表示变量score1的值
        Integer score2=new Integer(score1);
        
        // 将Integer包装类转换为double类型
        double score3=score2.doubleValue();
        
        // 将Integer包装类转换为float类型
        float score4=score2.floatValue();
        
        // 将Integer包装类转换为int类型
        int score5 =score2.intValue();

        System.out.println("Integer包装类:" + score2);
        System.out.println("double类型:" + score3);
        System.out.println("float类型:" + score4);
        System.out.println("int类型:" + score5);
    }
}

2、Java 中基本类型和包装类之间的转换

基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦):

Integer a=new Tnterger(3);//定义Interger包装类对象,值为3
int b=a+5;//将对象和基本类型进行运算

在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。
那什么是装箱和拆箱呢?我们分别来看下
装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱

int i=10;//定义一个int基本类型值
Integer x=new Integer(i);//手动装箱
Integer y =i;//自动装箱

拆箱:和装箱相反,把包装类对象转换成基本类型的值,又可分为手动拆箱和自动拆箱

Integer j=new Integer(8);//定义一个Integer包装类对象,值为8
int m=j.intValue();//手动拆箱为int类型
int n=j;//自动拆箱为int类型
public class HelloWorld {
    public static void main(String[] args) {
        
        // 定义double类型变在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了。

那什么是装箱和拆箱呢?我们分别来看下

装箱:把基本类型转换成包装类,使其具有对象的性质,又可分为手动装箱和自动装箱量
        double a = 91.5;
        
         // 手动装箱
        Double b = new Double(a);       
        
        // 自动装箱
        Double c =a;       

        System.out.println("装箱后的结果为:" + b + "和" + c);
        
        // 定义一个Double包装类对象,值为8
        Double d = new Double(87.0);
        
        // 手动拆箱
        double e = d.doubleValue();
        
        // 自动拆箱
        double f =d ;
        
         System.out.println("拆箱后的结果为:" + e + "和" + f);
    }
}

3、Java 中基本类型和字符串之间的转换

在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换。
其中,基本类型转换为字符串有三种方法:
1、 使用包装类的 toString() 方法
2、使用String类的 valueOf() 方法
3、 用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串

 //将基本类型转换为字符串
 int c=10;
 String str1=Integer.toString(c);//方法一
 String str2=String.valueOf(c);//方法二
 String str3=c+"";//方法三

再来看,将字符串转换成基本类型有两种方法:
1、 调用包装类的 parseXxx 静态方法
2、 调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱

 //将字符串转换为基本类型
 String str="8";
 int d=Integer.parseInt(str);方法一
 int e=Integer.valueOf(str);方法二

PS:其他基本类型与字符串的相互转化这里不再一一列出,方法都类似

public class HelloWorld {
    public static void main(String[] args) {
        
        double m = 78.5;
        //将基本类型转换为字符串
        String str1 = Integer.toString(m)  ;
        
        System.out.println("m 转换为String型后与整数20的求和结果为: "+(str1+20));
        
        String str = "180.20";
        // 将字符串转换为基本类型
        Double a = Integet.parseInt(str) ;
    
        System.out.println("str 转换为double型后与整数20的求和结果为: "+(a+20));
    }
}

4、使用 Date 和 SimpleDateFormat 类表示时间

在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类。这个类最主要的作用就是获取当前时间,我们来看下 Date 类的使用:

 Date d=new Date();//使用默认的构造方法创建Date对象
 System.out.println(d);//输出Date对象

使用 Date 类的默认无参构造方法创建出的对象就代表当前时间,我们可以直接输出 Date 对象显示当前的时间,显示的结果如下:

Wed Jun 11 09:22:30 CST 2014

其中, Wed 代表 Wednesday (星期三), Jun 代表 June (六月), 11 代表 11 号, CST 代表 China Standard Time (中国标准时间,也就是北京时间,东八区)。

从上面的输出结果中,我们发现,默认的时间格式不是很友好,与我们日常看到的日期格式不太一样,如果想要按指定的格式进行显示,如 2014-06-11 09:22:30 ,那该怎么做呢?

此时就到了 java.text 包中的 SimpleDateFormat 类大显身手的时候了!!可以使用 SimpleDateFormat 来对日期时间进行格式化,如可以将日期转换为指定格式的文本,也可将文本转换为日期。

  1. 使用 format() 方法将日期转换为指定格式的文本

    //创建Date对象,表示当前时间
     Date d=new Date();
    //创建SimpleDateFormat对象,指定目标格式
     SipleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    //调用format()方法,格式化时间,转换为指定格式字符串
     String today=sdf.format(d);
     //输出转换后的字符串
     System.out.println(today);
    

代码中的 “yyyy-MM-dd HH:mm:ss” 为预定义字符串, yyyy 表示四位年, MM 表示两位月份, dd 表示两位日期, HH 表示小时(使用24小时制), mm 表示分钟, ss 表示秒,这样就指定了转换的目标格式,最后调用 **format() 方法将时间转换为指定的格式的字符串。
运行结果:
2014-06-11 09:55:48 **

  1. 使用 parse() 方法将文本转换为日期
    //创建日期格式的字符串
    String day="2014年02月14日10:30:25";
    //创建SimpleDateFormat df=new SimpleDateFormat("yyyy年MM月d日 HH:MM:ss");
    //调用parse()方法,将字符串转换为日期
    Date date=df.parse(day);
    //输出转换后的时间
    System.out.println("当前时间:"+date);
    代码中的 “yyyy年MM月dd日 HH:mm:ss” 指定了字符串的日期格式,调用 **parse() **方法将文本转换为日期。
    运行结果:
    当前时间:Fri Feb 14 10:30:25 CST 2014
    一定要注意哦:

1、 调用 SimpleDateFormat 对象的 parse() 方法时可能会出现转换异常,即 ParseException ,因此需要进行异常处理
2、 使用 Date 类时需要导入 java.util 包,使用 SimpleDateFormat 时需要导入 java.text 包

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloWorld {
    public static void main(String[] args) throws ParseException {
        
        // 使用format()方法将日期转换为指定格式的文本
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm");
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        // 创建Date对象,表示当前时间
        Date now=new Date();
        
        // 调用format()方法,将日期转换为字符串并输出
        System.out.println(sdf1.format(now));
        System.out.println(sdf2.format(now));
        System.out.println(sdf3.format(now));

        // 使用parse()方法将文本转换为日期
        String d = "2014-6-1 21:05:36";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
         // 调用parse()方法,将字符串转换为日期
        Date date =df.parse(day);
        
        System.out.println(date);
    }
}

5、Calendar 类的应用

Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。
java.util.Calendar 类是一个抽象类,可以通过调用 getInstance()** **静态方法获取一个 Calendar 对象,此对象已由当前日期时间初始化,即默认代表当前时间,如 Calendar c = Calendar.getInstance();
那么如何使用 Calendar 获取年、月、日、时间等信息呢?我们来看下面的代码:

Calendar c=Calendar,getInstance();//创建Calendar对象
int year=c.get(Calendar.YEAR);//获取年
int month=c.get(Calendar.MONTH)+1;//获取月份,0表示1月份
int day=c.get(Calendar.DAY_OF_MONTH);//获取日期
int hour=c.get(Calendar.HOUR_OF_DAY);//获取小时
int minute=c.get(Calendar.MINUTE);//获取分钟
int second=c.get(Calendar.SECOND);//获取秒
System.out.println("当前时间:"+year+"-"+month+"-"+day+"  "+hour+":"+minute+":"+second);

其中,调用 Calendar 类的 getInstance() 方法获取一个实例,然后通过调用 get() 方法获取日期时间信息,参数为需要获得的字段的值, Calendar.Year 等为 Calendar 类中定义的静态常量。

运行结果: 
当前时间:2014-6-11  11:13:50

Calendar 类提供了 getTime() 方法,用来获取 Date 对象,完成 Calendar 和 Date 的转换,还可通过 getTimeInMillis() 方法,获取此 Calendar 的时间值,以毫秒为单位。如下所示:

Date date=c.getTime();//将Canlendar对象转换为Date对象
Long time=c.getTimeInMillis();//获取当前毫秒数
System.out.println("当前时间:"+date);
System.out.println("当前毫秒数:"+time);
运行结果:
当前时间:Wed Jun 11 11:26:59 CST 2014
当前毫秒数:1402457219381
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class HelloWorld {
    
    public static void main(String[] args) {
        // 创建Canlendar对象
        Calendar c = Calendar.getInstance();
        
        // 将Calendar对象转换为Date对象
        Date date = c.getTime();
        
        // 创建SimpleDateFormat对象,指定目标格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        // 将日期转换为指定格式的字符串
        String now = sdf.format(date);
        System.out.println("当前时间:" + now);
    }
}

6、使用 Math 类操作数据

Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: Math.round();
常用的方法:

返回值 方法名 解释
long round() 返回四舍五入后的整数
double floor() 返回小于参数的最大整数
double ccell() 返回大于参数的最大整数
double random() 返回[0,1)之间的随机数浮点数
double a=12.81;//定义一个double类型变量
int b=(int)a;//将double类型强制转换为int类型,去掉小数位
System.out.println("强制类型转换:"+b);
long c=Math.round(a);//调用round方法,进行四舍五入
System.out.println("四舍五入:"+c);
double d=Math.floor(a);//调用floor方法,返回小于参数的最大整数
System.out.println("floor:"+d);
double e=Math.ceil(a);//调用ceil方法,返回大于参数的最小整数
System.out.println("ceil:"+e);
double x=Math.random();//调用random方法,产生[0,1)之间的随机浮点数
System.out.println("随机数:"+x);
int y=(int)(Math.random()*99);//调用random方法,产生[0,99)之间的随机z整数
System.out.println("产生[0,99)之间的随机整数:"+y);

运行结果:
强制类型转换:12
四舍五入:13
floor:12.0
ceil:13.0
随机数:0.42585849456602687
产生[0,99)之间的随机整数:30
public class HelloWorld {
    
    public static void main(String[] args) {
        
        // 定义一个整型数组,长度为10
        int[] nums =new int[10] 
        
        //通过循环给数组赋值
        for (int i = 0; i < nums.length; i++) {
            // 产生10以内的随机数
            int x = Math.random();
            
            nums[i] = x;// 为元素赋值
        }
        
        // 使用foreach循环输出数组中的元素
        for (int i = 0; i < nums.length; i++) {
            System.out.print(num + " ");
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容