1. 投げる と 投げる はどう違いますか?
throws は、メソッドがスローする可能性のあるすべての例外情報を宣言するために使用されます。throws は、例外を宣言しますが、処理はしません。代わりに、例外をアップロードし、呼び出した人に処理させます。スローとは、スローされる特定の例外タイプを指します。
2.final、finally、finalize の違いは何ですか?
final はクラス、変数、メソッドを変更できます。変更されたクラスはクラスが継承できないことを意味し、変更されたメソッドはメソッドをオーバーライドできないことを意味し、変更された変数は変数が定数であることを意味します。再割り当てはできません。
finally は通常、try-catch コード ブロックで使用されます。例外を処理するときは、通常、実行する必要があるコード メソッドをfinally コード ブロックに置きます。つまり、コード ブロックは、コード ブロックが実行されるかどうかに関係なく実行されます。通常、リソースを閉じるためのコードを格納するために使用されます。
(ビデオ チュートリアルの推奨: java ビデオ チュートリアル)
finalize は Object クラスに属するメソッドであり、Object クラスはすべてのクラスの親クラスです。このメソッドは通常、ガベージ コレクターによって呼び出されます。システムの gc() メソッドを呼び出すと、ガベージ コレクターは、finalize() を呼び出してガベージを収集します。
3. try-catch-finally のどの部分を省略できますか?
回答: catch は省略できます
理由:
より厳密なステートメントは次のとおりです。try はランタイム例外の処理にのみ適しており、try catch はランタイム例外の処理に適しています。実行時例外 例外 通常の例外。つまり、catch を使用せずに try だけを使用して通常の例外を処理すると、コンパイルは成功しません。これは、通常の例外をキャッチすることを選択した場合は、その後の処理のために catch を使用してそれらの例外を明示的に宣言する必要があるとコンパイラが厳密に規定しているためです。コンパイル時の実行時例外に対するそのような規定はないため、catch は省略できます。catch コンパイラを追加しても問題はありません。
理論的には、コンパイラはどのコードにも不満を抱き、潜在的な問題がある可能性があると判断するため、すべてのコードに try を追加したとしても、コードは実行時にのみ正常に実行されます。スキンのレイヤーを追加します。ただし、コードに try を追加すると、このコードによってスローされる可能性のある例外を上向きにスローするのではなく、キャッチすることをコンパイラーに明示的に約束することになります。それが通常の例外の場合、コンパイラは、その後の処理のために catch でキャッチする必要があることを要求します。これがランタイム例外の場合、キャッチされてから破棄され、最終的にクリーンアップされるか、さらなる処理のために catch が追加されます。
最後に追加するのは、例外をキャッチしたかどうかに関係なく実行する必要がある「クリーンアップ」プロセスです。
(推奨される関連チュートリアル: java 入門プログラム )
4. try-catch-finally では、catch で戻りが行われた場合でも、finally は引き続き返されます。処刑された??
回答: 戻る前に実行されます。
コード例 1:
/* * java面试题--如果catch里面有return语句,finally里面的代码还会执行吗? */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; /* * return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了 * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40 * 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30 */ } finally { a = 40; } // return a; } }
実行結果: 30
コード例 2:
package com.java_02; /* * java面试题--如果catch里面有return语句,finally里面的代码还会执行吗? */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; /* * return a 在程序执行到这一步的时候,这里不是return a 而是 return 30;这个返回路径就形成了 * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40 * 再次回到以前的路径,继续走return 30,形成返回路径之后,这里的a就不是a变量了,而是常量30 */ } finally { a = 40; return a; //如果这样,就又重新形成了一条返回路径,由于只能通过1个return返回,所以这里直接返回40 } // return a; } }
実行結果: 40
# #5. 一般的な例外の種類は何ですか?
面接の質問について詳しく知りたい場合は、Java の面接の質問をご覧ください。
以上が2020 年の新しい Java 面接の質問 - 例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。