Java异常处理详解:捕获与重新抛出

版权申诉
0 下载量 175 浏览量 更新于2024-07-02 收藏 235KB PPT 举报
"Java程序设计中的异常处理是编程中至关重要的部分,主要涉及异常的定义、分类、捕获、处理以及如何定义新的异常类型。在Java中,异常是指程序运行时遇到的不正常情况,例如除0溢出、数组越界等,这些异常会导致程序中断。异常处理机制通过生成Exception对象并进行抛出和捕获,使得程序能够尝试恢复正常的执行流程。 异常处理概述: 异常是程序执行期间发生的错误,这些错误可能导致程序无法继续正常运行。当异常发生时,Java会创建一个异常对象,并将其交给运行时系统来处理。这个过程分为两个阶段:抛出异常和捕获异常。抛出异常意味着生成异常对象并将其提交给运行时系统;捕获异常则指系统回溯方法调用栈,寻找能够处理特定异常的代码块。 异常分类: Java中的异常通常分为检查异常(Checked Exceptions)和运行时异常(Unchecked Exceptions)。检查异常是那些在编译时就需要处理的异常,比如IOException;运行时异常则是在程序运行时可能出现的异常,如ArithmeticException,它们通常不需要显式捕获,但如果需要,可以在try-catch语句中处理。 异常的捕获处理: 捕获异常通常使用try-catch语句块实现。try块包含可能抛出异常的代码,而catch块则定义了处理特定异常的代码。如果try块中的代码抛出一个异常,对应的catch块将被执行。可以有多个catch块来处理不同类型的异常。 重新抛出异常: 在catch块中,可以通过throw语句重新抛出异常,这可以将异常传递到上层调用者,或者附加上更多的信息后再次抛出。 异常对象的生成: 当异常发生时,Java会自动创建一个表示该异常的对象。这个对象包含了异常的相关信息,如异常类型和堆栈跟踪。 重新抛出异常对象: 在处理异常时,有时需要改变异常类型或添加额外信息,这时可以创建一个新的异常对象,并在catch块中使用throw语句抛出。 定义新的异常类型: 开发人员可以通过继承Java的Exception类或其子类来定义新的异常类型。这样做可以为特定的错误情况提供更精确的异常表示。 例如,一个简单的异常处理示例是处理除以零的情况。在初始的代码中,如果没有异常处理,被零除会导致程序崩溃。但通过将可能抛出异常的代码放入try块,并在catch块中捕获ArithmeticException,程序可以捕获这个异常并打印出错误信息,而不是直接终止。 在异常处理中,一个好的实践是使用finally块来确保无论是否发生异常,某些代码(如资源清理)总会被执行。此外,使用throws关键字可以在方法声明中表明该方法可能会抛出的异常,让调用者知道需要处理这些异常。 总结来说,Java的异常处理机制是保证程序健壮性和可维护性的重要工具。通过合理的异常处理,开发者可以更好地控制程序的错误状态,提供优雅的错误处理机制,从而提高用户体验和代码质量。

严重: web应用程序[/chapter12]中的Servlet[springmvc]引发了load()异常 java.lang.ClassNotFoundException: org.springframwork.web.servlet.DispatcherServlet at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215) at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:534) at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:515) at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1070) at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010) at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5264) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:927) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) at org.apache.catalina.startup.Catalina.start(Catalina.java:772) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)

2023-06-10 上传

import requests import os from bs4 import BeautifulSoup class book_spider(): def __init__(self,root_url): self.root_url=root_url self.book_list=[] #一级页面中获取的数据(二级页面地址)存放于此列表 self.chapter_list=[] #二级页面中获取的数据(三级页面地址和章节名)存放于此列表 def get_url(url): while True: try: res=requests.get(url) if res.status_code==200: res.encoding =res.apparent_encoding print("页面获取成功") return res.text else: print("页面返回异常",res.status_code) except: print("页面获取错误") def get_book_list(self.url): res = self.get_url(url) html = BeautifulSoup(res,"html.parser") a_list = html.find_all("a",{"class":"name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url+i for i in self.bbok_list] self.book_list.remove('http://10.1.88.252:7000/庆余年') print(book_list) def get_chapter_list(self,url): res = self.get_url(url) html = BeautifulSoup(res,"html.parser") a_list = html.find_all("a",{"class":"chapter"}) for a in a_list: self.chapter_list.append((a["href"],a.text.replace("\n",""))) def get_content(self.chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res,"html.parser") content = html.find("div",{"id":"content"}).text print(content) path = os.path.join(book_name,chapter[1]) with open(path,"w",encoding="utf8") as f: f.write(content) def main(): self.get_book_list(self.root_url) for book in self.book_list: self.get_chapter_liat(book) for chapter in chapter_list: self.get_content(chapter) book_s = book_spider("http://10.1.88.252:7000") book_s.main()这是一段爬虫代码,找出里面的错误并改正

2023-06-02 上传

帮我把一下代码设置一个合理请求头,并加入一个延时import requests import os from bs4 import BeautifulSoup class NovelDownloader: def __init__(self, root_url): self.root_url = root_url self.book_list = [] self.chapter_list = [] def get_url(self, url): while True: try: res = requests.get(url) if res.status_code == 200: print("页面获取成功!") return res.text else: print("页面返回异常!", res.status_code) except: print("页面获取错误!") def get_book_list(self): res = self.get_url(self.root_url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url + i for i in self.book_list] self.book_list.remove('http://www.biquge5200.cc/') def get_chapter_list(self, url): res = self.get_url(url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "chapter"}) for a in a_list: self.chapter_list.append((a["href"], a.text.replace("\n", ""))) def get_content(self, chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res, "html.parser") content = html.find("div", {"id": "content"}).text print(content) path = os.path.join(book_name, chapter[1]) with open(path, "w", encoding="utf8") as f: f.write(content) def main(self): self.get_book_list() for book in self.book_list: self.get_chapter_list(book) for chapter in self.chapter_list: self.get_content(chapter) if __name__ == '__main__': root_url = "http://www.biquge5200.cc/" nd = NovelDownloader(root_url) nd.main()

2023-06-02 上传