キーワードをスローします
throwsキーワードは主にメソッド定義で使用され、このメソッドは例外を処理しないが、処理のために着信側に渡されることを示します。
例:スローを使用する
package com.study.Demo;
class MyMath{
public static int div(int x,int y)throws Exception{ //此方法不处理异常
return x/y;
}
}
public class Test4 {
public static void main(String args[]){
try{ //div()方法抛出异常,必须明确进行异常处理
System.out.println(MyMath.div(10,5));
}catch (Exception e){
e.printStackTrace();
}
}
}
//结果
//2
ヒント:スローはmainメソッドでも使用できます。
例:メインメソッドでスローを使用する
package com.study.Demo;
class MyMath{
public static int div(int x,int y)throws Exception{ //此方法不处理异常
return x/y;
}
}
public class Test4 {
public static void main(String args[]) throws Exception{
//表示此异常产生后会直接通过主方法抛出,代码中可以不强制使用异常处理
System.out.println(MyMath.div(10,0));
}
}
//结果
//Exception in thread "main" java.lang.ArithmeticException: / by zero
// at com.study.Demo.MyMath.div(Test4.java:5)
// at com.study.Demo.Test4.main(Test4.java:10)
キーワードを投げる
throwキーワードを使用すると、インスタンス化されたオブジェクトをユーザーが手動でスローできます。
例:手動で例外をスローする
package com.study.Demo;
public class Test4 {
public static void main(String args[]){
try{
throw new Exception("自己定义的异常");
}catch (Exception e){
e.printStackTrace();
}
}
}
//结果
//java.lang.Exception: 自己定义的异常
// at com.study.Demo.Test4.main(Test4.java:11)
例外処理の標準形式
例:
package com.study.Demo;
class MyMath{
public static int div(int x,int y)throws Exception{ //出现异常要交给被调用处输出
System.out.println("计算开始");
int result=0;
try{
result=x/y;
}catch (Exception e){
throw e; //向上抛
}finally {
System.out.println("计算结束");
}
return result;
}
}
public class Test3 {
public static void main(String args[]){
try {
System.out.println(MyMath.div(10,0)); //被调用处处理异常
}catch (Exception e){
e.printStackTrace();
}
}
}
RuntimeException类
RuntimeExceptionクラスの特性:
プログラムは、コンパイル時にユーザーに例外の処理を強制しません。ユーザーは自分のニーズに応じて例外を選択的に処理できますが、処理せずに例外が発生した場合、JVMはデフォルトで例外を処理します。
例:
package com.study.Demo;
public class Test4 {
public static void main(String args[]){
int temp=Integer.parseInt("100");
System.out.println(temp);
}
}
//结果
//100
このコードは正常に実行されますが、例外が発生すると、デフォルトの処理のためにJVMに渡されます。
キーワードを主張する
assertキーワードの主な機能は、アサーションを作成することです。アサーションとは、特定の行に対するプログラムの実行を指し、結果は期待される結果でなければなりません。
例:アサーションの使用を観察する
package com.study.Demo;
public class Test5 {
public static void main(String args[]){
int num=10;
//假设中间可能经过了20行代码来操作num的内容,期望的内容应该是20
assert num==20:"num的内容不是20"; //进行断言操作
System.out.println("num="+num);
}
}
//结果
//num=10
結果は例外ではありません。これは、Javaがデフォルトでアサーションを有効にしないためです。アサーションを有効にする場合は、以下を実行する必要があります。
1.対応するコントロールパネルを開き
ます2. -eaと入力します
カスタム例外
ユーザーが開発した例外クラス。
カスタム例外クラスを実装する場合は、ExceptionまたはRuntimeException親クラスを継承するだけで済みます。
例:AddExceptionを定義する
package com.study.Demo;
class AddException extends Exception{ //此异常类要强制处理
public AddException(String msg){
super(msg); //调用父类构造
}
}
public class Test5 {
public static void main(String args[]){
int num=20;
try{
if(num>10){ //出现了错误,应该产生异常
throw new AddException("数值传递的过大");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
//结果
//com.study.Demo.AddException: 数值传递的过大
// at com.study.Demo.Test5.main(Test5.java:13)