“纯”面向对象

声明:本文是我在看到 “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. 希望一两年后我再看到这篇文章时会觉得自己很幼稚很可笑。

原文地址:https://www.cnblogs.com/niuxichuan/p/5241181.html