第1页共1页Java学习笔记及其与C++的比较目录0.问题1.Java特性1.1语法与词汇1.2类型、值、变量、表达式1.3Java类与对象1.4继承与多态1.5命名控制1.6抽象类、接口和内部类1.7异常处理1.8包容器类1.9JavaI/O1.10多线程编程1.11JavaWindows编程2.Java与C++的一般性比较3.对参考文献的评价4.附录4.1Java基本包功能描述4.2JavaRuntimeException和Error类的继承类4.3Java常见的Input/Output类和使用方法4.4Java包容器类列表4.5Java常见Windows组件5.参考文献第2页共2页0.问题Java中有模板吗?Java中如何实现类似模板的功能?Java没有多重继承,如何实现多重继承的功能?Java中各种主要数据结构的实现与C++有什么区别?Java的设计思想与C++有什么重要区别?Java相对C++有什么优势与弱势?在Java中抽象类和接口类有区别吗?在各个重要特性上Java与C++有什么重要区别?什么时候该选择Java作为开发语言,什么时候该选择C++?Java中static定义与C++中有区别吗?什么是Java类的Persistence?为什么Java程序是可移植的?Java中如何控制名字空间,与C++有什么不同?Java中定义literalstring,什么时候用==比较时返回true?什么时候返回false?Java舍弃了C++中的什么?增加了什么?Java中的引用与C++的引用有什么区别吗?Java的finalize方法起什么作用?AWT与Swing有什么不同?Swing与JavaBeans有什么联系?在Java中ASCII码与Unicode的关系如何?Applet与普通Windows应用程序有什么不同?什么是Javabeans?为什么需要Javabeans?怎样实现businesslogic与UIlogic的分离?如何实现两者之间的信息传递?Jar的用法如何?如何在Java中实现C/C++之const常量?Java中的final与C/C++中的const有什么不同?Class与interface有什么区别?接口(interface)与抽象类(abstractclass)有什么不同?什么时候使用interface?什么时候使用abstractclass?Javaclass中默认(即不加public,private或protected控制关键字)的控制属性是什么?Linux中的gcj和gij命令如何使用?与普通的javac与java命令有什么区别?Java中有无符号整型吗?Java中的byte和char类型有什么区别?Math类中有哪些方法可用?什么是numericpromotion?有什么用?哪些类型转换是不要显示申明的?哪些需要?哪些转换可能是危险的?哪些没有危第3页共3页险?java.io.Serializable和Cloneable类有什么用?什么是FP-strict表达式?什么是FP-strict类?Object类在Java中有哪些重要作用?Interface类在什么时候需要使用?如何使用已经有了package1Class1,可以定义packagepackage1,classClass2来使Class2对Class1有包访问控制吗?Java的类与C++的类有什么不同?使用方法有什么不同?Java中的protected关键字什么时候非常有用?Java的protected与C++的protected有区别吗?Java中如何实现多态?用基态的引用如何知道派生类的类型?如何使用派生类的方法和变量什么是设计模式(DesignPatterns)?设计模式有什么用?如何实现对象之间的信息传递?如何完成对象之间的通信?如何设置类中各部分的权限?哪些应设为private?哪些应设为public?哪些应设为static?哪些应设为final?Java中有内联函数吗?如何保证存取函数的效率?Java中有运算符重载吗?如何实现运算符的重载?如何设计package?Abstractinterface和non-abstractinterface有什么区别?哪些方法应定义为abstract?哪些不应定义为abstract?Java方法内参数传递是按值还是按引用传递?f(Xx)相当于C++的f(constX&x),f(X&x)还是f(Xx)?如何实现按引用传递?如何实现按值传递?Java中允许按返回值重载吗?JavaException机制的特点?与C++的区别?Java中Exception的分类?怎样区别使用throws和throw关键字?Java如何运行一个程序?如何将Java的.class文件变成与操作系统相关的可执行文件?可以不用装JRE就可以使用吗?为什么说Java是一种多线程的语言?多线程处理是如何内置于Java语言中的?关键字instanceof的作用是什么?Java中如何得到一个引用具体指向的类类型?Java是纯粹面向对象的语言吗?为什么?Java中有拷贝构造函数吗?如何实现拷贝构造函数的功能?为什么在Java中类似C++构建拷贝构造函数会产生问题?如何防止对象被拷贝第4页共4页对于Java编程有什么常见建议?Java程序的一般命名规则如何?Java中有哪些集合类?各适用于哪些应用?Java中有哪些包容器类?什么是hashcode,在Java中有何作用?如何编写高校的hash函数?System.out和System.err有什么区别?在Java中如何播放声音文件?javax.sound.midi包如何使用?Java中如何创建目录?如何创建文件?如何写文件到指定目录?怎样持久化一个对象以保持一个对象的目前状态?什么是对象的serialization?serialization对对象做什么工作?如何实现对象的串行化?什么是regularexpressions?如何使用?它可以完全代替以前的StringTokenizer类吗?什么是thread?thread与process有什么区别与联系?不同thread之间如何进行通信?什么时候需要多线程编程?threadName.join()实现什么功能?已经继承了某类的类不能在继承Thread类,如何实现多线程功能?JPanel,JFrame,JApplet有什么不同?什么是Ant?Java的Wrapperclasses有什么用?什么是Reflection?有什么用?JVM怎样装载类?Java的String类与C++STL中的string类使用上有什么区别?第5页共5页1.Java特性1.1语法和词汇Java的语言是在C++基础上发展起来的一种面向对象的高级语言,它的语法基本是继承了C++的语言,但有以下几点值得注意:C语言是函数的集合。C++兼容C,既有函数,也有类。C++可以实现面向对象编程,但是仍然离不开一个非对象的main主函数。这也是初学C++者常常会感到费解之处。他们虽然理解了C++的语法,但是不知道怎样实现面向对象编程。事实上,如果将C++当成更好的C使用,其实本来就是面向过程的语言。只有利用面向对象的思想,使用面向对象的特性进行编程时,它才是一种面向对象的语言。Java是比C++更纯的面向对象的语言1。Java程序是类的集合,程序的执行进入点是某一个类的publicvoidstaticmain()方法。正因为Java程序是类的集合,Java类定义后并不需要“;”(C++中类后面忘记加“;”有时是个会害死人的Bug!)。Java没有goto语句,虽然Java可以用带标号的break,continue语句实现跳转,但是跳转的范围是有限制,它不像C/C++那样可以随意跳转。Java语言中boolean变量是一种单独的特殊的变量,它只有两个值:true,false。并且boolean变量不能与整型变量相互转换。逻辑操作符AND(&&),OR(||)和NOT(!)在Java中只能作用在boolean变量上。C的布尔变量是用整型代替的,ANSIC++虽然发展出bool变量,但是可以用整型代替,也可以与整型相互转换。因次if(a==b)错写成if(a=b)的错误将被编译器发觉。Java中相对C++增加了无符号右移运算符(,=)。Java语言使用的字符集是Unicode字符集,Java用\uxxxx来标识一个Unicode。标识符名没有长度限制,而且可以使用绝大部分Unicode字符。标识符第一个字符是Character.isJavaIdentifierStart方法对之返回true的字符。Java语言提供了一种用Unicode编写的程序向ASCII转换的方式,以便能为基于ASCII的工具处理(\uxxxx变成\uuxxxx,而非ASCII字符转换为\uxxxx)。C++使用ASCII字符集,标准C++标识符可识别的长度为32。特别的字符包括\b(BS),\t(HT),\n(LF),\f(FF),\r(CR)\”(双引号),\’(单引号),\\(反斜杠)。String类型是Java语言默认包含包java.lang中定义的类型,可以直接使用。Literalstrings何时指向同一对象值得注意:(1)literalstrings在同一包里,无论属于同一类,还是不同类,都指向同一String对象;(2)在不同包不同类的literalstrings也指向同一对象;(3)在编译期间通过常量计算表达式出的String仿佛是literalstring(“hel”+”lo”==”hello”)1但是Java也不是纯粹的面向对象的语言,后面会对此做出解释。第6页共6页(4)运行时计算出的strings是新建的,所以是不同的(Stringlo=”lo”,“hel”+lo!=”hello”)。(5)显式用intern()方法变换的String与预先定义的相同。(6)使用newString()方法定义的对象与literalstring不同(Stringa=”abcd”,Stringb=newString(“abcd”),a与b是不同的)。Java的String是java.lang中定义的,可以说是内置的,而C++的string是STL中引入的,注意C++是用string而不是String。Java的String不可改变,要改变必须使用StringBuffer。C++中string相当于Java的StringBuffer。位操作运算符(bitwiseAND(&),bitwiseOR(|),bitwiseXOR(^))都可以作用在boolean量上,但是位操作NOT运算符(bitwiseNOT(~))不能作用在boolean量。对于boolean量,位操作运算符的产生的结果是与逻辑运算符一样的,但是它们不shortcircuit表达式(逻辑运算符只要得到结果就不往后计算)。表1.1Java与C++的比较1(语法和词汇)项目JavaC++字符集UnicodeASCII,其它语言支持是附加的。标识符不定长。第一个字符可使用任何Unicode字符规定字符(第一个字符必须是字母或下划线,变量名中只能使用字母、数字和下划线),标准C++未规定标识符可识别长度(可识别长度随系统而定,但一般不要超过32个字符)。关键字特殊:boolean,abstract,extends,final,finally,implements,import,Interface,package,native,strictfp,synchronized,throws,transient(true,false,null)2(const,goto)3extern,register,sizeof,struct,union,bool,delete,friend,inline,virtual,operator,template,typedef操作符同C++,另加,==,,,!,~,?,:,==,=,=!=,&&,