2018.7.17 JAVA 基础 包装类 异常

1. 包装类

Java设计原则是 一切皆对象  程序中的基本数据类型也可以转换为对象

通过对基本数类型进行装箱拆箱的操作.Java已经为用户开发好了各个数据类型的包装类

byte  基本数据类型 (Byte)

short  (Short)    int  (Integer)    long (Long)      char (Character)  float (Float)    double (Double)     boolean (Boolean)

操作 int与 Integer进行装箱与拆箱的操作

public static void main(String[]args){
	
			//Int n=new Int(1);  //把一个基本数据类型 变为了引用数据类型  //装箱

			//System.out.println(n.intValue());  //把一个类变为了 基本数据类型 //拆箱

			Integer  n=new Integer(5);  //装箱

			System.out.println(n.intValue());  //拆箱
	}

在以上的程序中,不仅Integer存在装箱与拆箱的操作,别的数据类型 例如 double  boolean 都存在 xxxValue()方法

在JDK1.5之前必须按照如上的方式进行装箱与拆箱的操作,在JDK1.5之后存在自动装箱与自动拆箱的操作

 

Integer n=5;    //把一个基本数据类型 变为一个类 自动装箱

System.out.println(n); //自动拆箱 把一个类变为一个基本数据类型输出

既然如上的操作感觉上与String类很相似,那它有没有对象池的机制呢?

范例:

Integer n=5 ;

 

Integer n1=new Integer(5);

 

Integer n2=n1;

 

System.out.println(n==n1); //false

System.out.println(n1==n2); //true

System.out.println(n2==n); //false

 

在包装类中也存在了 对象池的概念

 

Integer n=5 ;

 

Integer n1=5;

 

System.out.println(n==n1); //true

以上的代码比较的结果为true 原因是两个n1 n2 指向的内存地址为一块空间 都在对象池中 所以结果true 而不是比较5的值 比较的是地址

数据转型:优点是可以编写操作方法,其中有一个方法可以把字符串变为基本数据类型来使用

Integer类  public static int parseInt(Stirng s) ; //把一个字符串变为int类型

Double类 public static double parseDouble(String s)

Boolean  public static boolean parseBoolean(String s)

其中最常用的是 Integer 和 double 两个方法

范例: 把一个字符串转换为一个int类型

 

String  str="1234567890";

int n=Integer.parseInt(str);

 

System.out.println(n);

错误的操作

 

String  str="hello world"; 

int n=Integer.parseInt(str);

System.out.println(n);

在进行数据类型转换的时候必须给定转换的内容为 (正确内容)  如果给定的内容不是 转换类型能接收的内容 则会产生 NumberFormatException异常

任何的数据类型 和String操作都会向String靠拢

想把一个基本数据类型转换String类型则有两种方式

1 拼接字符串

2 使用String中的valueOf()方法完成

int n=5;

String str=String.valueOf(n);

 

System.out.println(str);

异常的处理

1 了解异常的产生原理

2 掌握异常处理的基本格式

什么是异常?

异常导致程序中断一种指令流

范例:不产生异常的程序

public static void main(String[] args) {

System.out.println("1除法计算开始");

 

int result=10/2;

 

System.out.println("2除法计算的结果"+result);

 

System.out.println("3除法计算结束");

}

接下来编写产生异常的程序

public static void main(String[] args) {

 

System.out.println("1除法计算开始");

 

int result=10/0;  //产生异常的地方

 

System.out.println("2除法计算的结果"+result);

 

System.out.println("3除法计算结束");

}

这个时候发现如果程序出现了异常则后面的代码全部不再执行

处理异常

Try{

可能出现异常的代码

}catch(异常的类型 异常对象){

处理异常

}[finally]{

不管是否出现异常都执行

}

范例:处理异常

public static void main(String[] args) {

 

System.out.println("1除法计算开始");

int result=0;

try {

    result=10/0;  //产生异常的地方

}catch(ArithmeticException a) {

 

System.out.println(a);

}

 

System.out.println("2除法计算的结果"+result);

 

System.out.println("3除法计算结束");

}

