Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理实例化类对象时发生的异常_Java - Fatal编程技术网

Java 如何处理实例化类对象时发生的异常

Java 如何处理实例化类对象时发生的异常,java,Java,你好 我正在初始化构造函数中的类方法。但是,新URL(uploadUrl)将在构造函数中引发异常。因此,如果发生这种情况,用户应该无法继续。由于构造函数不能返回任何内容,我想知道处理这个问题的最佳方法是什么 非常感谢您的建议 java version "1.7.0_45" 公共类多路传输{ private static final String TAG=multipartity.class.getSimpleName(); 私有DataOutputStream DataOutputStream

你好

我正在初始化构造函数中的类方法。但是,
新URL(uploadUrl)
将在构造函数中引发异常。因此,如果发生这种情况,用户应该无法继续。由于构造函数不能返回任何内容,我想知道处理这个问题的最佳方法是什么

非常感谢您的建议

java version "1.7.0_45"
公共类多路传输{
private static final String TAG=multipartity.class.getSimpleName();
私有DataOutputStream DataOutputStream;
私有文件输入流文件输入流;
私有HttpURLConnection HttpURLConnection;
私有URL;
公共多路传输(最终字符串上传URL){
dataOutputStream=null;
fileInputStream=null;
httpURLConnection=null;
试一试{
url=新url(上传url);
}捕获(格式错误){
Log.wtf(标记,e.getMessage());/*
由于构造函数不能返回任何内容,我想知道处理这个问题的最佳方法是什么

通常,允许异常传播到调用方,可以直接传播,也可以将其包装到您自己的更高级别抽象异常中(在您的情况下,直接允许它看起来更合适)

由于没有URL,您的实例就没有用处,因此构建失败是有意义的

或者,如果您想将其记录在构造函数中(但如果它正在传播,则调用方通常会处理任何适当的日志记录):

//记录日志并重新抛出,但可能不建议这样做
公共MultipleFileTransfer(最终字符串上载URL)引发畸形的异常{
// -------------------------------------------------^
dataOutputStream=null;
fileInputStream=null;
httpURLConnection=null;
试一试{
url=新url(上传url);
}捕获(格式错误){
Log.wtf(标记,例如getMessage());

抛出e;//我可以想出两种体面的方法来处理这种情况:

(1) 让构造函数引发一个异常。在记录后重新引发相同的异常,或者引发不同的异常。如果它引发的异常不是
RuntimeException
(并且
MalformedURLException
不是
RuntimeException
),则需要向构造函数添加
throws
子句

(2) 无论如何,让构造函数创建一个对象,但将其标记为无法使用的“无效”对象。我将添加一个
isValid()
isInvalid()
方法,以便调用方可以查询它是否有效。如果对无效对象调用其他方法,则应抛出
IllegalStateException


我不认为其中一个明显优于另一个。这取决于偏好,也许还取决于程序其余部分的设计。

如果对象的URL被破坏,该对象是否应该继续存在?@Crowder,谢谢你的第一个建议。
public class MultipleFileTransfer {
    private static final String TAG = MultipartUtility.class.getSimpleName();

    private DataOutputStream dataOutputStream;
    private FileInputStream fileInputStream;
    private HttpURLConnection httpURLConnection;
    private URL url;

    public MultipleFileTransfer(final String uploadUrl) {
        dataOutputStream = null;
        fileInputStream = null;
        httpURLConnection = null;

        try {
            url = new URL(uploadUrl);
        } catch (MalformedURLException e) {
            Log.wtf(TAG, e.getMessage()); /* <-- How to handle a failure */
        }
    }

    /* Factory method that initializes the class methods and returns the class object */
    public static MultipleFileTransfer getInstance(final String uploadUrl) {

        /* Check that a valid url has been entered correctly */
        if(!URLUtil.isValidUrl(uploadUrl)) {
            Log.wtf(TAG, "Invalid url: " + uploadUrl);
            return null;
        }

        return new MultipleFileTransfer(uploadUrl);
    }
}
public MultipleFileTransfer(final String uploadUrl) throws MalformedURLException {
// -------------------------------------------------^
    dataOutputStream = null;
    fileInputStream = null;
    httpURLConnection = null;

    url = new URL(uploadUrl);
}
// Logging and re-throwing, but probably not recommended
public MultipleFileTransfer(final String uploadUrl) throws MalformedURLException {
// -------------------------------------------------^
    dataOutputStream = null;
    fileInputStream = null;
    httpURLConnection = null;

    try {
        url = new URL(uploadUrl);
    } catch (MalformedURLException e) {
        Log.wtf(TAG, e.getMessage());
        throw e;                       // <== Rethrowing
    }
}