Thinking in Java学习笔记(三)(zt)

转载 2004年08月26日 11:02:00
?
第三章?? 控制程序流程
???在java的世界中,对象和数据的处理是通过运算符,而选择和判断则是靠控制语句来实现的
???使用java运算符
?????运算符的2个用处,1、运算符接受引数,并且产生新值,例如 int a=1+1;2、运算符也可以改变操作数的值 例如 i++;
?????大多数的运算符都是可以作用与基本数据类型之上的,但是=、==、!=是例外,他们可以作用于任何对象之上。
?????优先顺序
???????这个其实我自己也很头疼的!所以我向来不记什么运算符的优先顺序,在搞不清楚的地方就加上括号,这样不但你自己看起来很明了,出错率也低,别人来看你的代码也是能清楚明白的
?????赋值和指派
???????赋值的意义是取得运算符右边的值(任何常量、变量、能产生数值的表达式),并将该值传递给左边,使用运算符=号因为基本数据类型存储的是实际的数值,并非句柄(也可以理解我c++中的指针),a=b;这句是把b这个具体数值传递给a这个变量,当你改变a的时候,b这个数值并不会随着你的a的改变而改变,但是当你操作对象的时候就容易出现和上述现象相反的事情。当你在操作对象的时候,实际上操作的是对象的句柄,当你把某个对象指派给另一个对象时,
???????实际指派的是句柄,例如
?????????class one
?????????{
??????????int i=0;
?????????}
?????????class two
?????????{
???????????public static void main(String args[])
???????????{
?????????????one o1=new one();
?????????????one o2=new one();
?????????????o1.i=10;
?????????????o2.i=20;
?????????????System.out.print("o2.i="+o1.i);
?????????????System.out.println("o2.i="+o2.i);
?????????????o1=o2;
?????????????System.out.print("o2.i="+o1.i);
?????????????System.out.println("o2.i="+o2.i);
?????????????o1.i=30;
?????????????System.out.print("o2.i="+o1.i);
?????????????System.out.println("o2.i="+o2.i);
???????????}
?????????}
???????class one在two中被创建2个对象,并且分别回被赋值为10 和20。输出当然就是10和20,接着把o2指派给o1,输出肯定是20 和20,但是奇妙的事情在第3次赋值的时候产生了,当我们把o1.i的值改为30的时候,发现为什么我们的o2.i也变成30了?我们并没有改变他的值啊!这是因为o1和o2中都含有同一个句柄,原先的o1所存储的句柄被覆写了,地址指到了和o2一样的内存空间,而他原先的指向的那个内存空间在适当的时候回被垃圾回收机制给回收了,其实这个过程就发生在我们以为不会有问题的第2次赋值中!以上的现象就叫做别名现象,这个在Thinking in Java的附录a中有专题讲到!如果我们不想发生这样的事情,我们可以使用o1.i=o2.i这句话来进行第2步,这样的写法可以保证2个对象的相互独立,但是这个并不是一个好方法,这样直接操作对象内的数据会导致混乱,并且和oop的思想相违背,更好的方法在附录a中有。
调用函数时的别名问题
???????????class one
???????????{
????????????int i=10;
???????????}
???????????class two
???????????{
????????????static? void hello(one o)
????????????{
?????????????o.i=20;
????????????}
????????????public static void main(String args[])
????????????{
?????????????one someone=new one();
?????????????System.out.println(someone.i);
?????????????hello(someone);
?????????????System.out.println(someone.i);
????????????}
???????????}

