无指针,不java——40岁偷练java之内功心法(3)

来源:互联网 发布:杭州php学费多少 编辑:程序博客网 时间:2024/06/10 09:06

1. 指针的本质

    指针的本质是地址。 变量按存放的数据不同,可分为两大类,一类是直接存放数据的,另一类是存放数据所在地址的。后一种变量就叫指针变量。

 

2.有人说java中没有指针

    只要理解了“指针的本质是地址”这句话,答案就很明确了。C定义了一个指针“int *p”, java说,我的也定义一个“Integer p”,我的p就相当于你的*p。我是不是比你简单,我是不是比你好用?此话很差矣,我看也没简单,也没好用,当然也没复杂,也没难用。java的p不叫指针,但是叫引用对吧,引用只是指针的一个不同叫法而已,用赵老的话说:换个马甲我就不认识你了? 指针无处不在,java也不例外。

 

3. *、 &、数组  风马牛不相及吗?

    在c语言中,*用来声明指针变量:

    int *p; //定义一个整型指针变量p

    p=&q; //取变量q的地址(假设q是个已声明的整型变量),并把所取地址赋给p,&为一目运算符,意为“取地址” int q   [10]; //定义一个整型数组q

     p=&q; //这是非常不对的,因为数组本身已经是指针类型,即数组变量是一个在声明时不需加*的指针变量,此处p=q即可,即表示把q的值(q的值是数组的首地址)赋给p.

 

     而对于java,就没有这些乱七八糟的事了,java除了基本类型外都是引用类型,换句话说,除了基本类型外其它全是指针了。需要注意的还是数组,java中的多维数组与c、c++中的多维数组是不一样的。java中的多维数组是数组的嵌套,举个例子来说,java 中的二维数组,就是由一维数组组成的数组,而且这个一维数组的长度还可以不一样,一定要注意。另外就是在java 中进行数组的复制时,一定要深刻理解复制的实质,搞清楚是深层复制还是浅层复制。(关于此问题后面将专文讲述)。

 

4. 货比三家,参悟指针一个不错的方法

    将java,C,C++,C#中关于指针的定义、用法,统一地拿出来进行一下比较学习,是一个不错的学习方法,不但可以加深理解指针的内涵,更有可能使自己可以在以后的项目中不管是什么语言写的,都能见鬼杀鬼,极大增强内功层级。台湾碁峰的一本书“指针的艺术”挺不错,这是我见过的把几种语言的指针一起拉出来讲的书。这本书将有可能会在10月份在万水出简体中文版,值得期待一下。

 

5.得指针者得天下

    编程语言的难点,我感觉还是在指针这一块,指针吃透了,就仿佛能够看到数据及代码在内存中的栖息和活动场景,可以极大地提高编程素养,减少不可预知的bug。指针吃不透,项目中将处处碰壁,写代码往往也不敢下笔。而吃透了指针,写代码时将下手如有神。 对于面向对象的java来说,当然更是——无指针,不java。

 

学编程如果不懂分析设计与建模,那永远是苦力。《大象-thinking in UML》是迄今为止最好最好最好最好的讲分析设计与建模的好书。http://www.china-pub.com/129881