作为问题所述,C++程序员转向Java时会面临哪些常见/重要问题?我正在寻找一些广泛的主题名称或示例以及工程师每天需要做出的调整。然后我可以进行深入阅读。
我特别关注那些多年来一直在C++中工作并不得不使用Java的工程师的意见,但其他人的建议甚至是书籍推荐也非常受欢迎。
我特别关注那些多年来一直在C++中工作并不得不使用Java的工程师的意见,但其他人的建议甚至是书籍推荐也非常受欢迎。
相反,请使用此模式:
OutputStream os;
try {
os = ...
// do stuff
} finally {
try { os.close(); } catch (Exception e) { }
}
你最终会经常做那样的事情。
当想要创建一个拷贝构造函数时,不小心创建了一个引用:
myClass me = new myClass();
myClass somebodyElse = me; /* A reference, not a value copied into an independent instance! */
somebodyElse.setPhoneNumber(5551234);
/* Hey... how come my phone doesn't work anymore?!?!? */
既然您提到了书籍推荐,一定要读 Effective Java, 2nd ed. ——它涵盖了大部分答案中列出的陷阱。
适应使用垃圾回收器。无法依赖析构函数清理GC未处理的资源。
所有内容都是按值传递,因为传递的是引用而不是对象。
除非需要克隆,否则没有复制构造函数。没有赋值运算符。
默认情况下,所有方法都是虚拟的,这与C ++相反。
明确支持接口 - C ++中的纯虚类。
Java中没有对象,只有对对象的引用。例如:
MyClass myClass; // no object is created unlike C++.
MyClass myClass = new MyClass(); // Now it is a valid java object reference.
这些小小的语法差异让我感到困惑。缺乏析构函数。
另一方面,能够为每个类编写一个主函数(非常有用的测试工具)真的很好;当你适应之后,使用JAR文件的结构和技巧非常方便;而且,语义完全定义(例如,int在任何地方都是相同的)也非常好。
我最大的问题是时刻记住内存的所有权。在C++中,这是必须做到的,并且会在开发者的思维中形成一些难以克服的模式。在Java中,我可以忘记它(至少在很高的程度上),这使得一些算法和方法在C++中极其笨拙。