Java常见问题集锦
- 格式:pdf
- 大小:117.50 KB
- 文档页数:14
java中遇到的问题和解决方案
目录
1. Java中遇到的问题
1.1 内存溢出问题
1.2 死锁问题
2. 解决方案
2.1 内存溢出问题的解决方案
2.2 死锁问题的解决方案
Java中遇到的问题
在Java编程过程中,经常会遇到各种各样的问题,其中两个比较常见的问题是内存溢出和死锁问题。
内存溢出问题是指程序在运行过程中申请的内存超过了系统能够分配给它的内存大小,导致程序崩溃。
这种问题通常发生在程序中频繁创建大量对象或者持续运行时间过长的情况下。
死锁问题则是指多个线程互相持有对方所需要的资源,导致彼此无法继续执行,进而导致程序无法正常运行。
死锁问题通常发生在多线程编程中,处理不当时很容易出现。
解决方案
针对内存溢出问题,可以通过一些方法来解决,比如增加堆内存大小、优化程序代码以减少内存占用、及时释放不再使用的对象等。
另外,可以使用一些工具来监控程序内存使用情况,及时发现并解决潜在的内存溢出问题。
对于死锁问题,可以通过合理地设计程序逻辑、避免使用过多的同步代码块、避免嵌套锁等方法来预防死锁的发生。
此外,可以使用一些工具来帮助检测程序中潜在的死锁问题,并及时处理。
综上所述,如果在Java编程过程中遇到内存溢出或死锁问题,可以通过上述方法来解决,确保程序的稳定运行。
第1篇一、基础知识1. Java简介题目:请简述Java的基本特点。
答案:- 简单易学:Java设计之初就考虑了易学性,使用面向对象编程。
- 原生跨平台:Java通过JVM(Java虚拟机)实现跨平台运行。
- 安全性:Java提供了强大的安全机制,如沙箱安全模型。
- 体系结构中立:Java不依赖于特定的硬件或操作系统。
- 高效:Java的运行速度接近C/C++。
- 多线程:Java内置多线程支持,便于实现并发处理。
- 动态性:Java在运行时可以进行扩展和修改。
2. Java虚拟机题目:请解释Java虚拟机(JVM)的作用。
答案:JVM是Java程序的运行环境,其主要作用包括:- 将Java字节码转换为本地机器码。
- 管理内存,包括堆、栈、方法区等。
- 提供垃圾回收机制。
- 管理线程和同步。
3. Java内存模型题目:请简述Java内存模型的组成。
答案:Java内存模型主要由以下部分组成:- 堆(Heap):存储对象实例和数组。
- 栈(Stack):存储局部变量和方法调用。
- 方法区(Method Area):存储类信息、常量、静态变量等。
- 本地方法栈(Native Method Stack):存储本地方法调用的相关数据。
- 程序计数器(Program Counter Register):存储线程的当前指令地址。
4. Java关键字题目:请列举并解释Java中的几个关键字。
答案:- `public`:表示访问权限为公开。
- `private`:表示访问权限为私有。
- `protected`:表示访问权限为受保护。
- `static`:表示属于类本身,而非对象实例。
- `final`:表示常量或方法不能被修改。
- `synchronized`:表示线程同步。
- `transient`:表示数据在序列化时不会被持久化。
二、面向对象编程5. 类和对象题目:请解释类和对象之间的关系。
答案:类是对象的模板,对象是类的实例。
1."mons.collections.SequencedHashMap"'s signer information does not match signer information of other classes in the same package这是由于struts提供的commons-beanutils.jar和hibernate提供的commons-collections.jar冲突成的,可以从spring提供的lib中找到这个两个jarng.IllegalStateException: No data type for node:org.hibernate.hql.ast.tree.IdentNode用hql 时,忘了给表名加别名,如select p from Position,应该是select p from Position p3.The Server didn 't send back a proper XML response用FCKEditor时原因:解析不了xml文件解决方法:情况一:web.xml的配置是否正确,具体查看《FCKEditor使用指南.pdf》,还有fckeditor自带的几个jar 包情况二:加入serializer.jar,xalan.jar情况三:把项目下的fckeditor包删了,重新加入一遍.eclipse.swt.SWTError: No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]SWTError:没有更多的处理[未知Mozilla的路径(MOZILLA_FIVE_HOME未设置)]环境:linux下运行swt程序(我出现此问题是,在linux下嵌套浏览器)原因:firefox版本不一致解决:重装一个firefox,并设置相关变量5.Exception in thread "main" org.eclipse.swt.SWTError: No more handles [Could not detect registered XULRunner to use]环境:用XULRunner 在java application中嵌套浏览器原因:没有注册XULRunner解决:window下环境中,在程序中加入,如(第二个参数是下载解压后的存放路径):static{System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "C:\\xulrunner");}6.Exception in thread "main" ng.UnsatisfiedLinkError: noswt-win32-3536 or swt-win32 in swt.library.path, java.library.path or the jar file环境:用DJ Natvie Swing时,在java application中嵌套浏览器,且在windows环境下运行正常,但在linux下却包此异常原因:windows下与linux下使用的swt jar包不一样解决:在windows下用swt-3.5M6-win32-win32-x86.jar,在linux下用swt-3.5.1-gtk-linux-x86.jar7.Exception in thread "main" .ProtocolException:cannot write to a URLConnection if doOutput=false - call setDoOutput(true)环境:用URLConnection送某url发送数据时原因:doOutput=false时,不能发送数据解决:如urlConnection.setDoOutput(true).SocketException: Connection resetat .SocketInputStream.read(SocketInputStream.java:168)at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)at java.io.InputStreamReader.read(InputStreamReader.java:167)at java.io.BufferedReader.fill(BufferedReader.java:136)at java.io.BufferedReader.readLine(BufferedReader.java:299)at java.io.BufferedReader.readLine(BufferedReader.java:362)at com.eagle.service.AutoUpdate.run(AutoUpdate.java:43)环境:j2se socket编程时,服务器端报错原因1:服务器端用BufferedReader,时,没有读到一行解决:客户端用PrintWriter, pw.println(),不能用pw.print(),因为br.readLine()是读一行环境:j2se socket编程时,服务器端/客户端在br.readLine()时报错原因2:服务器端用BufferedReader,br.readLine()时,客户端/服务器已经退出,但是并未通过服务器/客户端,即服务器端/客户端的socket还没有关闭,当用br.readLine()时就会出现这种情况解决:在关闭客户端时要socket.close(),同时还要向服务器发送一条退出的信息,这样让服务器知道某个客户端已经关闭,它就可以终止对此客户端的线程了,反之服务器也是一样.hibernate.PropertyAccessException: Null value was assigned toa property of primitive type setter of er环境:hibernate原因:oolean类型的值为null,boolean类型的值必须是true/false解决:save or update时给boolean类型的值赋true/false10.用占位符查询时出现空指针ng.NullPointerExceptionatorg.hibernate.hql.ast.ParameterTranslationsImpl.getNamedParameterExpectedType(ParameterTranslat ionsImpl.java:63)at org.hibernate.engine.query.HQLQueryPlan.buildParameterMetadata(HQLQueryPlan.java:245)at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:95)at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)at .struts.action.LoginAction.execute(LoginAction.java:72)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)atorg.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11Ba seProtocol.java:664)at .PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)at .LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)at ng.Thread.run(Thread.java:595)环境:hibernate原因:HQL 不能解析解决:错误写法:String hql = "select m from com.eagle.oa.model.Message m where m.ids like: id";正确写法:String hql = "select m from com.eagle.oa.model.Message m where m.ids like:id";ng.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!原因:在使用hibernate的session.createQuery(.....)时设置参数的下标应该从0开始解决:如:return session.createQuery("from User u where erName = ? and password = ?").setParameter(0, name).setParameter(1, password).uniqueResult();.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.wxj.entities.Group环境:hibernate原因:某个实例的属性一个对象,这个对象没有保存,还是暂态的对象解决:先保存这个对象,或是在另一端加inverse = true13.ORA-01461: can bind a LONG value only for insert into a LONG column环境:oracle原因:jar冲突解决:换成classes12.jar包即可14.ERROR LazyInitializationException:19 - could not initialize proxy - the owning Session was closed环境:SSH原因:当一个类或属性设置了lazy="true",操作对象时,session已经关闭了解决:使用Spring的过滤器openSessionInView.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into MIT/AUTO or remove 'readOnly' marker from transaction definition.环境:SSH原因:这个异常产生的主要原因是DAO采用了Spring容器的事务管理策略,如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配上,spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就不被允许的,所以包这个异常解决:修改spring配置文件中相关事务管理部分mon.beans.ProbeException: There is no READABLE property named 'eid' in class 'com.wxj.entity.Student'环境:ibatis原因:在给对象做操作,设置参数时,指定的参数不是对象中有的属性,就会抛出此异常解决:核对对象的属性ng.OutOfMemoryError: PermGen space环境:很多,如ssh整合时原因:不断的更新class,造成应用重启,最终造成代码区的内存空间满了解决:方法很多,1重启,2增加代码区的大小,3少更新class,4有时可能是log4j造成的问题,建议使用common-loggin.jar 5,优化代码以下来自CSDN的jinhuiyu:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息,可以用如下方法解决(根据你的实际情况设置大小),但是这只是临时的解决方法,更重要的是改造你的CODE1.可以在windows 更改系统环境变量加上JAVA_OPTS=-Xms64m -Xmx512m2,如果用的tomcat,在windows下,可以在C:\tomcat5.5.9\bin\catalina.bat 中加上:set JAVA_OPTS=-Xms64m -Xmx256m位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适.3.如果是linux系统Linux 在{tomcat_home}/bin/catalina.sh的前面,加set JAVA_OPTS='-Xms64 -Xmx512'18.在客户端使用dwr时,即跨域访问时,出现“拒绝访问“及“找不到某个属性”的问题(在服务器端调用时却正常)环境:在客户端使用dwr原因:1。
java 工作中的问题和建议在Java工作中可能会遇到一些常见的问题,以下是一些常见问题以及解决建议:问题1:性能问题在开发和部署Java应用程序时,经常会遇到性能问题,比如应用响应变慢或者占用大量内存等。
这通常是由于代码不够高效、数据库查询优化不充分或者服务器配置不合理等原因造成的。
解决建议:- 使用合适的数据结构和算法来优化代码性能。
- 使用数据库查询优化技巧,如创建适当的索引、合理使用数据库缓存等。
- 配置合适的服务器硬件和软件,如增加内存、优化线程池等。
问题2:并发问题由于Java应用程序通常是多线程的,所以在处理并发问题时可能会遇到一些困难,比如线程安全问题、死锁等。
解决建议:- 使用同步机制(如synchronized关键字)来确保线程安全。
- 使用并发工具类(如Lock、ConcurrentHashMap等)来优雅地处理并发问题。
- 使用经典的并发设计模式来解决特定类型的问题,如生产者-消费者模式、读写锁等。
问题3:内存泄漏Java的垃圾收集机制可以自动回收不再使用的内存,但有时会发生内存泄漏,即一些无用的对象没有被回收造成内存占用过高。
解决建议:- 注意观察内存使用情况,及时发现内存泄漏问题。
- 使用合适的工具进行内存分析和调优,如Java自带的VisualVM或者第三方工具。
- 确保正确地释放和销毁对象,避免意外的对象引用。
问题4:代码质量问题写出高质量的Java代码是每个Java开发人员的追求,但有时可能会写出冗长、复杂或者难以维护的代码。
解决建议:- 遵循良好的编码规范和设计原则,如单一责任原则、开闭原则等。
- 使用合适的设计模式和设计思想来优化代码结构和可读性。
- 进行代码审查和重构,及时修复和提升代码质量。
总的来说,Java工作中会遇到各种各样的问题,关键是保持学习和不断积累经验,同时充分发挥Java强大的生态系统和工具支持来解决问题。
ng.NullPointerException原因是:有空指针,有地址没赋值2.Exception in thread "main" ng.ArithmeticException: / by zero原因是除数是03.ArrayIndexOutOfBoundsException原因是:数组越界原因是:数字格式化有问题5.Unhandled exception type Exception原因是:没有进行异常处理6.进行国际化操作的时候遇到这样的错误:Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name Message, locale zh_CN答:因为在命令提示符中,是没有错误的解决方法是:在myeclipse中,会出现这个错误1.初步学习最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很久才解决了。
原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法! 2.中文显示:测试文件java 代码package com.lht.ResourseBundleStudy;import java.util.ResourceBundle;public class ResourseBundleDemo {public static void main(String[] args) {ResourceBundle resource =ResourceBundle.getBundle("test");System.out.print(resource.getString("msg0") + "!");System.out.println(resource.getString("msg1") + "!"); }}test.propertiesmsg0="Hello World"msg1="da jia hao"开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一下终于在sun的java论坛()中找到了线索下面是帖子的内容:I've solved the problem the best way possible. Basically what i've done is added a new class folder named config to the project home dir. Then i added this classfolder to the classpath in project properties. After doing all of this you only need to reference the properties file by "Email".Hope this helps anyone else who is having similiar problems.基本意思就是在src下建立classes(名字无所谓)文件夹将属性文件存放在下面,然后将这个文件夹加入类路径中!运行就可以了:加入类路径的方法:你的工程文件夹->properties->选择Libraries选项卡->Add Class Folder将刚才建立的文件夹加入就可以了!结果如下:"Hello World"!"da jia hao";!2.中文显示在classes目录下建立message_CH.properties内容如下:ms0="大家好"同样用上面的测试文件!结果如下:"?ó????"!乱码怎么回事啊!在百度里搜索后找到了答案有以为网友写的很清楚:下面引用如下:原理Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。
2024年Java经典面试题及答案问:Java中的泛型是什么?它有什么作用?答:Java中的泛型是一种参数化类型,它允许使用一个占位符来代表各种类型。
它的作用是在编译时检测类型的一致性,避免了类型转换错误,并提高了代码的重用性。
问:Java中的静态方法和实例方法有什么区别?答:静态方法是属于类的方法,可以在不创建实例对象的情况下被调用,它可以直接通过类名来调用。
实例方法是属于具体实例对象的方法,需要先创建实例对象才能调用。
问:Java中的反射是什么?它有什么用途?答:反射是指在运行状态中,动态获取类的信息并操作类的属性和方法。
它的主要用途是在运行时动态创建对象、访问属性和调用方法,以及在编译时无法确定类型的情况下进行操作。
问:Java中的多线程是什么?如何创建多线程?答:多线程是指在一个程序中同时执行多个线程,每个线程可以独立执行不同的任务。
要创建多线程可以通过继承Thread 类或实现Runnable接口来实现。
问:Java中的异常处理是什么?有哪些常见的异常类型?答:异常处理是指在程序执行过程中处理各种错误或异常情况。
常见的异常类型包括NullPointerException、ArrayIndexOutOfBoundsExcpetion、IOException等。
问:Java中的集合框架是什么?它有哪些常见的接口和类?答:集合框架是Java中用于存储和操作对象的数据结构。
常见的接口包括List、Set、Map等,常见的类包括ArrayList、LinkedList、HashSet、HashMap等。
问:Java中的IO流是什么?它有哪些常见的流类型?答:IO流是用于输入和输出操作的流。
常见的流类型包括字节流和字符流,分别对应InputStream/OutputStream和Reader/Writer。
在Java编程中, IO流是非常重要的一个概念。
IO流是用于将数据从一个地方传输到另一个地方的机制,它允许程序通过输入和输出来访问数据。
Java Web开发中的常见问题汇总与解决方案Java Web开发是现在互联网行业中非常热门的技术方向之一,它的发展势头也是越来越迅猛。
然而,在开发Java Web应用程序的过程中,总会遇到各种各样的问题,有的是因为技术不够熟练导致的,有的是由于环境不同而产生的。
为了让大家更好地掌握Java Web开发,本文将为您汇总整理了一些Java Web开发中常见的问题,并提供相应的解决方案。
一、数据访问异常在Java Web开发中,我们经常会遇到与数据库相关的异常。
尤其是在开发大型系统时,访问数据库的错误可能会成倍地影响系统的性能和可靠性。
以下列举一些常见的数据访问异常和解决方案。
1、连接池过期连接池过期是一个非常常见的问题,尤其是在系统高并发的情况下,会造成系统性能的明显下降。
解决方法是通过合理的配置和优化连接池的使用,提高系统的吞吐量和稳定性。
2、防止数据库死锁死锁是在高并发系统中经常遇到的问题之一。
如果多个线程并发访问数据库的同一个资源,就有可能导致死锁的产生。
要解决这个问题,可以通过使用数据库的锁机制来避免死锁的产生。
3、被动连接关闭一些数据库和Java ORM框架对于空闲连接资源的回收策略不同,可能会导致被动关闭连接的情况发生。
解决方案是做好连接池的配置和优化,避免过度的空闲连接资源占用。
二、Web服务器异常Java Web开发中的Web服务器异常也是非常常见的问题。
以下列举一些常见的Web服务器异常和解决方案。
1、多线程并发处理异常在高并发的情况下,Web服务器可能会产生并发处理异常,这种情况下就需要通过合理的代码设计和服务器配置来保证系统的性能和稳定性。
2、内存溢出和内存泄漏内存溢出和内存泄漏是很多Java Web开发者常常碰到的问题。
要解决这个问题,可以通过调整JVM内存参数,优化代码的编写和设计,避免无意中创建了对象并长时间占用内存资源。
3、负载均衡异常Java Web应用程序在高并发的情况下,可能会导致负载均衡的异常。
一、背景介绍在Java项目开发过程中,经常会遇到各种各样的问题,这些问题可能涉及到代码编写、性能优化、技术选型等方方面面。
本文将结合实际项目经验,以案例的形式介绍在Java项目中可能遇到的问题,并对这些问题进行深入分析和解决方案的探讨。
二、问题案例一:内存泄漏问题描述:在一个长期运行的Java应用程序中,发现内存占用逐渐增加,并最终导致了内存溢出。
经过分析发现,在程序运行过程中,存在大量未及时释放的对象占用了大量的内存空间,从而导致了内存泄漏。
解决方案:1. 使用内存分析工具对程序进行分析,定位内存泄漏的具体位置。
2. 检查程序中的代码逻辑,确保对象在不再使用时能够及时被垃圾回收器回收。
3. 使用弱引用、软引用等方式管理对象的生命周期,避免长期占用内存。
三、问题案例二:性能瓶颈问题描述:在一个大型的Java项目中,发现程序在高并发情况下性能急剧下降,响应时间较长,甚至出现了请求超时的情况。
经过分析发现,系统中存在性能瓶颈,导致了系统无法满足高并发请求的需求。
解决方案:1. 使用性能分析工具对程序进行检测,找出性能瓶颈的具体位置。
2. 对程序中的关键模块进行性能优化,例如减少数据库查询次数、优化算法复杂度等。
3. 使用缓存技术对频繁访问的数据进行缓存,减少系统对数据库的访问压力。
四、问题案例三:线程安全问题描述:在多线程并发场景下,程序出现了数据错乱、数据丢失等问题,经过分析发现这是由于程序中存在了线程安全问题导致的。
解决方案:1. 对程序中的共享资源进行合理的加锁保护,确保多线程访问时能够保持数据的一致性。
2. 使用并发控制工具,如Java中的Concurrent包下的工具类来简化线程安全编程的复杂度。
3. 对程序进行多线程并发测试,发现潜在的线程安全问题并及时修复。
五、问题案例四:第三方组件使用问题问题描述:在集成第三方组件时,发现程序出现了各种各样的问题,如兼容性、性能、安全等方面的问题。
解决方案:1. 对第三方组件进行全面的评估和测试,确保其与现有系统的兼容性。
《Java开发常见问题解答》Java是一种高级编程语言,被广泛应用于当今世界各个领域,包括企业应用开发、Android应用开发、Web应用开发等。
其广泛使用也引发了一系列问题。
本篇文章将针对Java开发中的一些常见问题进行解答,帮助开发者更好地应对和解决这些问题。
一、内存泄漏问题Java虚拟机(JVM)在为Java程序提供内存资源的同时,也为程序提供内存管理服务。
但是,由于Java语言的垃圾回收机制不像C语言一样由程序员自行管理,因此可能导致内存泄漏问题。
内存泄漏指的是程序在执行过程中无法释放已经分配的内存,使得程序的内存空间被不必要地占用。
解决方案:1.使用内存分析工具,如Eclipse Memory Analyzer和VisualVM等,搜索并定位内存泄漏代码。
2.规范使用Java API,如Collection类等,在使用完后及时将其释放。
3.避免使用静态集合类,避免Object类中的finalize()方法。
二、多线程同步问题多线程同步问题是Java开发中最常见和棘手的问题之一。
由于多个线程对共享数据进行访问,因此可能导致线程安全问题,如死锁、线程调度等。
解决方案:1.使用线程同步机制,在共享数据的前提下,控制多个线程的访问。
例如,使用synchronized关键字实现同步。
2.使用线程局部变量,该变量仅在线程内部可见,不影响其他线程。
3.使用线程池,减少线程频繁创建和销毁的开销。
三、字符串操作效率问题Java中字符串的操作效率常常受到开发者的重视。
由于字符串操作过程中的对象创建和销毁对程序效率的影响较大,因此需要针对性地解决字符串操作效率问题。
解决方案:1.使用StringBuilder类和StringBuffer类,避免频繁创建新的字符串对象,提高效率。
2.使用String的intern()方法,将字符串存储在常量池中,节省内存,提高效率。
3.避免使用“+”连接符进行字符串拼接,避免不必要的内存开销。
1. 在继承关系中,方法的重写要遵循“两同两小一大”规则,简述其含义。
答:“两同”即方法名相同、形参列表相同;“两小”指的是子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常应比父类方法声明抛出的异常类更小或相等;“一大”指的是子类方法的访问权限应比父类方法更大或相等。
2. 如果在某个方法中访问名为a的变量,简述系统查找变量a的顺序。
答:先查找本方法中是否有a局部变量,再查找当前类中是否有a的成员变量,最后查找当前类的直接父类中是否包含a成员变量,依次上溯到间接父类,直到ng.Object类,如果最终不能找到,则系统出现编译错误。
3. 说明重载和重写的区别。
答:方法的重载和重写是Java多态性的不同表现。
重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称、参数和返回值类型,就说该方法被重写。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们有不同的参数个数或不同的参数类型,则称为方法的重载。
重载的方法是可以改变返回值的类型的。
4. 说明接口和抽象类的区别。
答:·抽象类可以有构造方法,接口中不能有构造方法。
·抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的。
·抽象类中抽象方法可以指定为public,接口中抽象方法不能指定其他修饰符,固定就是public,因此可省略不写。
·抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的。
·一个类可以实现多个接口,但只能继承一个抽象类。
5. 说明= =和equals()的区别。
答:如果= =的两边都是基本类型变量或包装类对象所组成的表达式,= =用于比较两边的表达式的值是否相等。
如果= =的两边是引用类型的变量,= =用于判断这两个引用类型的变量是否引用同一块内存。