start 30

m88体育 今天给领导博客的广告做了些调整。原本首页横幅广告的位置是固定的,即便进入单篇文章它也还在原地:

又是很简单的一节

public类不应该有public属性,必须使用访问方法(accessor methods)

m88体育 有些情况下,会需要写一些纯粹用作数据存储,而没有任何行为的类,比如:

// Degenerate classes like this should not be public!
class Point {
	public double x;
	public double y;
}

上一节所说,这样做会破坏数据封装,所以Object-Oriented语言的死忠分子们会拒绝接受这样的写法,并要求全面使用访问方法改写它:

前不久,领导在网上找到一个预测儿童成年后身高的方法。

其原理是通过大规模统计,得出某个年龄的儿童身高达到其成年后身高的百分比。比如,数据表明,2岁儿童的身高,通常是其成年后身高的一半。其他年龄的数据如下表:

年龄 7岁8岁9岁10岁11岁12岁13岁14岁15岁16岁17岁18岁
相对于成年身高的百分比
女孩 747881849094979899100100100
男孩6972757982879094979899100

所以只要用某年龄时的身高除以对应百分比就可得到成年身高的预测。很快写出一个页面算这个东西:

儿童成年身高预测

本篇评论可作为bug和新需求提交之用。

这节比较简单,都是各种面试考烂了的东西。

类和属性的访问控制应尽可能严格

访问控制是Java语言中最重要的概念之一,它使得对数据的封装成为可能。好的数据封装可以有效分隔一个系统中的不同模块,增加系统可靠性,便于维护,而且使各模块的开发和重构完全独立,实现细节上的改动不会影响对外开放的API。

对于类,有两个访问级别:package-private和public。其中前者是默认的,如果一个类没有被声明为public,那么它就是package-private,也就是说,它只在其自己所在的软件包内可见。这两个级别的选择没什么复杂的:只有要作为API开放的类,才声明为public,其余实现的细节,则尽可能都声明为package-private。如果一个非public类只被另外一个类使用,那么它应该被定义成使用者的私有内嵌类(private nested class),这样可以进一步减小它的可见范围,使其更好地被保护。

前一阵子准备雅思考试,没时间继续Effective Java,现在考完了,要捡起来。

实现Comparable接口

Comparable接口只有唯一一个方法:

public interface Comparable<T> {
	int compareTo(T t);
}

compareTo方法的返回值是一个整数。对于a.compareTo(b),如果返回负值,则表明a < b;正值表明a > b;如果返回0,则说明a与b相等。如果a与b类型不同,应该弹出ClassCastException。

今天为一个网站改数据,遇到个小问题。

从数据库中提取一系列记录,其中一列是一个业务编号,为通用性考虑,这一列采用了字符串类型,而其内容却是数字,比如"1","2","12"等等。今天删除了某些记录,又新加入了一些,所以这一列的顺序相对于主关键字来说就混乱了。提取的数据需要按这一列排序,于是就简单写了个查询:

SELECT product_type_label, product_name FROM product 
    WHERE product_type = 'ENTREES' 
    ORDER BY product_type_label;

结果自然是错的:

1만두 Raviolis 餃子
10떡볶이 Toppokki トッポッキ
11Boulots assaisonnés
12육회 Steak tartare coréen ユッケ
13닭볶음면 Nouilles sautées avec poulet チキン焼きそば
14Assortiment de beignets
2김밥 Maki coréen のり巻き
3김치전 Kimchijeon キムチジョン
4해물 파전 Crêpe coréenne de fruits de mer 海鮮チヂミ
5잡채 Jabchai チャプチェ
6깐풍기 Sauté de poulet カンプンギ
7오징어 볶음 Sauté de calamar piquant
8새우튀김 Beignets de crevettes 天ぷら
9김치돼지볶음 Sauté de Kimchi avec porc キムチ豚炒め

第6页 共19页