???????????我们的java程序会在hello()函数的生存空间之内为我们创建一个名字叫个o的one的实例对象,用于接受外界传递进来的引数,但是我们使用上面的方法,传递进去的其实也只是一个someone的句柄,而hello()之内的那个名字叫个o的对象的i的更改也会影响到超出hello生存空间之外的someone中的i,真是郁闷啊!
???????数学运算符
?????????这里我们要注意一个问题就是整数的除法运算所得结果会把小数部分忽略,注意不是四舍五入!什么是简略运算符?简略运算符是在运算符之后紧跟一个=号,这个方法使用于java中的所有运算符,,例如 把x+10的值从新赋值给x,你就可以用x+=10这种简略形式。具体的数学运算符的例子我就不给大家举了,因为这个很简单,和我们小学学习的数学运算没有什么差别
?????????一元运算符
???????????负号(-)和正号(+)都是一元运算符
???????递增和递减
?????????递增(++)和递减(--)他们都有2中形式,一个是前缀(++i),一个是后缀(i++)需要注意的是,这2个方法是有差别的,在使用前缀的时候,是先进行前缀的运算,然后把值传递给i,然后i再参与后面的运算,而使用后缀时候,是先把i参与运算,再将i 进行后缀的运算,例如
?????????public class test
?????????{
??????????public static void main(String args[])
??????????{
???????????int i=0;
???????????System.out.println(++i);
???????????System.out.println(i++);
???????????System.out.println(i);
??????????}
?????????}
?????????答案是1、1、2 先进行自加,然后把值显示(1)第二次显示是先把i的值显示(1),在自加(2),但是自加的没显示因为自加的值参加下次的运算,也就是第三次显示2的原因。
???????关系运算符
?????????注意,我在我的blog中已经写了一篇关于运算符的文章(http://blog.csdn.com/maoerzuozuo)里面有关于运算符
?????????经常出错的地方和解答,如果你能全部的答对,那么你在数学运算符这一块基本上没问题了!

大象-Thinking.in.UML(第二版)

  • 2014年03月11日 09:05
  • 66.39MB
  • 下载

Thinking in UML 学习笔记(三)——UML核心视图之类图

类图的作用:用于展示系统中的类及其相互之间的关系。UML在解决面向对象的方法中对类理解为三个层次,分别是:概念层、说明层、实现层。在UML中,从开始的需求到最终设计类,类图也是围绕这三个层次的观点进行...
  • lxq_xsyu
  • lxq_xsyu
  • 2014-05-05 10:08:11
  • 3277

thinking in java学习笔记-第一章

最近开始拜读java编程思想这本书,这本书的经典之处我就不过多宣扬了,在这里我只谈谈我读这本书的感受。 这本书是由Bruce Eckel,这个人也许不熟悉,但是他的作品可是如雷贯耳啊,Bruce E...
  • wtxwd
  • wtxwd
  • 2016-12-20 17:20:01
  • 650

Thinking In Java 第四版读书笔记

原文地址:http://dotnetslackers.com/articles/aspnet/UsingWebPartsInASPNet20.aspx[译者改后代码下载][翻译]在asp.net 2....
  • webwalker
  • webwalker
  • 2007-05-22 09:30:00
  • 3170

<thinking in java 4>学习笔记

1.Java和c的区别  1)、与C语言不同,JAVA里没有无符号(unsigned)整型。JAVA的8种基本类型(boolean,byte,short,char,int,long,float,dou...
  • zhoutianqi_906138
  • zhoutianqi_906138
  • 2016-05-13 16:42:25
  • 333

第21章 并发 ——《Thinking in Java》学习笔记

说道并发,就有种异常高大上的感觉,好像比那些顺序编程有种不可明辨的优越感一样,是的,并发的确更深奥,而且现在全世界都离不开并发程序。 但是什么是并发?并发能做什么?并发如何实现? --------...
  • u010635780
  • u010635780
  • 2014-08-12 19:40:18
  • 954

Thinking in java学习笔记—泛型(擦除)

一、泛型擦除 在泛型代码内部,无法获得任何有关泛型参数类型的消息。 import java.util.Arrays; class AA{} class CC{} class B{} publi...
  • kisionl
  • kisionl
  • 2016-01-20 23:04:41
  • 326

java学习笔记4-thinking in java

java学习笔记4-参考:thinking in java
  • Trisyp
  • Trisyp
  • 2017-03-30 14:16:27
  • 359

读第一遍Thinking in java的笔记

第一章1.Java一切都是对象,但操纵的标识符是对象的一个“引用”。简单的说,引用代表这个对象内存地址。 如:String s;实际上,我们并没有创建一个对象,我们只是创建了一个引用,它不指向任何...
  • u011253016
  • u011253016
  • 2016-07-18 18:22:54
  • 2142

Thinking in Java学习笔记(2)(zt)

打造第一个java程序? 名称的可视性???????? 名称问题有些人觉得不是什么大问题,我开始也觉得那不是个什么大问题,但是当你有一天写了很多的类时,你就发现,名称其实真的很重要,假如你有这么一个类...
  • PerseusYan
  • PerseusYan
  • 2004-08-26 10:59:00
  • 682
收藏助手
不良信息举报
您举报文章:Thinking in Java学习笔记(三)(zt)
举报原因:
原因补充:

(最多只允许输入30个字)