2つのコンストラクターがあります。1つはデフォルト値で、もう1つは「指定した図のディメンションが無効です」というメッセージを使用する明示的な値です。
2つのコンストラクターに本当に必要なのは、デフォルト(パラメーターなし)のものと、String
パラメーターを受け入れるもののようです。例えば、
public IllegalDimensionException() {
super(Eplicitm);
}
public IllegalDimensionException(String m) {
message = m;
}
デフォルトのコンストラクターでのsuper()
呼び出しは、のコンストラクターを呼び出します。コンストラクターはException
、を受け入れ、それString
を渡しますEplicitm
。
ただし、コードスニペットのロジックにいくつかの根本的な欠陥があり、その上で指摘したいと思います。
コンストラクターに追加の戻り型を指定することはできません(「コンストラクター2」でのようにpublic void IllegalDimensionException
)。これは、オブジェクトの新しいインスタンスを作成するため、IllegalDimensionException
基本的には戻り型であるためです。上記のシグニチャは、代わりに、この例外のインスタンスによって呼び出される必要があるという新しいメソッドを作成しIllegalDimensionException
ますvoid
...したがって、基本的に、過度に複雑な(そしてフォーマットが不十分な)名前を持つsetterメソッドを作成しました。
Exception
メソッドを持つことは意味がありませんmain(String[])
。Amain()
は基本的にプログラム全体のキックスタートであり、anはプログラム内Exception
で問題が発生したときに作成されるものです。より複雑なプロジェクトを作成するときは、各クラスの機能を基本的に分離し、区別し、論理的に保つ必要があります。
デフォルト値などの定数は、として宣言する必要がありますprivate static final
。コードがそのままの状態で、インスタンスを取得できるコードは、をIllegalDimensionException
呼び出すだけでデフォルトのメッセージを変更できますtheException.Eplicitm = "Yo yo yo, wassup."
。あまり役に立たないエラーメッセージ。これは、変数のデフォルトのプライバシーがであるためですpublic
。幸い、static
まだ宣言していないので、このような変更は例外の1つのインスタンスにのみ影響します...ただし、作成される可能性のあるすべての例外にわたって、これの不変バージョンが1つだけである方がはるかに良い方法です。
変数名はキャメルケース(variableName
)で、クラス名はすべて大文字(MyClass
)で始める必要があります。定数はすべて大文字で、アンダースコア(MY_CONSTANT_VALUE
)として区切りを付ける必要があります。
上記のいくつかは気難しいように聞こえるかもしれませんが、実際にはそうではありません。上記のすべては、コードの抜け穴を閉じるか(一部はかなり危険です)、コードを大幅に読みやすくします(これは大きな恩恵です-なぜあなたが一体何のセクションを書いたかを忘れてしまうからです3か月後に戻って確認するときにコードを記述します)。Eplicitm
たとえば、複雑なカスタム定義のオブジェクトの名前のように見えるので、(スペルは別として)あなたが何を意味するのかを理解するのに時間がかかったのは私だけではないと確信しています...ではありませんString
!