gpt4 book ai didi

java URL 对象 - new java.net.URL()

转载 作者:搜寻专家 更新时间:2023-11-01 01:28:56 25 4
gpt4 key购买 nike

我是 java 的新手,只是想运行一些简单的程序。我有这段代码:

import java.net.*;
import java.io.*;

class example1 {

public static void main(String args[]){

try{
URL hp = new URL("http://www.java2s.com");
System.out.println("it all worked?");
}catch (MalformedURLException e){
System.err.println("New URL failed");
System.err.println("exception thrown: " + e.getMessage());
}

System.out.println(hp.getProtocol());

}
}

Java 编译器“找不到符号:hp”,这会让我相信 url 对象 hp 不是由以下行创建的:

URL hp = new URL("http://www.java2s.com");

但是 catch 语句不应该报告错误吗?

我尝试在没有 try-catch block 的情况下进行编译,但我收到一条错误消息“未报告的异常 MalformedURLException;必须被捕获或声明为被抛出”

如果我删除引用 hp 的最后一行,程序会编译并运行,但只会显示“一切正常?”。

我确定这里有一个简单的解释,但我对 java 了解不多。谢谢

最佳答案

其他答案为您提供了一些避免错误的有用建议。但我想尝试解释一下您对错误含义的理解是如何困惑的。

这一行:

URL hp = new URL("http://www.java2s.com");

同时做两件事。它声明了一个名为hp 的变量(编译器通常将其称为“符号”),它可以指向一个URL 实例;并创建一个 URL 实例并使 hp 指向它。

您将错误解释为“未创建 url 对象 hp”。所以,首先,hp 不是一个对象——它至多是一个对象的引用,当然它也可以是null,在这种情况下它是对任何事物的引用。但是符号 hp 在其声明的范围内存在,无论是否为其分配了对象引用。

如果对象创建失败——即语句的 new URL ... 部分失败——那么很可能会如您预期的那样发生异常。但是即使由于一些不明原因创建失败但没有抛出异常,可能的结果是 hp 将是 null,在这种情况下,一个有效的解引用尝试变量 hp 将导致 NullPointerException

所有这些只是为了说明你收到的错误与hp是否被赋值无关,只是说明hp没有被赋值在您尝试使用它的范围内声明。

问题是 try block 会创建自己的作用域,因此在 block 内声明的变量无法在 block 外访问。如果您的 try block 中的第一行只是简单地读取 URL hp;,您将收到完全相同的错误。如其他答案所示,解决方法是在 try block 之外声明 hp ,以便后面的引用有效。 (也可以将最后一行移动到 try block 中,但将该 block 的内容限制为仅需要特定错误处理的语句是有意义的。)

关于java URL 对象 - new java.net.URL(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7681877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com