0

私はJavaが初めてなので、例外クラスの参照変数がメッセージを出力し、通常のクラスの参照変数がeclassname@jsjkaを出力する理由がわかりません。

public class Exception11 {
    int x,y;

    public static void main(String[] args) {
        try{
        int total;
        Exception11 e=new Exception11();
        e.x=10;
        e.y=0;
        total=10/0;
        System.out.println("Value of refernce variable: "+e);
        System.out.println(total);
        } catch (ArithmeticException h) {
            System.out.println("number can not divide by the 0 Please try again");
            int total;
            Exception11 e=new Exception11();
            System.out.println("Value of refernce variable: "+e);
            System.out.println("Value of refernce variable: "+h);



        }

    }

}

答え - - - - - - - - - - - - - - -

number can not divide by the 0 Please try again
Value of refernce variable: Exception11@4f1d0d
Value of refernce variable: java.lang.ArithmeticException: / by zero
4

4 に答える 4

4

You're seeing the Object#toString representation of your class. In contrast ArithmeticException already overrides this method. You need to override this method in Exception11

@Override
public String toString() {
    return "Exception11 [x=" + x + ", y=" + y + "]";
}
于 2013-10-22T21:17:33.020 に答える
2

を呼び出すと、 のメソッドSystem.out.println("..." + e)が呼び出されます。このクラスにはメソッドがないため、のメソッドを継承し、次の値で を返します。toString()Exception11 eException11toString()ObjecttoString()String

getClass().getName() + '@' + Integer.toHexString(hashCode())

これがException11@4f1d0d由来です。クラスに実装toString()Exception11、エラーに名前を付けたい文字列を返すようにする必要があります。

のメソッドのObject#toString()詳細については、 を参照してください。ObjecttoString()

于 2013-10-22T21:23:44.257 に答える
1

を印刷h.toString()していe.toString()ます。ArithmeticExceptionオーバーライドされたカスタムtoStringが印刷されているため。

クラスでは、デフォルトが出力されます。つまり、クラス名の後@に 16 進数の ID ハッシュ コードが続きます。

次のようにオーバーライドできます。

@Override
public String toString() {
    //your logic to construct a string that you feel
       // textually represents the content of your Exception11
}
于 2013-10-22T21:17:48.170 に答える
1

ArithmeticException実装を使用しThrowable#toString()ます:

public String toString() {
    String s = getClass().getName();
    String message = getLocalizedMessage();
    return (message != null) ? (s + ": " + message) : s;
}

クラスException11がデフォルトを使用している間Object#toString()

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
于 2013-10-22T21:18:07.720 に答える