知识点第七次整理
目录
内容42、Java 中,throw 和 throws 有什么区别43,java中会存在内存泄漏吗,请简单描述。44、说一说Servlet的生命周期?45、Servlet API中forward()与redirect()的区别?46、request.getAttribute()和 request.getParameter()有何区别?
内容
42、Java 中,throw 和 throws 有什么区别
throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
表示抛出异常,由该方法的调用者来处理
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:则是用来抛出一个具体的异常类型。
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
43,java中会存在内存泄漏吗,请简单描述。
-
java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。
-
如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。
-
当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。
44、说一说Servlet的生命周期?
Servlet生命周期共4个阶段:
实例化---初始化---服务--销毁
实例化:当用户第一次发送请求当时候,容器判断是否已经创建过servlet对象,由于是第一次,所以没有创建TOMCAT进行创建
初始化:创建完毕,调用init方法初始化
第二次请求,判断已经存在则无需进行实例化喝初始化
服务:初始化完毕,调用service方法,进行doget dopost方法去处理相应当请求
销毁:tomcat关闭,调用destory方法销毁servlet对象
45、Servlet API中forward()与redirect()的区别?
请求转发forward()和重定向redirect()是Servlet处理完数据后进行页面跳转的两种主要方式。
转发:forward()是使用RequestDispatcher接口中的forward()方法来实现,需要request 和 response作为参数,就是将用户的请求,连同请求信息等内容,一起转发到服务器的另外一个servlet去处理,它不会丢失request信息。这一过程是服务器内部完成的,作为访问者,是感觉不到了,或者说是透明的,因此访客浏览器的url 是不会发生变化的。
重定向:重定向redirect()是通过HttpServletResponse对象的sendRedirect()来实现,该方法相当于浏览器重新发送一个请求 response.sendRedirect(path); 会丢失request的所有信息, 它属于页面级的重定向,仅仅让你的浏览器重新访问一个新的url,作为浏览者,能很明显的看到浏览器url地址的变化,这和点击了一个普通的超链接的后果是一样的。
两者的选择:
forward()方法更加高效, 在forward()方法可以满足需要时, 尽量使用 forward()方法, 并且, 这样也有助于隐藏实际的链接。 在有些情况下, 比如, 需要跳转到一个其它服务器上的资源, 则必须使用。
46、request.getAttribute()和 request.getParameter()有何区别?
从获取方向来看:
getParameter()是获取 POST/GET 传递的参数值;
getAttribute()是获取对象容器中的数据值;
从用途来看:
getParameter用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
getAttribute用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了 mapping.findForward。 getAttribute 只能收到程序用 setAttribute 传过来的值。
另外,可以用 setAttribute,getAttribute 发送接收对象.而 getParameter 显然只能传字符串。 setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。getParameter只是应用服务器在分析你送上来的 request页面的文本时,取得你设在表单或 url 重定向时的值。
总结:
getParameter 返回的是String,用于读取提交的表单中的值;(获取之后会根据实际需要转换为自己需要的相应类型,比如整型,日期类型啊等等)
getAttribute 返回的是Object,需进行转换,可用setAttribute 设置成任意对象,使用很灵活,可随时用

浙公网安备 33010602011771号