Java初学笔记(一)变量及其内存机制

来源:互联网 发布:在线订单系统 源码 编辑:程序博客网 时间:2024/05/19 18:39

小菜鸟我最近开始决定认真学一学Java基础知识。

大学的时候开了这门课程,不过是选修课。而且当时对C/C++的执着导致我天真的完全对Java“鄙视”与忽略。现在看起来是多么天真,曾经和很多浮躁、无知的人一起鄙视用Java的程序员,然后才知道自己是多么无知,以至于忽略了近代几乎最伟大最有争议的、却集中了人类在计算机编程语言方面无与伦比的智慧结晶——Java语言。

 

而JAVA的创始公司 sun公司,无疑是公认的一流技术三流营销。对于该问题的讨论已经太多,在此不多复述。

 

Java 对于变量最大的特点就是 安全使用、垃圾收集。

对于写惯了C/C++的程序员来说,首先是极其不习惯的一堆new(找不到delete与其对应……),然后是用起来惴惴不安(因为不需要考虑释放内存。。)

 

其实从根本上来理解Java,会发现这个设计真的很巧妙。(呵呵,不过我也承认,该技术造成了编程难度下降导致C/C++程序员就业空间大幅度缩水)

 

与传统的C/C++虽然语法很像,但是变量在理解上还是有许多区别的。

 

如直接 new出来的对象实例,比如 ClassX obj = new ClassX() ,其数据是分配在堆上。而obj只作为其一个交互的句柄,不代表任何的内存实例。假设在C++中 ClassX obj2=obj,则会调用类的默认拷贝构造函数,造成一次具体内容的拷贝。但在Java中只是令另一个句柄obj2指向了句柄obj指向的内容。

 

而释放该堆内存的机制则是 垃圾回收器 自动检测,当该堆内容“不再被任何调用”后释放。我觉得是编译器(或者预编译器)在处理过程中就有类似“向后追溯”调用记录的统计来实现这个功能 —— 真是简单而又天才的想法。

 

理解了这层概念之后,我也可以放心的在Java里new了。