异常概念
异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
在Java程序中如果遇到了异常的话咱们想办法解决这些一样。
Java编程语言使用异常处理机制为程序提供了异常处理的能力
常见的异常
ArrayIndexOutOfBoundException--->数组越界
ClassCastException--->类型转换异常
NullPointerException------>访问null的对象方法、空指针
IllegalArgumentException-------->接收非法参数
ArithmeticException--------->算术运算异常
ClassNotFoundException----------->不能加载所需要的类
InputMisMacthException---------> 接收的数据类型与实际输入的类型不匹配
NumberFormatException-------->格式化数据异常
IOException------------>文件读写异常
异常的处理
在Java中异常的处理也是非常常见的,一般的情况下咱们使用一下集中处理方式:
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
能够处理异常的方式有上面的三种方式:
- 使用try...catch...finally
在实际的开发中使用这种方式是最多的,所谓的处理异常其实就是为了保证代码能够继续执行下去。
public static void main(String[] args) { System.out.println("异常出现之前"); //出现异常 try { //这里是可能出现异常的代码 int a=1/0; } catch (Exception e) {//捕获异常 System.out.println("上面出现的异常为:"+e); }finally{//永远执行 System.out.println("我无论上面情况下都执行"); } System.out.println("异常出现之后"); } |
异常出现之前 上面出现的异常为:java.lang.ArithmeticException: / by zero 我无论上面情况下都执行 异常出现之后 |
2.使用throw是将异常进行抛出
throw用来抛出异常,根本没有处理异常。一般使用在方法中
案例:
public static void main(String[] args) { try { show(); } catch (Exception e) { System.out.println(e); } } public static void show(){ System.out.println("异常出现之前"); System.out.println("异常出现之后"); //抛出异常给方法的调用出 throw new ArrayIndexOutOfBoundsException("这是一个数组越界的异常,注意索引..."); } |
异常出现之前 异常出现之后 java.lang.ArrayIndexOutOfBoundsException: 这是一个数组越界的异常,注意索引... |
throw关键字主要是在方法中抛出异常。
3.throws关键字处理异常
throw关键字处理异常是在方法内容抛出,throws实在方法上抛出异常。
案例:
public static void main(String[] args) throws ArithmeticException{ System.out.println("异常出现之前"); System.out.println("异常出现之后"); } |
public String readLine() throws IOException |
上面的方法上使用throws关键字抛出异常了,就说明此方法可能出现异常,但是在此方法中没有进行异常处理,而是将可能出现的异常交给了方法的调用出。但是现在是在main()方法上抛出了异常,main()方法是JavaSE中程序中代码执行入口,这样的话main()其实在Java中是JVM(虚拟机)调用的,所以此方法抛出了异常就交给了JVM进行处理了。
访问权限
包的意义
1、定义类时需要指定类的名称。但如果仅仅将类名作为类的唯一标示,则不可避免的出现命名冲突的问题。这会给组件复用以及团队间的合作造成很大麻烦!
2、在Java语言中,用包(package)的概念来解决命名冲突的问题。
3、在定义一个类时,除了定义类的名称以外,一般还要指定一个包名
4、package语句必须写在Java源文件的最开始,在类定义之前。
5、类一旦一定在了包中,那么类的全称应该是“包名.类名”。
import语句
import语句主要是用来导包的。
1、添加了包名的类在使用时就需要使用类的全称,如
public static void main(String[] args) { //不适用import导入,直接使用完整类名称 com.sram.entity.Student student=new com.sram.entity.Student(); student.show(); } |
2、但这样的书写方式过于繁琐,java可以通过使用import语句对类的全称进行声明,如
package com.sram.test; import com.sram.entity.Student; public class MyTest { public static void main(String[] args) { //使用import导入 Student student=new Student(); student.show(); } } |
3、通过import语句声明了类的全称之后,该源文件中就可以直接使用类名来进行访问了。
//使用import导入 Student student=new Student(); student.show(); |
4、有时,import语句中也可以使用“*”符号,如
package com.sram.test; import com.sram.entity.*; public class MyTest { public static void main(String[] args) { //使用import导入 Student student=new Student(); student.show(); Person person=new Person(); } } |
这就意味着声明了该包中所有类的全称,该文件中就可以直接使用com.mutouren.demos包中的所有类的类名来进行访问。
包(package)
1、package语句可以划分不同的包,也就是可以使文件在不同目录下
2、import语句可以导入带包名的类,以便在使用时省略包名
3、但并不是所有带包名的类在使用时都需要导入包名,如:
1、同一个包中的类不需要导包
2、系统包java.lang中的类也不需要导包
案例:
package com.sram.test; public class MyTest { public static void main(String[] args) { String str="hello"; } } |
在主方法中一直使用String类,但是咱们从来没有使用import导入过String类的对应的包,这是因为String是java.lang包下面的类,所以不需要导包操作。
修饰符的权限
属性 | 允许的访问 |
public | 允许来自任何类中的方法访问 |
protected | 允许本包中的类和(即便不在同一包下的)所有子类的方法访问(子类对象可以使用) |
无修饰限制 | 允许同一包下任何类中的方法访问 |
private | 只允许本类内部的方法访问,其他任何访问都被拒绝 |
上面就是java中的权限修饰符,在使用的时候根据自己的设计需求去指定具体的修饰符即可。