黑马程序员技术交流社区

标题: 对象包装器、异常 [打印本页]

作者: lilongbin2016    时间: 2016-12-11 12:32
标题: 对象包装器、异常
一、基本数据类型的对象包装器:

基本数据类型                 引用数据类型
int                                  Interger
double                          Double
byte                               Byte
char                               Character
short                              Short
long                               Long
float                               Float
boolean                         Boolean

1、最大特点就是:引用于字符串和基本数据类型之间的转换

2、基本数据类型=====》字符串    1.基本数据类型+"" ;
                                                          2.基本数据类型包装类.toString(基本数据类型);
                                                           eg:String num=Integer.toString(6);
                                                                   System.out.println(num+1);
                                                                   结果为:61
3、字符串=====》基本数据类型    1.基本数据类型包装器.parse(Int/Boolean/Double/Float/Byte/Long)(相应的字符串)
比如: String str="26";
            int age=Integer.parseInt(str);
            System.out.println("年龄是:"+(age+1));
            结果为:年龄是:27
                                                          2.基本数据类型包装器.valueOf(Int/Boolean/Double/Float/Byte/Long)(相应的字符串)
比如:String str3="678";
            int i=Integer.valueOf(str3);
            System.out.println("i="+i);
            结果为:i=678

基本数据类型包装类的自动拆箱和自动装箱JDK 5.0之后出现的新特性

4、自动装箱:先将int类型装换成Integer类型,这个过程叫自动装箱。
eg1:int x=123;
          Integer in=new Integer(123);
          System.out.println(x==in);
          //结果:true   两个值相等
eg2:Integer in2=6;
5、自动拆箱:先将Integer类型装换成int类型,再与int类型的值参与运算,这个过程叫自动拆箱的过程。
eg:in2+=3;             //in2.valueOf()+=3;//自动拆箱过程

6、进制转换:
    //十进制转换成二进制
    String s=Integer.toBinaryString(10);//1010
    System.out.println(s);     
    //十进制转换成十六进制
    System.out.println(Integer.toHexString(60));     
    //十进制转换成八进制
    System.out.println(Integer.toOctalString(123));

    //十六进制转换为十进制
    System.out.println(Integer.valueOf("3c", 16));
    //二进制转换为十进制
    System.out.println(Integer.valueOf("10", 2));
    //八进制转换为十进制
    System.out.println(Integer.valueOf("173", 8));

7、 补充比较: public Integer a;
                         public int b;
                         输出:a为null
                                    b=0
8、==与equals的区别:
                                      a.==用于比较两个数值,equals用来比较两个字符串;
                                      b.==还可以用来比较两个对象是否相等(其实==是比较两个对象在堆内                      存中的地址值是否相等),equals还可以用来比较两个对象是否相等(其实equals是比较两个对象   的值的);
eg:Integer i10=8;
         Integer i11=8;
         Integer i12=new Integer(8);
         Integer i13=new Integer(8);
         System.out.println("i10==i11的结果是:"+(i10==i11));//true
         System.out.println("i12==i13的结果是:"+(i12==i13));//false
         System.out.println("i10.equals(i11)的结果是:"+i10.equals(i11));//true
         System.out.println("i12.equals(i13)的结果是:"+i12.equals(i13));//true

注意:byte的范围是:-128~127,==比较两个对象的地址值,如果这个数在byte范围之间为true,否则为false。(原因是:复用了内存池里面的值,内存池里面存放的是byte范围之内的值)
        eg: Integer i14=179;//自动装箱      
                 Integer i15=179;//自动装箱     
                 System.out.println("i10==i11的结果是:"+(i14==i15));//不是自动拆箱 //false
                 如果值的范围在byte范围之外,那么这两句就相当于:
                 Integer i14=new Integer(179);
                 Integer i15=new Integer(179);

二、Java中的异常

为什么出现异常?因为Java是面向对象的,Java对各种各样的异常进行了封装。

异常的概念:程序出现了问题

异常的父类 Throwable,对Error和Exception类共性的

分类:
一种是不能解决的error

public class Demo01 {

public static void main(String[] args) {
  //一个程序分配的内存是170MB内存,超出无法解决
  byte[] b=new byte [1024*1024*171];//170mb
  System.out.println("over");
}
}

一种可以被解决的exception

public class Demo01 {

public static void main(String[] args) {
  String str="abc";
  int x=Integer.parseInt(str);
  System.out.println("x="+x);
}
}
结果为:


//Number Format Execption 数字格式异常
角标越界

解决Exception的第一种方式
try{
有问题的代码
}catch(Exception 变量名){
解决的方式
}finally{//finally代码块可以不写
一定会执行的代码
}

public class ExceptionDemo {
   
public double div(int x,int y){
  return x/y;
}

public static void main(String[] args) {
  ExceptionDemo ed=new ExceptionDemo();
  try{
   ed.div(6, 0);
   }catch(Exception e){
    //System.out.println("除数不能为0");
//         System.out.println(e.getMessage());//打印异常的原因
//         System.out.println(e.toString());//打印出异常的标题和原因
    e.printStackTrace();//打印的全部的异常信息
   }finally{
    //finally代码块里面的东西一定会被执行(不管程序有没有问题)
    //System.out.println("over");
   }
     }
}
解决Exception的第二种方式:Throw和Throws:
Throws是声明一个异常,必须在方法后面声明(可以声明多个异常,多个异常之间用","隔开),声明完之后必须被调用者try{}catch(){}捕获异常,如果多个异常都是属于Exception异常,那么可以直接声明一个大的异常即:Exception异常,调用try{}catch(){}的时候也必须处理Exception异常
Throw抛出一个异常,把异常抛给调用者了,调用者必须去处理,try{}catch(){}
eg:public class ExceptionDemo01 {
        public void div(int a,int b){
          try {
           int x=a/b;
           System.out.println("x="+x);
          } catch (Exception e) {
           throw new ArithmeticException("算术异常...被零除了");
          }
         }
           public static void main(String[] args) {
             ExceptionDemo01 ed=new ExceptionDemo01();
               ed.div(6, 0);
         }
         }
结果为:
Throw和Throws的区别:
1、  .Throw抛出一个异常
        .Throws声明一个异常或者多个异常
2、   .Throws用在方法后面(方法的小括号后面,大括号前面)
         .Throw用在方法体里面





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2