快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

永乐国永乐国际f66官网_临夏教育信息网进入



册本

《Effective Java 中文版》  03版  潘爱夷易近译

本书先容了57条极具实用代价的履历规则。这些履历规则涵盖了大年夜多半开拓职员天天所面临的问题的办理规划,经由过程对Java平台设计专家所应用的技巧的周全描述,揭示了应坐什么和不应做什么,才能孕育发生清晰、壮实和高效的代码。

正文

留意:条款和用语可能与册本有所进出,但只管即便维持原样加一些自己的理解。

1.构造函数必然不能调用可被覆写的措施,无论是直接照样间接进行。

2.接口应该只是被用来定义类型的,它们不应被用来导出常量。(备注:不要再接口中定义常量)P/89

3.一个安然而守旧的策略是,永世不要导出两个具有相同参数数目的重载措施。

4.返回零长度的数组而不是null。

5.嵌套类

嵌套类(nested class)是指被定义在另一个类的内部的类,其存在的目的应该只是为它的外围类供给办事。嵌套类分为四种:

5.1  静态成员类(static member class)

最简单的嵌套类,最好把它看做一个通俗的类。它可以造访外围类的所有成员,包括那些声明为私有的成员。与其他类静态成员一样,也遵守同样的可造访性规则。

其平日用法是作为公有的帮助类,仅当与它外部类一路应用永乐国永乐国际f66官网时才故意义。

私有静态成员类的一种平日用法是用来代表外围类工具的组件。例如,Map实例的内部平日有一个Entry工具对应与Map中每一对键值对,虽然每一个Entry都与一个Map关联,但Entry上的措施(getKey、getValue、setValue)并不必要造访该Map。是以应用非静态成员来表示Entry是挥霍的,私有静态成员类是最佳的选择。

5.2  非静态成员类(nonstatic member class)

非静态成员类的每一个实例都包孕一个额外指向外部类工具的引用。掩护这份引用要耗损光阴和空间。

其平日用法是定义一个Adapter,它永乐国永乐国际f66官网容许外围类的一个实例被看做另一个不相关的类的实例永乐国永乐国际f66官网。例如,Map接口的实现每每应用非静态成员类来实现它们的聚拢视图。

5.3  匿名类(anonymous class)

没着名字,它不是外围类的一个成员,在应用的同时被声明和实例化。可以呈现在代码中任何容许表达式呈现的地方。平日只实现了其接口中或超类中的措施,不会声明任何新的措施,它们应该异常简短。

用法1是创建一个函数工具(function object),比如Comparator实例。例如:

Arrays.sort(args, new Comparator() {

@Override

public int compare(String obj1, String obj2) {

return obj1.length() - obj2.length();

}

});

用法2创建一个历程工具(process object),比如Thread、Runable或者TimeTask实例。

用法3在一个静态工厂措施的内部,如:

static List intArrayList(final int[] a){

return new AbstractList() {

@Override

public Integer get(int location) {

return a[location];

}

@Override

public int size() {

return a.length;

}};

}

用法4在繁杂的类型安然罗列类型中,用于公有的静态final域的初始化器中,例如:

public abstract class Operation {

private final String name;

Operation(String name) {

this.name = name;

}

public String toString() {

return this.name;

}

abstract dou永乐国永乐国际f66官网ble eval(double x, double y);

public static final Operation PLUS = new Operation("+") {

@Override

double eval(double x, double y) {

return x + y;

}

};

}

5.4  局部类(local class)

应用起码,在任何“可以声明局部变量”的地方,都可以声明局部类,也遵守同样的感化域规则。与匿名类一样,它们必须异常简短。

简而言之,假如一个嵌套类必要在单个措施之外仍旧是可见的,或者它太长了,不得当放在一个措施内部,那么应该应用成员类。假如成员类的每个实例都必要一个指向其外围实例的引用,则把成员类做成非静态的;否则就做成静态的。假设一个嵌套类属于一个措施的内部,假如你只必要在一个地方创建它的实例,并且已经有了一个预先寄放的类型可以阐明这个类的特性,则把它做成匿名类;否则就做成局部类。

6.懂得和应用库

应该认识java.lang、java.util以及java.io中的内容。

6.1Random.nextInt(int)   孕育发生随机整数。

6.2Collections.sort(v)  字符串组成的Vector排序

6.3Collections.sort(v, String.CASE_INSENSITIVE_ORDER)  字符串组成的Vector排序,轻忽大年永乐国永乐国际f66官网夜小写

6.4System.out.println(Arrays.asList(a))  轮回打印一个数组中所有的元素

6.5获取两个Hashtable包孕相同映射键值的所有键:

Map tmp = new HashMap(h1);

tmp.entrySet().retainAll(h2.entrySet());

Set result = tmp.keySet();

6.6Arrays.toString(a)  打印数组每一个元素

6.7Arrays.equals(a1, a2)  对照两个数组长度、每一个元素是否相等。

7.应用非常

7.1  被反省的非常(checked exception)

经由过程抛出一个被反省的非常,逼迫调用者在一个catch子句中处置惩罚非常,或者将它传播到外貌。

7.2  运行时非常(run-time exception)

大年夜多半的运行时非常都是指API的客户没有遵守API规范建立的约定。例如数组越界。

总而言之,对付可规复的前提,应用被反省的非常;对付法度榜样差错,应用运行时非常。

8.只管即便应用标准的非常

8.1  IllegalArgumentException  调用者通报的参数分歧适

8.2  NullPointException  空指针非常

8.3  IndexOutOfBoundsException  下标越界

8.4  ConcurrentModificationException  在禁止并发改动的环境下,工具检测到并发改动

8.5  UnsupportedOperationException  工具不支持所哀求的措施

停止

因为先读的 《Practical Java》,与本书内容有部分相似,以是看得对照快,仍旧值得一读,也终于弄懂关于嵌套类这块的内容。

您可能还会对下面的文章感兴趣: