本来不准备看JAVA的,不过,看到简历许多部分都涉及到了J,为了不至于阴沟里翻船,还是瞄他一瞄。与C++对比着看。主要参考<C++与Java对比编程>。Thinking in Java就不看了,太长太裹脚。
1.Java方法覆盖(override)限制
a。子类覆盖方法的返回值类型必须与基类方法的返回值一致。比如像基类方法定义为public float fun();,子类方法定义为public double fun(),编译器将不会接受这样的代码。如果返回类型是引用类型,则覆盖方法的返回类型可以声明为基类方法声明的返回类型的子类型;如果返回类型是基本类型,则覆盖方法的返回类型必须和超类方法的返回类型相同。C++里也是这样。
b。覆盖方法的访问限制不能比基类被覆盖方法的访问限制更严格。比如说,基类访问限制为protected,子类可以为public或者protected,但不能为private。和C++不同的是,JAVA中类的私有方法是不能被覆盖的,也就是说,被private修饰的方法不具备多态行为。在C++中,基类虚拟函数的访问控制对子类的覆盖定义没有任何影响。
c。子类中一个覆盖的异常说明必须是基类中被覆盖函数的异常说明的一个子集。 比如如下的例子:
class E1 extends Exception{}
class E2 extends Exception{}
class A
{
public void fun() throws E1{}
}
class B extends A
{
public void fun() throws E2{}
}
编译器给出错误提示: Exception E2 is not compatible with throws clause in A.fun()
C++对覆盖函数的异常说明也有类似的限制。另外需要注意的是,子类不抛出任何异常是可行的。因为空集是任何集合的子集。
2.Java容器类
比较之一:ArrayList, LinkedList, & Vector
ArrayList的内部实现是基于内部数组Object[],所以它更象一个数组,但LinkedList的内部实现是基于一组链接的记录,所以,它更象一个链表结构。这就像C++中Vector与List的区别。当需要较多的随机访问,并且在尾部进行数
据添加于删除时,用ArrayList更佳,当你需要更多的是在链表中间插入删除数据时,用LinkedList更好。Vector非常类似ArrayList,但是Vector是同步的。
PS:Stack继承自Vector
比较之二:Hashtable & HashMap
Hashtable的方法是同步的,而HashMap的不是,并且允许null
类层次关系:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
Java容器算法在类Collections中。Collections与Collection不同。前者是一个实现算法的类,后者是一个定义了集合的接口。
3.Java I/O
相对C++而言,JAVA的IO操作对象数量有点多。包括字节流,字符流,管道流,对象流,而且,java为每种情况单独提供一个类来进行处理。C++流在缺省情况是进行缓冲的,而Java则不是。但是Java可以通过构造缓冲数据流来处理。另外,Java所有的整形和浮点数都是以大端字节序进行输出的,与底层平台无关,因此可移植性更好。相对c++,Java还提供了对象流,可以直接对序列化的对象进行读写;这种对象流可以在网络中传输。
Java IO流大量采用了Decorator模式,典型的构造一个流的过程如下:
DataOutputStream os = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("out.txt")));
在不同的类层次依次实现不同的功能。
按输入输出的格式可以分为两个基本的类型:
字节流:基类为Outputstream和Inputstream,其子类全部为字节流
字符流:基类为Writer和Reader,其子类全部为字符流
其他的常见的文件IO,管道IO,数组IO都可以继承自以上四个类的任意一个。比如文件流:分别继承上述四个类的子类为FileOutputstream,FileInputStream,FileWrite,FileReader。字节流对应数组为ByteArrayOutputStream和ByteArrayInputStream,字符数组对应的是CharArrayWrite和CharArrayWriter。另外,比较特殊的是对象流,对象流只能继承自字节流,因为其是按字节进行操作的。另外这个四个基本类型都有提供缓冲功能的子类型。
4.在Java中,多个构造函数可以通过this(variable list)互相调用。而C++不行。
5.Java数组是一个对象。这个与C++有非常大的不同。Java数组是类类型,也就是说,可以关联相关的数据成员。比如说,可以通过 array.length 来获得数组的长度。另外,Java数组成员访问是是进行下标检查的,越界将抛出IndexOutOfBoundsException异常。
6.Java里面实现Thread非常的简单。继承Thread类或者实现Runnable接口即。对函数同步也非常简单,加一个synchronized修饰即可。Thread类提供了一些列简单的函数来操作线程,start,stop,resume,sleep等之类。但是在实际中用这些还是感觉会有点点莫名其妙,因为会时不时的抛出一些InterruptedException,也许当时水平还不够的~~只是会用,而不清楚内部机制~~不知道现在再写这些,会如何?
7.Java网络通讯功能非常强大。基本上对本地文件进行IO的数据都可以进行网络IO,这其中包括序列化的对象。只要让对象实现Serializable并提供一个序列号,就能在网络上进行传输。网络通讯中常常会用到多线程技术,两者结合功能强大得让你惊讶的同时也会出现许多莫名其妙的问题~~
8.Java类库设计用到了大量的设计模式。IO流用到了decorator;Adapter在swing包中大量采用,比如WindowAdapter,KeyAdapter等;Cloneable是Prototype思想体现;抽象类本身就是Template;Java库中提供了Observer类来实现Observer模式,Java的Collection的子类中对象的遍历都是Iterator模式~~等等~
分享到:
相关推荐
开源项目让你也可以尝试玩转工业物联网以及智慧工厂(智能制造),IOT开源网关、SCADA取数开源、PLC...适合人群:新手及有一定经验的开发人员综合参考详情https://blog.csdn.net/weijia3624/article/details/127923230
details.java
开源项目让你也可以尝试玩转工业物联网以及智慧工厂(智能制造),IOT开源网关、SCADA取数开源、PLC数据采集 java与Omron Fins通信 java与欧姆龙PLC通信 ...https://blog.csdn.net/weijia3624/article/details/127923230
ApiInfoModel.java ## Api类 ExcelUtills.java ##操作excel的类 HandlsUtils.java ##根据judge分发不同的judgeEvent HttpClientDemo.java ##模拟post 和 get 方法 JudgeEvent.java ##各种校验方法,比如...
本工程为MyEclipse创建的java工程,用于探索如何将文本转换成语音。 本工程编码方式:UTF-8 参考http: 7个开源的TTS(文本转语音)系统:http://blog.csdn.net/gaohuanjie/article/details/22647159 3个开源TTS...
java编写的ATM模拟程序,GUI界面,连接Mysql数据库,实现了管理员界面(增删改查),用户界面(取款,存款,查询,安全退出,修改密码,转账,查询记录,导出记录),详情请看我的博客 ...
使用详情见博客:https://blog.csdn.net/weixin_38500202/article/details/110087106
在我上一篇博客地址链接:https://blog.csdn.net/weixin_45736927/article/details/104696428 第四步 Token和工具类准备完毕,写人脸对比代码 2张对比图片 FaceMatch类 import java.util.ArrayList; import java.util...
https://blog.csdn.net/Hello_World_QWP/article/details/80654536 jar包中的版本具体如下: (如果没有兼容的版本,建议不要下载) mysql-connector-java-5.0.5.jar mysql-connector-java-5.1.6.jar mysql-...
最近在研究处理java写modbus RTU通信,分别使用几套工具,模拟modbus从站、模拟串口等才能正常在电脑测试成功。 全开源,放心下载 可以查看运行内容https://blog.csdn.net/weijia3624/article/details/121216539
该项目是一款基于Java的MihonLocalHelper漫画管理工具源码,涵盖54个文件,包括23个XML配置、10个WebP图片、6个Java类文件、3个Git忽略配置、3个Kotlin配置文件、2个属性文件、1个授权协议和1个JAR包。该工具专注于...
为了更深入地学习和实践,可以参考提供的博客地址:[http://blog.csdn.net/iberr/article/details/40895453](http://blog.csdn.net/iberr/article/details/40895453)。在这个博客中,作者详细介绍了如何从零开始配置...
In addition to the most thorough coverage of Java 3D available, Killer Game Programming in Java also clearly details the older, better-known 2D APIs, 3D sprites, animated 3D sprites, first-person ...
* 项目名:Java课程设计——饭卡管理系统(JavaSwing、JavaFX、MySQL) ...* 源文章及其效果见: https://blog.csdn.net/qq_46079439/article/details/121029506 * 有疑问或其他需求联系作者,谢谢。
给你一个下标从0开始的字符串details.java
支持单数据读写,多数据读写,大数据量自动分包读写 支持序列化批量多地址且地址不连续的读写 支持读取DB区,I区,Q区,M区,V区 支持读取西门子S1200,...https://blog.csdn.net/weijia3624/article/details/116270213
Get up to speed on language details, including Java 9-11 changes Learn object-oriented programming, using basic Java syntax Explore generics, enumerations, annotations, and lambda expressions ...