以上为异常处理的流程

 

}catch(NumberFormatException e) {

 

System.out.println(e);

}catch (ArithmeticException e) {

 

System.out.println(e);

}catch (IndexOutOfBoundsException e) {

 

}

 

通过以上代码片段可以发实现如果程序中出现很多的异常处理操作,则程序的可读性会变得很差,如果程序中可能存在多种异常该如何处理呢?

观察异常类继承的结构

在进行异常的继承结构中可以发现存在以上的父类

Throwable

在异常的继承结构中最大的父类为Throwable 它下面存在两个子类(面试题)

Error  表示 JVM程序出错, 虚拟机的层面上出错,Error是不能被异常处理的

Exception  属于程序中的异常, 是可以被处理的

Exception继承结构中又分为两种异常 一种是运行时异常, 一种为普通的异常?

所谓运行时异常就是 RunTimeException的子类 特点:

(面试题) 写出三个常见运行时异常:

NullPointException NumberFormatException IndexOutOfBoundsException

在编译的时候不强制处理异常

普通的异常 特点:

在编译阶段必须强制处理 或者抛出该异常

Throws关键字

定义在方法上使用,表示出现了异常暂不处理交给方法调用处处理

/**

 *

 * @param y

 * @param n

 * @return 两数相除的结果

 * @throws ArithmeticException 有可能会产生算术异常

 */

public static int sum(int y,int n)throws ArithmeticException{

 

return y/n;

}

Throw 关键字

其实所有的异常都是JVM进行实例化的,手动抛出一个异常的则必须使用new关键字完成

try {

throw new Exception("瞎抛的,管不着你");  //手动抛出的异常

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

异常处理的标准格式

public static int sum(int y,int n)throws Exception{

 

System.out.println("1 计算开始");

 

int result=0;

try {

result=y/n;

 

}catch(Exception e) {

 

throw e;

}finally {

 

System.out.println("2");

System.out.println("2");

}

 

 

return y/n;

}

 

自定义异常类

虽然java中提供了大量的异常,但是可能这些异常都不满足开发者的需求,可以自己编写异常类

范例:编写一个自定义异常, 一个类继承了Exception类这个类就可以作为一个异常类

package org.wubo.test;

 

public class MyException extends Exception{ //自定义异常类

 

public MyException(String str) {

super(str);

}

}

 

了解即可

包的访问权限:

在程序中的目的就是为文件进行分离,相当于操作系统中文件夹,在程序开发中肯定代码不是由一个人完成的

定义包的关键字packeg

包的导入:

关键字 import  导入一个包  

1 可以直接导入包.类名称 导入一个类

2 包名称.*的方式导入该包所有的类

org.wubo.test2.TestDemo t=new org.wubo.test2.TestDemo();

在不同的包里面存在相同的类名称,如果想要在一个类中使用的话则需要加上包.类名称全称

四种访问权限

NO

范围

private

defualt

protected

public

1

同一个包的同一个类

2

同一包的不同类

 

3

不同包的子类

 

 

4

不同包的非子类

 

 

 

命名命名规范

一般来说就是公司域名的反写

www.oracle.com   包名称 com.oracle.项目名称

Java中常用的包 (JDK提供的)

Java.lang 程序的基本包 这个java.lang属于自动导入

Java.util 提供的工具类,常用日期 集合操作类都在这个包里面

Java.text 文本类

Java.io  Input  Output 输入与输出

Java.sql 数据库支持包

Java.net 网络编程 soket

以下两个包接触不到

Java.awt 重量级图形界面

Java.swing 轻量级图形界面

总结:

1 异常处理

Finally  throw  throws  

Throw 抛出一个异常   throws 在方法使用 ,表示声明一个异常,等待方法调用处处理

Finally 表示永远会执行的代码块

异常中的两大父类

Throwable

Error            Exception

Error 代表JVM出错,不能进行异常的处理

Exception 代表能处理的异常

Exception

运行时异常  和普通异常

运行时异常:在编译阶段不强制处理

普通异常: 在编译阶段要求用户强制处理或声明

异常处理流程

关键字  import  package  

Import 导入一个包

Package 定义一个包

访问权限

猜你喜欢

转载自blog.csdn.net/qq_38202756/article/details/81104089
今日推荐