`
bingooh
  • 浏览: 52990 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论
文章列表
基本原则: 1.尽可能早的校验输入参数的有效性,如在方法的第一行代码进行校验,以尽早的发现错误。   2.对于公共方法,如果校验失败应抛出异常,对于私有方法,建议使用assert关键字进行校验。在编译源码时,必须添加-ea参数,assert校验逻辑才能生效(对使用assert持保留意见)   3.使用注释详细说明方法的输入参数的有效性,以及如果校验失败,对应抛出的异常类型    
基本原则: 1.总是使用@Override标记被覆盖的方法,@Override可以在编译时检查是否正确的覆盖方法,以便及时发现错误。如果你的类是非抽象的,并且继承了抽象类或实现了接口,仍然建议使用@Override注释   2.标记(marker)接口指不包含任何方法的接口,如Serializable,Set。如果需要限制方法的参数类型,或者减小接口范围(如Set接口继承Collection接口,Set减小了Collection的接口范围),那么应该使用标记接口   3.如果你的框架已经大量使用了Annotation。或者需要标记除类和接口外的目标(如方法),或者需要在未来增加更多的 ...
一般测试框架类,如JUnit,TestNG都可以通过设置指定具有某些名称的方法为测试方法,如以test开头的方法为测试方法,这样做的缺点包括: 1.如果方法名称拼写错误,不会有任何提示。如误拼为tsetHello(),测试时此方法不会被执行,但是也不会有任何错误提示   2.可能误执行其他方法,如testSafety()可能是业务方法,但因为符合测试方法的命名模式(以test开头的方法),所以在测试时会被调用   3.不能传递输入参数值给测试方法   使用Annotation可以避免以上问题,如以下使用方式:   //使用@Test标记测试方法 @Test pub ...
枚举类不能继承其它类,但是枚举类可以继承接口,如下接口: public interface Operation { double apply(double x,double y); }   BaseOperation、ExtendedOperation实现了此接口: public enum BaseOperation implements Operation { PLUS("+") { public double apply(double x, double y) { return x + y; } }, MINUS(" ...
假设有如下类Food(食物),枚举类Type定义Food的类型: public class Food { public enum Type{FRUIT,VEGETABLE} private final Type type; private final String name; public Food(String name,Type type){ this.name=name; this.type=type; } public String getName(){ return name; } public Type ...
假设Text类是一个UI控件,此控件可以设置各种样式(Style)。一般情况下会使用int类型的常量定义各种样式,以便可以进行bit运算,如下: public class Text { //样式定义 public static final int STYLE_BOLD=1<<0;//1 public static final int STYLE_ITALIC=1<<1;//2 public static final int STYLE_UNDERLINE=1<<2;//4 //应用样式 public void applySty ...
枚举类的ordinal()用于返回枚举量的序数,根据API说明,此方法仅应该被EnumSet,EnumMap使用。所以不要使用如下代码: public enum State { ON,OFF; public int numberOfState(){ //never do this; return ordinal()+1; } } 可以使用成员属性存储序列号,修改后的代码如下: public enum State { ON(1),OFF(2); private final int number; private State(int n ...
JDK5开始支持枚举功能,以下枚举类:   public enum State { ON,OFF; }     枚举类State不能继承其它类,也不能被其它类继承,并且不能使用new创建State类型的对象。其实State可视为java.lang.Enum的子类,其中每一个枚举常量可视为State类型的实例,以下代码仅供理解:   public class State { public static final State ON=new State(); public static final State OFF=new State(); private ...
以下类使用了泛型: public class Container <E>{ private List<E> elements=new ArrayList<E>(); public void addAll(List<E> list){ elements.addAll(list); } public void removeAll(List<E> list){ list.addAll(elements); elements.clear(); } public static &l ...
List<E>与Array的区别: 1.如果Child是Parent的子类,那么Child[]是Parent[]的子类型,而List<Child>与List<Parent>没有继承关系   2.Array在运行时检查存放在同一个数组里的元素必须是同一类型,List<E>是在编译时检查元素类型,在运行时泛型类型被擦除   以下代码说明以上两点: //因为Long是Object的子类,所以以下可以通过编译 Object[] array=new Long[1]; //在运行时检查类型,以下代码会报错 array[0]="b ...
以下代码在编译时将给出一个未检查的警告(unchecked warning): //警告信息提示ArrayList应使用泛型 List<String> list=new ArrayList();   任何一个未检查的警告在运行时都可能导致抛出ClassCastException,因此应该尽量消除警告信息,如上代码应修改为: List<String> list=new ArrayList<String>();   如果确定代码不会触发ClassCastException,那么可以使用@SuppressWarnings("unchecke ...
JDK5引入了泛型,在新代码里应优先使用泛型替代原始类型(raw type)   泛型相关术语: List<E> generic type 泛型 E formal type parameter 形式参数 List<String> parameterized type 参数化类型 String actual type parameter 实际参数 List raw type 原始类型 List<?> unbounded wildcard type  

4.22 嵌套类

嵌套类包括: 1.静态成员嵌套类:可视为外部类的静态方法,可访问外部类的静态属性和方法。   2.成员嵌套类:可视为外部类的成员方法,可访问外部类的所有成员属性和方法。成员嵌套类的对象一定会和外部类的对象关联,如下两者将关联在一起(成员嵌套类可通过Outer.this访问所关联的外部类对象):   Outer.Inner inner=new Outer().new Inner();     3.匿名嵌套类:可视为外部类的局部变量,可访问外部类的所有成员属性和方法,以及使用final修饰的局部变量   4.局部嵌套类:同匿名嵌套类   使用原则: 1.如果嵌套类不需要访 ...
在JavaScript里,可以直接传递函数引用(被传递的函数可视为类型为Function的对象),如下: function sayHello(){ alert("hello, world!"); } <input type="button" onclick="sayHello()"/   在Java里,目前应该还不可以这样传递。但是可以使用函数式对象实现类似功能。函数式对象指仅包含一个方法的对象,并且此方法应满足以下条件: 1.在任何情况下,使用相同的输入参数值应返回同一个结果 2.在任何情况下,执行此 ...
本小节请直接参考原文,基本上我还从未遇到类似标签类的写法   标签类: class TagFigure { enum Shape { RECTANGLE, CIRCLE }; // Tag field - the shape of this figure final Shape shape; // These fields are used only if shape is RECTANGLE double length; double width; // This field is used only if shape is CIRCLE ...
Global site tag (gtag.js) - Google Analytics