java常见问题9.10
java常见错误以及可能原因集锦

java常见错误以及可能原因集锦java常见错误以及可能原因集锦0、需要标识符a) 不在函数内1、非法表达式开始b) 可能:丢失括号 .2. no data founda) 可能:setInt(1,100)中,没有100这个值3. 找不到符号a) 可能:没导入包4. 指定了无效URLa) 可能:数据库名或IP错误,即连接出错5. 类路径没有找到a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriverb) 原因: 一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件c) 解决: 没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来6. 空指针异常a) 可能: 数据源错误比如数据库名或IP错误7. 不能执行查询a) 可能: 数据库中表的问题,比如列名不存在8. invalid identitya) 可能: 列名出错9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select 语句,导致与原有的序列号产生冲突10. 表名或列名不存在a) 可能:表不存在或者没有插入数据到表中11. 不支持的类,类的版本错误a) 可能:没有导入jdk5.0,或者编译器仍为1.412. MappingNotFoundExceptiona) Maybe: In the Eclipse Not refersh , or not exist in the dirctory13. HibernateException: /hibernate.cfg.xml not founda) Maybe1: hibernate.cfg.xml not in the root directoryb) Maybe2: Could not parse configuration .c) resolve: database not connect or use another database14. ConstraintViolationExceptiona) Maybe: used a not true database15. 驱动没有找到或者 JDBC Driver not found可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误16. 空指针异常,/doc/e411973287.html,ng.NullPointerExce ptiona) 可能1:数据库连接出错,比如在hibernate.cfg.xml中的数据错误会导致异常。
Java运行环境的排错与问题解决

Java运行环境的排错与问题解决Java 运行环境是一种广泛使用的平台,用于开发和运行各种应用程序,包括桌面应用程序、Web 应用程序和服务器程序。
由于Java 运行环境的复杂性,在实际应用中经常会出现各种错误和问题,特别是在开发和调试过程中。
如何排错和解决这些问题,是Java 开发人员必须掌握的基本技能之一。
本文将就此问题进行一些思考和分享。
1. Java 运行环境的基本原理在了解 Java 运行环境的排错和问题解决方法之前,我们需要了解一些基本原理。
Java 运行环境主要由两个部分组成:Java 虚拟机 (JVM) 和 Java 应用程序接口 (API)。
JVM 是一个可执行程序,负责解释和执行 Java 程序代码。
API 是一组库和工具,提供了丰富的功能和接口,包括语言基础、数据结构、网络、文件I/O 等。
JVM 的主要作用是将 Java 源代码编译成 Java 字节码(Bytecode),然后解释执行这些字节码。
编译器将源代码转换为字节码的过程称为编译,解释器将字节码解释执行的过程称为运行。
由于 Java 字节码是可移植的,因而可以在不同的操作系统和硬件平台上运行。
Java 运行环境包括 JVM 和 API,通常称为 JRE (Java Runtime Environment)。
2. Java 运行环境的常见问题Java 的运行环境虽然功能强大,但也经常会出现各种问题和错误。
这些问题可能来自多个方面,包括程序代码、运行环境、操作系统等。
Java 开发人员需要了解这些问题的原因和解决方法,才能编写高质量的 Java 程序。
下面是一些常见的 Java 运行环境问题和解决方法:1) Java 安装问题有时候在安装 Java 运行环境时,会出现一些问题。
这些问题可能与操作系统版本、JVM 版本、环境变量等相关。
解决方法包括检查安装文件、修改环境变量、重新安装等。
2) ClassNotFoundException这个错误通常发生在运行时,表示找不到指定的类。
Java开发中的常见错误及解决方法

