How to set my own message in my custom exception in Java that can be retrieved my getMessage() BUT WITHOUT using the constructor, is there any way?

橙三吉。 提交于 2019-12-05 03:38:58

问题


I'm just learning about exception handling in Java. What I would like to know is rather than trying something like say:

throw new Exception("My Message");

and

String message=ex.getMessage();

System.out.println(message);

Take a look at the code below ,

class ExceptionTest {
    public static void main(String[] args) {
        ExceptionTest t1=new ExceptionTest();

        try {
            t1.riskyMethod();//call the risky or exception throwing method
        } catch(MyException myex) {
            System.out.println("Exception has been thrown");

            String message=myex.getMessage();//get the String passed during exception call
            System.out.println("The message retrieved is "+message);
            myex.printStackTrace();//prints name of exception and traces the function call stack
        }

    }//main ends

    void riskyMethod() throws MyException {//a method that can throw an excpetion
        int rand=(int)(Math.random()*10);///Math.rand return 0 to .9 range value

        if(rand>5) {
            //throw new MyException();  or try this
            //      MyException myexception=new MyException();
            //      myexception.setMessage("HI THIS IS A SAMPLE MESSAGE");
            String mymessage="Sample Exception Message...";
            throw new MyException(mymessage);
        }
        else
            System.out.println("No exception");
    }
}//Exception class ends 

While this works fine I want to know if I can avoid calling super(message) etc and just set some variable 'message' in my subclass MyException that changes the message retrieved on a call to exception.getMessage()

In other words what is the name of the string variable that store the message string passed to the constructor and can I set it manually, is it final or private, if so is there any setter method for it. Sorry I tried but am just a beginner and have trouble navigating the API


回答1:


No, there is no way of setting the message manually, you could however just use your own variable instead and override the getMessage() method

Example:

public class MyException extends Exception{

    public String message;

    public MyException(String message){
        this.message = message;
    }

    // Overrides Exception's getMessage()
    @Override
    public String getMessage(){
        return message;
    }

    // Testing
    public static void main(String[] args){
        MyException e = new MyException("some message");
        System.out.println(e.getMessage());
    }


}



回答2:


String Variable that store the message string passed to the constructor and can i set it manually

There is no such field in Java.

But to help you, i suggest using ArrayListto store Exceptions Strings. You can easily manipulate data with this by using add(),remove(), indexOf() methods . All additional information about class you can find here.

Keep in mind that this is not only way to store sets of data, so i suggest to read documentation.



来源:https://stackoverflow.com/questions/26313084/how-to-set-my-own-message-in-my-custom-exception-in-java-that-can-be-retrieved-m

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!