黑马程序员技术交流社区
标题:
对象包装器、异常
[打印本页]
作者:
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