发表于: 2017-08-06 01:50:55
2 1038
一 今天做的事情
6.1 Java8 增强的包装类
回忆一下哪八种基本类型:整形四个(byte short int long),浮点数俩(float double),字符一个(char),加一个布尔boolean。看书的时候书上一次次地编写从来没见过的代码。在讲多态时,举了BaseClass ploymophicBc = new SubClass();这个例子;在这之前定义的变量编译类型和运行类型一样;现在书上举了Object boolobj = true ;这个例子,在此之前变量的类型一般定义为上述的八种加String类型的。书上讲的一次次冲击我现有的知识体系,或者说完善。就像数学的发展。一开始是加减,后来数字多了就乘除,整数不够用了就小数,小数不够用了就分数根式复数,一步步冲击,一步步完善。
在java语言中,为什么要有这八种基本类型呢?因为在传统的程序设计中会经常用到一些类型,经常用到的就变成基本的吧,这样用起来方便。就像我在我的搜狗浏览器里把我们IT修真院网址加入收藏夹,因为常用点击标签就能打开网址而不是要输入网址按回车或者是在百度上搜索IT修真院。基本类型不是对象,它们不能有成员变量或者方法。但是,在java中一切皆为对象,不是对象的基本类型变成了对象:java提供了包装类,8种不同的基本类型作为对象都分别属于对应的包装类。我们可以定义一个Integer类的对象: Integer intObj = 5 ;
书上举了这么个例子,我感觉不对:
//直接把一个基本类型变量赋值给Integer对象
Integer inObj = 5 ;
注释我感觉有问题。上面Integer是一个包装类,inObj是这个类的一个对象,=是赋值符号,5是数字常量。对这行代码的注释应该是:直接把一个基本类型(准确地说是int类型)的常量赋值给Integer类中的对象inObj(或者说变量inObj)。简单点说,语句表达的意思是:常量赋值给变量。师兄你怎么看?我的想法对还是书上的对?
照这么想,那么问题来了:之前写的很常见的语句: int i = 1 ; int是什么?想了很久,因为这玩意儿很抽象,想了很久也没有想通。在网上找了下面的一段话:
图1
我对 int i = 1 ;的理解:i这个对象没有显式指定是哪个类的,但是隐式指定了是属于Integer这个包装类的。
先想到了这么多,很抽象的东西,脑容量不够用了。
对于 int i = 1 ; 师兄你是怎样理解的?
书上提到了自动装箱的概念:“所谓自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量”。我对这句话的理解是定义了一个变量,也就是对象(不知道能不能这样理解对象约等于变量)变量总的有类型啊,它属于哪种类型,那么它就是哪种类型的包装类的对象(变量)。自动拆箱则相反,举个梨子:integer i1 = 4 ; int i2 = i1 ;直接把integer类型的对象i1的值赋给int类型的变量(对象)i2。
夏天的梨子不好吃,吃起来苹果不像苹果梨不像梨。恕我孤陋寡闻,不成熟的水果里就数青苹果最好吃。少了苹果的几分甜,多了几分酸。酸甜的口感真让人欲罢不能。吃青苹果最重要的是现在是青苹果的季节,而且青苹果比苹果更便宜。放冰箱几天,人品好的话青苹果会有糖心,吃得时候差点把核吃了。青苹果汁不多,不适合榨汁,榨汁是对苹果最大的侮辱,不削皮直接吃是对它最大的尊重。
跑了会题,都怪搜狗输入法。书上接着介绍了包装类实现基本类型变量和字符串之间的转换的功能。我觉得我应该看完这个知识点再去完成前面第四章书上103页将浮点数转换成人民币读法的字符串的程序,泪奔。
本小节的末尾介绍了其他一些方法,大体看了看,用到的时候具体看。
6.2 处理对象
6.2.1 打印对象和toString方法
若直接用System.out.println();语句打印某个类的某个对象,那么等价于打印这个对象的toString()方法的返回值。
关于toString()方法:属于Object类中的一个方法。用于自我描述。若每个对象调用该方法,那么返回值为“对象所属类名 + @ + 哈希码 ”。+号为连接符。百度了哈希码(hashCode),百度了哈希码,它是一种算法,hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值。总之,它是一个有含义的数值。
如果觉得这个自我描述太肤浅,可以在类中重写toString()方法来来自定义“自我描述”:
接着作者饶有兴趣地介绍了重写toString()方法时返回的格式:类名[属性1 = 属性值1 ...],看着就很无聊。但是这就是书上提供的标准格式。就像做数学几何证明题一样,做哪些辅助线用什么方法是我自己的事情,标准答案可能是最简短的方法但是不易理解,自己写的可能很长但是很容易想到做出来。各有千秋。
6.2.2 ==和equals()方法
哎呦,这个貌似我看过喔。
在写将浮点数转换成人民币读法的字符串的程序的时候我思考过这个。明天再复习吧,今天要早点睡,不能像今天一样一睁眼就一点了。
二 明天做的事情:
1 学习log4j
2 继续第六章的内容
评论