zoukankan      html  css  js  c++  java
  • 包装类和自动解封装

    包装类

    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();
         }
         
     }
  • 相关阅读:
    使用 Dockerfile 定制镜像
    UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
    UVA 11090 Going in Cycle!! 环平均权值(bellman-ford,spfa,二分)
    LeetCode Best Time to Buy and Sell Stock 买卖股票的最佳时机 (DP)
    LeetCode Number of Islands 岛的数量(DFS,BFS)
    LeetCode Triangle 三角形(最短路)
    LeetCode Swap Nodes in Pairs 交换结点对(单链表)
    LeetCode Find Minimum in Rotated Sorted Array 旋转序列找最小值(二分查找)
    HDU 5312 Sequence (规律题)
    LeetCode Letter Combinations of a Phone Number 电话号码组合
  • 原文地址:https://www.cnblogs.com/manue1/p/4495793.html
Copyright © 2011-2022 走看看