最近突然对java产生了兴趣,学习的过程中记下学习笔记
java深化了对象的概念,除了基本类型,一切皆类,即使是基本数据,也可以包装成对象。
java限制了重载,只有在string类中使用了‘+’和'-'的重载,并且禁止用户自己定制运算符的重载。
java中数组是一种类,而不像c/c++中那样,是一段内存。
类中的main函数默认为静态的。
c++中初始化和清理是很重要的步骤,所以刚接触java的时候对于初始化和清理这一块总感觉有点怪怪的,可能是以前没接触过垃圾回收机制。java中的构造器可以通过this指针调用其他构造器,这就可以最大限度的使用默认构造器了便捷,以前在使用c++中没有使用过类似的技巧,以后有时间可以研究一下。java中初始化基类对象没有使用初始化列表,而是在构造器中使用supper()对基类进行初始化。关于清理,java引入了垃圾回收机制,但是垃圾回收器只知道释放由new申请的内存,而对于不是由new申请的内存如何清理呢?java允许在类中定义一个finalize()方法,但是finalize()不是c++中的析构函数。也就是说调用finalize()后对象可能不会被析构。垃圾回收只与内存有关,当内存用尽的时候垃圾回收才会去回收内存。
有一点需要指出,java类内部中的变量的初始化要早于方法的初始化,无论这个变量是否放在方法后,而变量的初始化顺序取决于变量的先后顺序。静态数据的初始化,因为静态数据只占用一份存储域,所以他无法是局部变量。
java中取消了多重继承,避免了菱形集成的问题,但是也相应的减少了编程的灵活性,而所有对象都集成自object类,所以所有的java类本质上都是一种类。这就让我想起了我们在做的项目,虽然它是在c++上做起来的,但是使用了单根继承。有时间应该研究一下单根继承的好处。