声明:本文是我在看到 “Java中一切皆对象” 之后的联想,我还专门到知乎上提了这个问题:看书看到Java里面说,Java的一切都是对象,难道八大基本数据类型、函数、数组都是对象么?还有为什么说Java是纯粹面向对象的语言,C++就不是,是因为C++的基本数据类型不是对象么?还是从C那里继承的面向过程的思想?
因为我现在的知识尤其是实践知识还很欠缺,所以这篇文章大多是我的浅薄之见,您看了笑笑就好。
由这个问题我还联想到以后在编程实践中应该怎么做,以及一些人生哲学道理。
1. 为什么C++不是纯粹的面向对象编程语言:
1) main函数不在任何类里面。
2)基本的数据类型也不是对象(不像Java有基本数据类型的包装类)。
3)友元会破坏封装性。
4)支持独立的函数,数据,即过程化编程。
5) 存在全局变量和全局函数。
6) C++要向后兼容C,所以肯定会支持面向过程的编程,此外,还支持基于对象和面向对象。
参考:http://blog.csdn.net/wind19/article/details/7417544
2. 为什么Java说自己是完全面向对象的语言:
就我现在的理解:Java的程序是由类组成的,不管干什么你得先有个类;然后Java的八大数据类型也是有自己对应的封装类的。
但是很多大神说了,Java并不是纯粹的面向对象编程语言。我有点方。
其实后来想想,Java这门语言你才接触几天啊,想那么多干嘛,被理论牵绊住,实践就会大打折扣。还是踏踏实实多敲代码吧。
3. 究竟怎样才算完全(纯粹)面向对象的语言:
参考:http://blog.csdn.net/wind19/article/details/7417544
4. 感想:
我发现我学习编程过于在意理论的表述了,毕竟实践才是检验真理的唯一标准,编程是一门动手能力要求很强的学科,多敲代码才是王道。
就像这句话:“Java中一切皆是对象”,或者看Python视频里也说Python中一切都是对象,其实就像某些人所说,这些其实都是这些语言打的口号而已,
很多话是经不起推敲的。试想,Java是从C++发展而来的,当初语言的设计者肯定是先想到从C++中继承数据类型这个说法,还有main函数,这些在当时肯定
都是自然而然的,谁能想到把数据类型直接设计成对象呢?谁能想到后来它们会成为Java一切都是对象口号的瑕疵呢?
还有就是C++它爹说过:不要过于追求细节,以免被它灼伤。其实某种意义上这个世界上是不存在完美无缺的事物的。何况是人类创造出来的编程语言。
完美是不存在的,我们必须有容忍瑕疵的能力。
所以以后学习编程之路上:第一,实践永远是第一位的,一定要多敲代码!第二,不用过于在意细节问题,不用太在意理论体系的完美,因为很多时候你在纠结于
细节、纠结于理论的瑕疵的时候,已经严重阻碍了你进步的脚步。
最后,面向对象仅仅是一种思想而已。编程时思想很重要!
每种编程语言都有它的优点和局限之处。
5. Java中数组的存储:
我知道了,Java中有八大基本数据类型:byte,short,int,long,float,double,char,boolean。然后有三大复合数据类型:class,interface,array。
对应的变量也分为基本数据类型变量和引用变量。
其中声明和创建一个数组的过程:int[] args; args = new int[5];(args即是引用型变量)
Java程序的存储其实分为两个部分:栈存储区和堆存储区。
所以声明数组时数组名 args 是存储在栈内存中,声明的时候并没有为数组成员分配内存空间。而在创建数组的时候,才通过new运算在堆存储区中
申请了数组成员的存储空间。然后栈中的数组名就有了值——数组成员的存储首地址。注意:数组成员分配空间时还会为length分配存储空间。
从这个意义上来讲:数组名其实就是Java语言中的指针!! (但是在Java中却叫引用型变量)
ps:注意区别和C++中的数组的存储以及数组名的含义。
6. 希望一两年后我再看到这篇文章时会觉得自己很幼稚很可笑。