天天看点

学习java入门详解七—异常、访问权限

异常概念

异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

在Java程序中如果遇到了异常的话咱们想办法解决这些一样。

Java编程语言使用异常处理机制为程序提供了异常处理的能力

 常见的异常

 ArrayIndexOutOfBoundException--->数组越界

ClassCastException--->类型转换异常

NullPointerException------>访问null的对象方法、空指针

IllegalArgumentException-------->接收非法参数

ArithmeticException--------->算术运算异常

ClassNotFoundException----------->不能加载所需要的类

InputMisMacthException---------> 接收的数据类型与实际输入的类型不匹配

NumberFormatException-------->格式化数据异常

IOException------------>文件读写异常

 异常的处理

在Java中异常的处理也是非常常见的,一般的情况下咱们使用一下集中处理方式:

Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

能够处理异常的方式有上面的三种方式:

  1. 使用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中的权限修饰符,在使用的时候根据自己的设计需求去指定具体的修饰符即可。