包装类和自动解封装

包装类

8个基本类型的包装类
我们知道java是面向对象的语言,其精髓之一是可以使用多态性,提高程序的灵活度。但是java中有8个基本类型:byte,short,int,long,float,double,char,boolean。它们是以值的形式存在于内存中,而不是对象。它们不是Object的子类,不能参与面向对象的开发。


包装类的作用
让基本类型参与面向对象的开发
  可以获取其基本类型的取值范围
  可以将字符串转换成基本类型数据

基本类型包装类

对于8个基本类型,java提供了他们相应的包装类:
基本类型 包装类
byte            java.lang.Byte
short           java.lang.Short
int           java.lang.Integer
long         java.lang.Long
float         java.lang.Float
double      java.lang.Double
char         java.lang.Character
boolean    java.lang.Boolean
其中除了Character与Boolean的父类是Object之外,其余的都是继承自:java.lang.Number

Number及其主要方法

除了Character与Boolean之外的其他包装类都是继承自Number的,这些包装类都有一个共性,描述的都是数字。那么我们来了解一下他们的父类:java.lang.Number
Number是一个抽象类。本身不能实例化。Number 的子类必须提供将表示的数值转换为 byte、double、float、int、long 和 short 的方法
比如:
abstract double doubleValue() 以double形式返回指定的数值
abstract int intValue() 以int形式返回指定的数值
abstract float floatValue() 以float形式返回指定的数值
剩下的抽象方法请参阅API文档:java.lang.Number

 1 /**
 2  * Number 是6个数字类型包装类的父类
 3  * intValue 反向转换  把包装好的转换为int型
 4  */
 5 
 6  class NumberDemo{
 7     public static void main(String[] args) {
 8         Number d=new Double(123.45);
 9         Number n=new Integer(345);
10         //将123.45 转换为int
11         int i = d.intValue();
12         System.out.println(i);
13         double dou =d.doubleValue();
14         System.out.println(dou);
15         
16         i=n.intValue();
17         System.out.println(i);
18         dou = n.doubleValue();
19         System.out.println(dou);
20         

Integer.parsetInt()方法

java.lang.Integer是int的包装类,其每一个实例用于描述一个基本类型int的值。
Integer有一个静态方法static int parseInt(String s)
该方法的作用是将一个描述整数的字符串解析为该整数,并用int形式返回。该方法可能会抛出
NumberFormatException异常:当给定的字符串里边含有非整数字符时。
转的字符串不能是小数

/**
  * 包装类支持将字符串转换为对应的基本类型
  * 
  */
 
 
 class    parseNumber{
     public static void main(String[] args) {
        String intStr ="123";     //z
        /*
         * 将字符串转换为int值
         * 包装类支持parsexxx方法
         */
        int num = Integer.parseInt(intStr);
        System.out.println(num+1);
    }
 }

 Double.parseDouble()方法

 自动装箱和拆箱
2.2.1. 自动装箱和拆箱的操作

如何在基本类型与包装类之间相互转换。
当我们需要将基本类型转换为包装类时,我们可以调用包装类的一个静态方法valueOf():

**
  * jdk 1.5之后推出新特性 自动拆装箱
  * @author Administrator
  *
  */
 
 class AutoboxingDemo{
     public static void main(String[] args) {
        int a=1;
        //转换为包装类推荐使用静态方法valueof()
        Integer ii =Integer.valueOf(a);
        say(a);//自动装箱
        //将包装类装换为基本类型
        ii=a;        //自动装箱
        int b =ii;  //自动拆箱
        
        Integer i =1;
        a=i;
    }
/**
 * 将输入的字符串转换为数字
 * @author Administrator
 *
 */

class ParseBumber{
     public static final String DOUBLE_REGEX="^[0-9]+\.[0-9]+$";
     public static final String INTEGER_REGEX="^[0-9]+$";
     /*
      * 1创建Scanner用于获取用户输入的内容
      * 2通过整数的正则表达式验证用户输入的字符串  匹配则转换为整数
      * 3.不匹配通过小数的正则表达式转换为小数
      * 4.再不匹配 输出  不是数字
      */
     public void checkNumber(){
         Scanner scanner =new Scanner(System.in);
         System.out.println("请输入一个数");
         
         //nextLine 用于获取用户输入的一行字符串
         //next  空格分隔下一个
         String number =scanner.nextLine();
         if(number.matches(INTEGER_REGEX)){
             int i =Integer.parseInt(number);
             System.out.println("这个整数:"+i);
         }else if(number.matches(DOUBLE_REGEX)){
             double d= Double.parseDouble(number);
             System.out.println("这个小数:"+d);
         }else{
             System.out.println("输入不是数字");
         }
     }
     
     public static void main(String[] args) {
         ParseBumber Parse = new ParseBumber();
         Parse.checkNumber();
     }
     
 }
原文地址:https://www.cnblogs.com/manue1/p/4495793.html