【Java基础】方法
2016-06-28 14:20
288 查看
Num1:检查参数的有效性
绝大多数的方法和构造器对于传递给它们的参数值都会有某些限制。比如:索引值必须是非负数,对象引用不能为null等等。这些都很常见,你应该在文档中清楚地指明所有这些限制,并在方法体的开头处检查参数,以强制施加这些限制。
示例代码:
public BigInteger mod(BigInteger m){ if(m.signum()<=0){ throw new ArithmeticException("Modulus <= 0"+m); } }
Num2:慎用重载
看个问题代码:public class CollectionClassifier { public static String classify(Set<?> s) { return "Set"; } public static String classify(List<?> lst) { return "List"; } public static String classify(Collection<?> c) { return "Unknown Collection"; } public static void main(String[] args) { Collection<?>[] collections = { new HashSet<String>(), new ArrayList<BigInteger>(), new HashMap<String, String>().values() }; for (Collection<?> c : collections) System.out.println(classify(c)); } }
这个代码最终的三个结果是:“Unknown Collection”,为何会这样的呢,是方法被重载了,而要调用哪个重载方法是在编译时做出决定的。
可以因覆盖来代替试试。
class Wine { String name() { return "wine"; } } class SparklingWine extends Wine { @Override String name() { return "sparkling wine"; } } class Champagne extends SparklingWine { @Override String name() { return "champagne"; } } public class Overriding { public static void main(String[] args) { Wine[] wines = { new Wine(), new SparklingWine(), new Champagne() }; for (Wine wine : wines) System.out.println(wine.name()); } }
输出的结果是:
wine,sparkling wine,champagne
Num3:慎用可变参数
示例代码public class Varargs { // Simple use of varargs - Page 197 static int sum(int... args) { int sum = 0; for (int arg : args) sum += arg; return sum; } // The WRONG way to use varargs to pass one or more arguments! - Page 197 // static int min(int... args) { // if (args.length == 0) // throw new IllegalArgumentException("Too few arguments"); // int min = args[0]; // for (int i = 1; i < args.length; i++) // if (args[i] < min) // min = args[i]; // return min; // } // The right way to use varargs to pass one or more arguments - Page 198 static int min(int firstArg, int... remainingArgs) { int min = firstArg; for (int arg : remainingArgs) if (arg < min) min = arg; return min; } public static void main(String[] args) { System.out.println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); System.out.println(min(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)); } }
Num4:返回零长度的数组或者集合,而不是Null
有时候有人会认为:null返回值比零长度数组更好,因为它避免了分配数组所需要的开销。这种观点是站不住脚的。
原因如下:
1,在这个级别上担心性能问题是不明智的。
2,对于不返回任何元素的调用,每次都返回同一个零长度数组是有可能的,因为零长度数组是不可变的,而不可变对象有可能被自由地共享。
简而言之,返回类型为数组或集合的方法没理由返回
null,而不是返回一个零长度的数组或集合。
相关文章推荐
- 【报错】ClassNotFoundException: javassist.util.proxy.MethodFilter
- 【报错】 ClassNotFoundException: javax.transaction.Synchronization
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- 本地eclipse运行hadoop程序,操作远程服务器(供理解和入门)
- Java每一天2
- Java RMI原理与使用
- jdk 多版本安装 for mac
- Eclipse Class Decompiler——Java反编译插件
- java安全框架-Shiro学习笔记(八)-加密工具类
- Java---Condition控制线程通信
- Java NIO 详解(二)
- Java IO
- Java8系列之重新认识HashMap
- Java NIO 详解(一)
- Java细粒度锁实现的3种方式
- java Excel导入导出,基于XML的实现,easy-excel使用
- JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
- JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
- Java8的伪共享和缓存行填充--@Contended注释
- JavaWeb学习总结(五十)——文件上传和下载