一转眼就大四了,大学的时光荒废了不少,临近毕业,面临就业,不得不敲醒警钟,再不努力我们就老了。
从今天开始翻书,同时也用blog记录一下学习成长的过程。看的第一本是相当基础的
不得不说的就是这本书的厚度,不解释啊,就是块砖。就当巩固基础,查漏补缺了。能翻到几条以前没注意过的细节就算赚了。
快速翻阅了一下前五章,没有什么特别需要记录的,就两点懒得记,用到再翻的小知识,写在这,方便以后查阅。
一、常用的javadoc标签(2.8.4)
1.1 @see
@see标签允许用户引用其他类的文档。javadoc会在其生产的HTML文件中,通过@see标签连接到其他文档。格式如下:
1 @see classname2 @see fully-qualified-classname3 @see fully-qualified-classname#method-name
1.2 {@link package.class#member label}
该标签与@see极其相似,只是它用于行内,并且使用“label”作为超链接文本而不用“See Also”。
1.3 {@dorRoot}
该标签产生到文档根目录的相对路径,用于文档树页面的显示超链接。
1.4 {@inheritDoc}
该标签从当前这个类的最直接的基类中继承相关文档到当前的文档注释中。
1.5 @version
该标签格式如下:
1 @version version-information
1.6 @author
该标签可以使用多个,以便列出所有作者,但是它们必须连续放置。全部作者信息会合并到统一段落,置于生成的HTML中。格式如下:
1 @author author-information
1.7 @since
该标签允许你指定程序代码最早使用的版本,可以在HTML java文档中看到它被用来指定所用的JDK版本的情况。
1.8 @param
该标签用于方法文档中,格式如下:
1 @param parameter-name description
其中,parameter-name是方法的参数列表中的标识符,description是可延续数行的文本,终止于新的文档标签出现之前。可以使用任意多个这种标签。
1.9 @return
该标签用于方法文档,格式如下:
1 @return description
1.10 @throws
该标签格式如下:
1 @throws fully-qualified-class-name description
其中,fully-qualified-class-name给出一个异常类的无歧义的名字,而该异常类在别处定义。
1.11 @deprecated
该标签用于指出一些旧特性已由改进的新特性所取代。在Java SE5中,javadoc标签@deprecated已经被@Deprecated注释所替代。
二、移位操作符(3.11)
移位操作符操作的运算对象也是二进制的“位”。移位操作符只可用来处理整数类型(基本类型的一种)。
左移位操作符(<
“有符号”右移位操作符(>>)能按照操作符右侧指定的位数将操作符左边的操作数向右移动。“有符号”有移位操作符使用“符号扩展”:若符号为正,则在高位插入0,;若符号为负,则在高位插入1。
"无符号"右移位操作符(>>>)使用“零扩展”:无论正负,都在高位插入0。
如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。只有数值右端的低5位才有用。这样可以防止我们移位超过int类型所具有的的位数(32位)。若对一个long类型的数值进行处理,最后得到的结果也是long。此时只会用到数值右端的低6位,以防止移位超过long型数值具有的位数(64位)。
“移位”可与“等号”(<<=、>>=或>>>=)组合使用。此时,操作符左边的值会移动由右边的值指定的位数,再将得到的结果赋给左边的变量。但在进行“无符号”右移位结合赋值操作时,可能会遇到一个问题:如果对byte或short值进行这样的移位运算,得到的可能不是正确的结果。它们会先被转换成int类型,再进行右移操作,然后被截断,赋值给原来的类型,在这种情况下可能得到-1的结果。
三、练习(4.8 练习10)
在翻阅过程中,还碰到一道比较有趣的课后小题,在这分享下:
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
写一个程序,找出四位数的所有吸血鬼数字。
1 packagecom.gy.study;2
3 public classStudy_0003 {4 public static voidmain(String[] args) {5 for (int i = 10; i < 100; i++) {6 for (intj = Math.max(i, 1000 / i);
7 j < 100 && i * j < 10000; j++) {
8 if (i * j < 1000) {
9 continue;10 }
1112 if(check(i, j, i * j)) {13 System.out.println(i + " * " + j + " = " +(i * j));14 }15 }16 }17 }18
19 static boolean check(int i, int j, intk) {20 char[] ci = ("" +i).toCharArray();21 char[] cj = ("" +j).toCharArray();22 char[] ck = ("" +k).toCharArray();23 char[] cij = new char[ci.length +cj.length];24 for (int l = 0; l < cij.length; l++) {25 if (l
32 int count = 0;33 for (int m = 0; m < ck.length; m++) {34 for (int n = 0; n < cij.length; n++) {35 if (ck[m] ==cij[n]) {36 count++;37 cij[n] = 'n';38 break;39 }40 }41 }42
43 if (count ==ck.length) {44 return true;45 } else{46 return false;47 }48 }49 }
由于时间有限,我也没有仔细去优化以及修改代码了,原书答案比我的代码更针对题目,不过思路差不多,凑合着看吧。
本书作者也给出了所有原代码,请大家参阅。我也将原书答案贴出,供大家研究学习。
1 packagecontrol;2
3 public classE10_Vampire {4 public static voidmain(String[] args) {5 int[] startDigit = new int[4];6 int[] productDigit = new int[4];7 for (int num1 = 10; num1 <= 99; num1++)8 for (int num2 = num1; num2 <= 99; num2++) {9 //Pete Hartley's theoretical result:10 //If x·y is a vampire number then11 //x·y == x+y (mod 9)
12 if ((num1 * num2) % 9 != (num1 + num2) % 9)13 continue;14 int product = num1 *num2;15 startDigit[0] = num1 / 10;16 startDigit[1] = num1 % 10;17 startDigit[2] = num2 / 10;18 startDigit[3] = num2 % 10;19 productDigit[0] = product / 1000;20 productDigit[1] = (product % 1000) / 100;21 productDigit[2] = product % 1000 % 100 / 10;22 productDigit[3] = product % 1000 % 100 % 10;23 int count = 0;24 for (int x = 0; x < 4; x++)25 for (int y = 0; y < 4; y++) {26 if (productDigit[x] ==startDigit[y]) {27 count++;28 productDigit[x] = -1;29 startDigit[y] = -2;30 if (count == 4)31 System.out.println(num1 + " * " + num2 + "
32 :" +product);33 }34 }35 }36 }37 }
好了,这篇博客就先写到这吧,继续学习,大家加油。