Java开发中的常见错误及解决方法在Java开发中,开发者可能会遇到许多常见的错误。
这些错误可能来自于语法错误、逻辑错误或者编码风格等不同的方面。
今天,我们就来一起探讨Java开发中常见的错误以及如何解决这些问题。
一、空指针异常(NullPointerException)空指针异常是一个极为常见的错误,很容易发生。
这个错误通常发生在访问一个空对象或者调用一个空对象的方法时发生。
在Java中,如果变量没有被初始化或者设置为null,其值就为空。
解决方案:1. 检查变量是否被正确初始化或者设置为null;2. 使用if判空语句来避免空指针异常的发生;3. 使用Objects类中的requireNonNull方法,可以在变量为空的时候抛出异常,防止出现空指针异常的情况,例如:public void showData(String data){Objects.requireNonNull(data,"data must not be null");//do something...}二、数组越界异常(ArrayIndexOutOfBoundsException)如果在访问数组时访问了数组的不存在的元素,或者使用负数的下标来访问数组,就会抛出数组越界异常。
对于数组的访问,必须保证数组下标越界。
解决方案:1. 检查数组下标是否越界;2. 尽可能使用for-each循环,可以保证不会越界;三、类型转换异常(ClassCastException)类型转换异常是因为试图将一个对象转换为不相关的对象类型而导致的异常。
在Java中,如果试图将一个子类实例转换为父类对象时,不需要进行任何显式的类型转换操作。
但是,将一个父类实例转换为一个子类时,就需要使用强制类型转换操作。
解决方案:1. 确保转换类型之前,先用instanceof判断对象类型;2. 避免在不相关对象类型之间进行强制类型转换操作;四、算术异常(ArithmeticException)算术异常通常发生在程序试图除以0的情况下。
java中遇到的问题和解决方案

java中遇到的问题和解决方案
目录
1. Java中遇到的问题
1.1 内存溢出问题
1.2 死锁问题
2. 解决方案
2.1 内存溢出问题的解决方案
2.2 死锁问题的解决方案
Java中遇到的问题
在Java编程过程中,经常会遇到各种各样的问题,其中两个比较常见的问题是内存溢出和死锁问题。
内存溢出问题是指程序在运行过程中申请的内存超过了系统能够分配给它的内存大小,导致程序崩溃。
这种问题通常发生在程序中频繁创建大量对象或者持续运行时间过长的情况下。
死锁问题则是指多个线程互相持有对方所需要的资源,导致彼此无法继续执行,进而导致程序无法正常运行。
死锁问题通常发生在多线程编程中,处理不当时很容易出现。
解决方案
针对内存溢出问题,可以通过一些方法来解决,比如增加堆内存大小、优化程序代码以减少内存占用、及时释放不再使用的对象等。
另外,可以使用一些工具来监控程序内存使用情况,及时发现并解决潜在的内存溢出问题。
对于死锁问题,可以通过合理地设计程序逻辑、避免使用过多的同步代码块、避免嵌套锁等方法来预防死锁的发生。
此外,可以使用一些工具来帮助检测程序中潜在的死锁问题,并及时处理。
综上所述,如果在Java编程过程中遇到内存溢出或死锁问题,可以通过上述方法来解决,确保程序的稳定运行。
java的常见问题及解决方法

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中常见错误和异常解决方法(打印)要点

ng.NullPointerException原因是:有空指针,有地址没赋值2.Exception in thread "main" ng.ArithmeticException: / by zero原因是除数是03.ArrayIndexOutOfBoundsException原因是:数组越界ng.NumberFormatException原因是:数字格式化有问题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中,会出现这个错误java国际化之Can't find bundle for base name1.初步学习最近在学习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论坛(/thread.jspa?threadID=660477&messageID=4231534)中找到了线索下面是帖子的内容: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="大家好"同样用上面的测试文件!结果如下:"?ó????"!乱码怎么回事啊!在百度里搜索后找到了答案有以为网友写的很清楚:/3885062.html 下面引用如下:原理Property文件中,使用的编码方式根据机器本身的设置可能是GBK或者UTF-8。
java 工作中的问题和建议

java 工作中的问题和建议在Java工作中可能会遇到一些常见的问题,以下是一些常见问题以及解决建议:问题1:性能问题在开发和部署Java应用程序时,经常会遇到性能问题,比如应用响应变慢或者占用大量内存等。
这通常是由于代码不够高效、数据库查询优化不充分或者服务器配置不合理等原因造成的。
解决建议:- 使用合适的数据结构和算法来优化代码性能。
- 使用数据库查询优化技巧,如创建适当的索引、合理使用数据库缓存等。
- 配置合适的服务器硬件和软件,如增加内存、优化线程池等。
问题2:并发问题由于Java应用程序通常是多线程的,所以在处理并发问题时可能会遇到一些困难,比如线程安全问题、死锁等。
解决建议:- 使用同步机制(如synchronized关键字)来确保线程安全。
- 使用并发工具类(如Lock、ConcurrentHashMap等)来优雅地处理并发问题。
- 使用经典的并发设计模式来解决特定类型的问题,如生产者-消费者模式、读写锁等。
问题3:内存泄漏Java的垃圾收集机制可以自动回收不再使用的内存,但有时会发生内存泄漏,即一些无用的对象没有被回收造成内存占用过高。
解决建议:- 注意观察内存使用情况,及时发现内存泄漏问题。
- 使用合适的工具进行内存分析和调优,如Java自带的VisualVM或者第三方工具。
- 确保正确地释放和销毁对象,避免意外的对象引用。
问题4:代码质量问题写出高质量的Java代码是每个Java开发人员的追求,但有时可能会写出冗长、复杂或者难以维护的代码。
解决建议:- 遵循良好的编码规范和设计原则,如单一责任原则、开闭原则等。
- 使用合适的设计模式和设计思想来优化代码结构和可读性。
- 进行代码审查和重构,及时修复和提升代码质量。
总的来说,Java工作中会遇到各种各样的问题,关键是保持学习和不断积累经验,同时充分发挥Java强大的生态系统和工具支持来解决问题。
java开发坑点解析

java开发坑点解析
Java开发中可能遇到的一些坑点包括但不限于以下几个方面:
1. 内存管理,Java使用自动内存管理,但是开发人员仍然需
要注意内存泄漏和内存溢出的问题。
特别是在处理大量数据或者长
时间运行的程序时,需要特别注意及时释放不再使用的对象,避免
内存泄漏。
2. 并发编程,Java中的多线程编程是一个常见的坑点。
开发
人员需要注意线程安全、死锁、竞态条件等问题。
合理地使用同步
机制和锁是避免这些问题的关键。
3. 性能优化,Java作为一种解释型语言,性能优化是一个常
见的挑战。
开发人员需要注意避免过多的对象创建、避免不必要的
循环和递归等,以提升程序的性能。
4. 异常处理,Java中的异常处理是一个需要特别注意的地方。
合理地捕获和处理异常,避免出现未捕获的异常导致程序崩溃是非
常重要的。
5. 版本兼容性,随着Java的不断更新,不同版本之间可能存在一些API的改动,开发人员需要注意不同版本之间的兼容性,以免出现因为版本问题导致的程序不稳定或者不可用。
总的来说,Java开发中的坑点需要开发人员具备扎实的编程基础和丰富的经验,同时需要不断学习和积累,保持对新技术的关注和学习,以应对各种挑战。
同时,良好的编码习惯和团队协作也是避免坑点的重要手段。
希望以上内容能够对你有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、java基础(一)double b=1;double a=9.987;String s="Total price is:"+a+b;System.out.print(s); 根据运算符从左到右的结合原则,空字符串首先和x进行运算,得到一个字符串,这个字符串的内容就是“9.987”,然后,这个字符串再和数字y进行运算,此时得到一个由x 和y组合成的新的字符串:9.9871.0;(二)余数的正负取决于被除数;(三)按位左移(<<):向左移位,右边用0补充例:a=00000111,则a<<2的结果为:00011100按位右移(>>):向右移位,左边用最高位填充例:a=11010011,则a>>2的结果为:11110100无符号右移(>>>):用来将一个数的各二进制位右移若干位,最高位补0例:a=11010011,则a>>>2的结果为:00110100移位运算符性质:–适用数据类型:byte、short、char、int、long,对低于int型的操作数将先自动转换为int 型再移位–对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数–对于long型整数移位时a>>b ,则是先将移位位数b对64取模(四)条件与(&&)的逻辑功能和&一样,但如果根据运算符”&&“左边的表达式的结果即为false时)能确定与的结果时,右边的表达式将不被执行;“&”、“|”不会进行“短路”运算,而是会计算运算符两边的各个参数的值。
条件或(||):逻辑功能和|一样,但如果根据运算符”||“左边的表达式的结果(即为true时)能确定或的结果时,右边的表达式将不被执行。
注意:要注意&&和&,| 和||,在使用的时候,哪些需要被执行,哪些没被执行。
关系表达式1&&关系表达式2&&关系表达式3&&.....从左到右执行,只要有一个出现false,就立即停止执行,该关系表达式后面的关系表达式将不被执行。
(五)实线条表示这种转换不会引起信息的损失,而虚线条表示此种转换可能会引起信息损失。
在byte、short、char、int类型之间,只要发生运算,就会发生类型转换,都先转换成int类型;虽然不能将一个会产生int类型结果的表达式的值赋给byte类型变量,但是实际上,可以将整形常量值直接赋值给byte/short/char等“更窄”类型的变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
Char c1=12,这样赋值不存在问题,只是值改变了。
(六)隐式转换小-->大,强制转换(造型)大-->小(七)各整数类型和浮点数类型有固定的表述范围和字段长度,而不受具体操作系统的影响,以保证java 程序的可移植性。
(八)浮点类型在计算机中的表示是离散的。
在java中的编码方式是Unicode。
(九)在java程序中,变量分为局部变量和成员变量,其不同之处有:1、局部变量在用的时候必须初始化,而成员变量在用的时候不必初始化,因为系统对其有默认值;2、两者的作用范围不同;成员变量存储在堆内存里,是和对象共存的,而局部变量存储在栈内存里。
二、面向对象(一)基础概念1.产生对象的过程就是类的实例化,即实例化就产生一个对象。
面向对象的基本特征是抽象。
类存储在内存的代码区里,即一行一行的代码。
2.引用类型:在程序声明的引用类型变量只是为该对象起的一个名字,或者说是对该对象的引用,变量的值是对象在内存空间中的存储地址的首地址而不是对象本身,这就是称之为引用类型的原因。
3.局部变量:在方法或代码块执行时创建,方法或代码块执行结束时销毁,且在使用前必须初始化;在方法中,引用数据类型也是局部变量。
Public void myFun2() {This.myFunc1();//此处this不能换成具体的对象引用super.myFunc2();}4.成员变量:只要对象被引用,成员变量就将存在。
5.方法的重载(overload):是指一个类中有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同,方法的返回类型和参数的名字不参与比较,也就是说,如果两个方法的名字相同,即使类型不同,也必须保证参数不同。
重载的方法之间可以相互调用。
例如:构造方法之间可以用this([参数列表])进行相互调用,而其他方法和此类似;6.方法的重写(override):(1)在重写的过程中,需要提供和父类中的被重写方法相同的名称、输入参数以及返回类型。
(2)在重写的过程中,不能使用比父类中的被重写方法更严格的访问权限。
(3)只存在于继承关系中的。
(4)被重写的方法如果用private修饰,则子类就不能达到覆盖的目的。
(5)当父类的方法用static修饰之后,子类就不能对其进行覆盖,调用的方法由对象的类型决定。
(6)方法重写的特性是和对象相关的。
(7)重写的原因:子类的方法青出于蓝,而胜于蓝。
7.Break与continue常用在循环语句中,用于结束循环;而return常用于方法中,用于结束方法。
8.调用方法有new()的对象所决定,而不是由引用所决定。
9.封装:原因——为了保护类的属性不被外界随便访问或任意修改,达到保护的目的;定义——指的是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元的机制;具体实现——通过将数据封装、声明为私有的,再提供一个或多个公开的方法实现对该属性的操作。
(二)关键词1、修饰符(三个修饰符、四种程度的限制)(1)Default不是一个修饰符,它只是用来表示一种不加任何修饰符时的状态。
(2)仅供子类访问的属性或方法设置为protected。
(3)父类的私有属性和私有方法子类访问或者继承不到。
可以通过继承的公有方法进行访问。
私有的属性只有自己能调。
(4)Default只是内部的类之间能够访问,外界不能访问。
包内可用,包外不可用。
(5)子类和父类可以不在一个包内。
protected不在同一个包里的子类都可以访问。
(6)方法的覆盖——子类和父类的方法名和参数相同才可以覆盖,并且要求返回值相同。
子类的访问权限要求比父类要宽,否则父类的一些成员将不能被继承。
当子类方法的访问权限大于父类过后,子类就将父类覆盖了。
2、super(1)super 表示指向父类的对象的引用。
Super和this都是和对象相关的,不能存在于用static 修饰的方法中。
(2)可以通过super来调用父类的属性和方法。
(3)子类可以通过super调用父类的构造器,但是不能继承。
用Super()表示。
(4)当父类定义了有参的构造器后,就没了无参的构造器,除非自己显式定义。
Super()代表系统默认的无参构造函数。
其隐藏在其子类的构造器的第一行,因此父类必须要有无参的构造器来供子类调用。
(5)Super的追溯不仅仅限于直接父类。
3、this(1)指代对象本身this用于指代调用成员方法的当前对象本身,语法格式如下:this (2)访问本类的成员变量和成员方法①通过this可以引用当前对象的成员变量,调用当前对象的成员方法。
语法格式如下:this.成员变量this.成员方法([参数列表])②当声明一个类的多个对象时,使用this只是指代对象自己,而不会影响其他对象。
③当没有同名成员时,在当前类的方法体中,this引用可以省略。
④当成员方法的参数与成员变量同名时,在方法体中,默认是参数,此时需要使用this 引用成员变量,this不可省略。
(3)调用本类重载的构造方法注:在构造方法中,this()引用必须是第一行语句。
4、static(1)Static关键字声明的变量只和类相关,和对象无关,存在内存的数据区里,所有对象可以操控它,是公有的。
可以通过对象名.静态变量名或者类名.静态变量名进行访问。
通常用类名.静态变量名进行访问。
用static声明的变量也叫类变量。
(2)用static修饰的方法,不需创建对象就可直接用类名.方法名对其进行访问。
主函数就是这样的例子。
(3)在没有创建对象的情况下,类成员方法不能调用实例成员变量和实例成员方法。
因为实例成员变量只有通过创建对象后才能对其进行访问(4)static不能修饰构造器,因为static修饰的是与类相关的,而与对象无关,但是构造器却是用来创建对象的。
(5)在类成员方法体中,不能使用this引用。
因为this引用存在于对象中的,而类成员方法与对象无关。
且在java,不能声明方法的局部变量为static,因为局部变量存储在栈内存中,而静态变量存储在数据区里,造成在定义这种变量的时候,系统无法弄清其存储位置。
(6)自由块(游离块)存在于java类中的在方法体和构造器之外包含一段用“{}”括起来的代码段,这个代码段称为“自由块”或者“游离块”。
自由块可以看成是一种特殊的方法,这个方法没有方法名、没有输入参数、没有返回值,不能进行方法调用。
静态自由块通常用于初始化静态变量。
(7)自由块(游离块)是和对象相关的,在main方法中执行的,且在每次构造对象的时候执行,且执行在构造方法之前。
当用static修饰后,自由块是在main方法之前执行的,且只执行一次。
(8)自由块(游离块)是用来初始化变量的。
(9)程序块是用{}括起来的代码块。
它是一个单独的模块,和方法有点类似,但不像方法一样可以用方法名调用。
在这个程序块中的变量也是局部变量,即使这个程序体处于类的定义中。
5、单例模式(单子模式)6、包(1)注意包的层次结构,例如存在包:java.awt与java.awt.color包,虽然前者包括后者,但是在进行包的引入的时候要注意其指代的内容不一致。
(2)在引入自己创建的包,需要设置环境变量(classpath里面设置的是包的路径,因为类和包是一个整体),但只需设置到创建的包目录的上一级目录即可。
(3)我们在用UltraEdit软件编程的时候,才需自己手动设置环境变量,而用MyEclipse的时候是软件帮我们解决的。
(4)创建的包和类是一个整体(5)为了避免命名重复,实现对java文件的区别和管理,需要创建包。
(6)在引入包的时候,一旦该包所在的路径存在和目标类文件同名但不同扩展名的相关java程序,执行时将会因为选择而冲突,进而报错。
7、继承(1)继承是为了实现代码的可重用性,特点:单继承(2)初始化顺序:先属性(包括静态属性和非静态属性)后自由块再构造方法或者先自由块后属性再构造方法(和属性、自由块在类中的位置有关),先静后非静,先父后子(3)子类在创建对象的过程中,已经包括了父类的对象。