资讯专栏INFORMATION COLUMN

JAVA学习之路 (九)包装类

MockingBird / 927人阅读

摘要:包装类基本数据类型如等。它们并不具备对象的特性,比如不能调用方法。为了让基本数据类型也能具有对象的特性,为每个基本数据类型提供了包装类。

包装类
基本数据类型:如 int、float、double、boolean、char 等。它们并不具备对象的特性,比如不能调用方法。为了让基本数据类型也能具有对象的特性,java为每个基本数据类型提供了包装类。

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

Integer

Integer 包装类的构造方法:

int a = 10;
Integer m = new Integer(22);
Integer n = new Integer("100");

Integer包装类的方法

        // 定义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);
Java 中基本类型和包装类之间的转换
基本类型和包装类之间经常需要互相转换

在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了

装箱

把【基本类型】转换成【包装类】,使其具有对象的性质,又可分为【手动装箱】和【自动装箱】。

int i = 10;
Integer x = new Integer(i); // 手动包装
Integer y = i; // 自动包装

拆箱

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

Integer j = new Integer(9);
int m = j.intValue();  // 手动拆箱
int n = j; // 自动拆箱
        // 定义double类型变量
        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);
Java 中基本类型和字符串之间的转换

基本数据 => 字符串

使用包装类的toString()方法

使用String类的valueOf()

用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串

int c = 10;
String str1 = Integer.toString(c);
String str2 = String.valueOf(c);
String str3 = c + "";

字符串 => 基本数据

调用包装类的 parseXxx 静态方法

调用包装类的 valueOf() 方法转换为基本类型的包装类,会自动拆箱

String str = "8";
int d = Integer.parseInt(str);
int e = Integer.valueOf(str);
double m = 78.5;
        //将基本类型转换为字符串
        String str1 = String.valueOf(m);                             ;
       //String str1 = String.toString(m); 
        System.out.println("m 转换为String型后与整数20的求和结果为: "+(str1+20));
        
        String str = "180.20";
        // 将字符串转换为基本类型
        Double a =  Double.valueOf(str)                      ;
        //Double a = Double.parseDouble(str);
    
        System.out.println("str 转换为double型后与整数20的求和结果为: "+(a+20));
ps: 其他基本类型与字符串的相互转化这里不再一一列出,方法都类似
Date
在程序开发中,经常需要处理日期和时间的相关数据,此时我们可以使用 java.util 包中的 Date 类。

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

按指定的格式进行显示,如 2014-06-11 09:22:30 ,那该怎么做呢

        Date d5 = new Date();
        System.out.println(d5); // Fri Aug 17 22:03:51 CST 2018
        
        SimpleDateFormat d1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String today = d1.format(d5); // 2018-08-18 07:29:38
        System.out.println(today);
        
        
        // 使用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));  //2018年08月18日 07时29分38秒
        System.out.println(sdf2.format(now));  //2018/08/18 07:29
        System.out.println(sdf3.format(now));  //2018-08-18 07:29:38

使用 parse() 方法将文本转换为日期

        // 使用parse()方法将文本转换为日期
        String d = "2018年08月10日 10:29:38";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        
         // 调用parse()方法,将字符串转换为日期
        Date date = sdf.parse(d);
        
        System.out.println(date);

完整代码

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

public class test {

    public static void main(String[] args) throws ParseException{
        // TODO Auto-generated method stub
        Date d5 = new Date();
        System.out.println(d5); // Fri Aug 17 22:03:51 CST 2018
        
        SimpleDateFormat d1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String today = d1.format(d5); // 2018-08-18 07:29:38
        System.out.println(today);
        
        
        // 使用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));  //2018年08月18日 07时29分38秒
        System.out.println(sdf2.format(now));  //2018/08/18 07:29
        System.out.println(sdf3.format(now));  //2018-08-18 07:29:38

        // 使用parse()方法将文本转换为日期
        String d = "2018年08月10日 10:29:38";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        
         // 调用parse()方法,将字符串转换为日期
        Date date = sdf.parse(d);
        
        System.out.println(date);
    }

}
Calendar类
Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处理。
package com;
import java.util.Calendar;

public class test {
    
    
    public static void main(String [] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+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+"");
    }
    
}
package com;
import java.util.Date;
import java.util.Calendar;

public class test {
    
    
    public static void main(String [] args) {
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH)+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+"");
        
        Date date = c.getTime(); // 将calendar对象转换为date对象
        System.out.println(date);
        Long time = c.getTimeInMillis(); //获得当前毫秒数
        System.out.println(time);// 1534553739595
    }
    
}
Math类

使用 Math 类操作数据

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

package com.math;

public class test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double a = 12.81;
        int b = (int)a;  // 强制类型转换
        System.out.println("强制类型转换"+b);
        long c = Math.round(a);
        System.out.println("四舍五入"+c);
        double d = Math.floor(a);
        System.out.println("向下取整floor"+d);
        double e = Math.ceil(a);
        System.out.println("向上取整ceil"+e);
        double    x = Math.random();
        System.out.println("随机数[0,1)"+x);
        int f = (int) (Math.random() * 99);
        System.out.println("随机数[0,99)"+f);
        
        
        
        // 定义一个整型数组,长度为10
        int[] nums = new int [10];
        
        //通过循环给数组赋值
        for (int i = 0; i < nums.length; i++) {
            // 产生10以内的随机数
            int n = (int) (Math.random() * 10);
            
            nums[i] = n;// 为元素赋值
        }
        
        // 使用foreach循环输出数组中的元素
        for ( int num : nums     ) {
            System.out.print(num + " ");
        }
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76780.html

相关文章

  • 开发之路(设计模式:模板方法模式)

    摘要:让一切变得更简单抽象化深入封装算法块,这便是设计模式当中的一种模式模板方法模式。定义模板方法模式在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中。 让一切变得更简单抽象化 深入封装算法块,这便是设计模式当中的一种模式:模板方法模式。 我们先来看看下面两个茶和咖啡配方showImg(https://segmentfault.com/img/bVV4kS?w=1248&h=...

    kgbook 评论0 收藏0
  • java学习(四) —— 内存分配浅析

    摘要:内存分配解析四方法执行完毕,立即释放局部变量所占用的栈空间。内存分配解析五调用对象的方法,以实例为参数。堆和栈的小结以上就是程序运行时内存分配的大致情况。 前言 java中有很多类型的变量、静态变量、全局变量及对象等,这些变量在java运行的时候到底是如何分配内存的呢?接下来有必要对此进行一些探究。 基本知识概念: (1)寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序...

    henry14 评论0 收藏0
  • 我的阿里之路+Java面经考点

    摘要:我的是忙碌的一年,从年初备战实习春招,年三十都在死磕源码,三月份经历了阿里五次面试,四月顺利收到实习。因为我心理很清楚,我的目标是阿里。所以在收到阿里之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成拿下阿里转正。 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金...

    姘搁『 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    BicycleWarrior 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<