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 定义一个包
访问权限