【Java基础】方法
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
,而不是返回一个零长度的数组或集合。
【Java基础】方法的更多相关文章
- Java基础-方法(method)的应用
Java基础-方法(method)的应用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 方法就是定义在类中,具有特定功能的一段小程序,方法也称为函数(function),方法可以接 ...
- Java基础——方法的调用
Java基础--方法的调用 总结: 1. 在同一个类中-- 对于静态方法,其他的静态和非静态方法都可以直接通过"方法名"或者"类名.方法名"调用它. 对 ...
- 《Java基础——方法的调用》
Java基础--方法的调用 总结: 1. 在同一个类中-- 对于静态方法,其它的静态和非静态方法都可以直接通过"方法名"或者"类名.方法名"调用它. 对 ...
- Java基础-方法重载和方法重写的区别
什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) ...
- 三、java基础-方法含义_重载_递归
1.java中方法: 方法的含义: 就是一个代码片段,可以完后某个特定的功能,可以重复利用: 定义方法的语法: [方法的修饰符列表] 方法的返回值类型 方法名{ java语句; } 注意 ...
- [Java 基础]方法
方法的定义 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 语法 修饰符 返回值类型 方法名 (参数 ...
- JAVA基础——方法笔记
java方法_学习笔记 由于我本人对java方法已经比较熟悉了,java方法的定义和使用也比较简单,这里只列举了基于我自身容易搞错的地方,希望对大家的学习有帮助!! 方法的参数可以是基本数据类型,如 ...
- Java基础-方法(07)
方法的定义 方法其实就是完成特定功能的代码块在很多语言里面都有函数的定义函数在Java中被称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) { 函数体; ret ...
- Java基础方法整理
方法 9.1方法概述 方法就是用来完成解决某件事情或实现某个功能的办法 可以通过在程序代码中引用方法名称和所需的参数,实现在该程序中执行(或称调用)该方法.方法,一般都有一个返回值,用来作为事情的处理 ...
- Java基础-方法
方法 Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 注意: 在一些其它语言中方法指过程和函数.一个 ...
随机推荐
- SSIS oracle 64位 数据源链接
新建数据源 提供程序选择:本机OLE DB ORACLE Provider For OLE DB 服务器名或文件名中选择Oracle Net Manager中配置好的服务名即可 填写账号,密码,测试, ...
- php+mysql+apache+nginx
http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 安装mysql rpm -qa | grep mysql ...
- botbrew下写glib2程序
作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 ...
- Mroonga 3.0.8 发布,MySQL 存储引擎
Mroonga 3.0.8 支持 REPAIR TABLE 支持损坏的 groonga 数据库. Mroonga 是一个 MySQL 存储引擎,基于 Groonga,提供完整的全文搜索引擎.
- angular代码分析之异常日志设计
angular代码分析之异常日志设计 错误异常是面向对象开发中的记录提示程序执行问题的一种重要机制,在程序执行发生问题的条件下,异常会在中断程序执行,同时会沿着代码的执行路径一步一步的向上抛出异常,最 ...
- mvvm的优势
之前在项目中有个功能,是根据数据模型生成页面,然后页面变动之后,再同步到数据模型之中. 当时用的jquery写的,一点一点的控制,整个功能写下来.测试,花了很长时间,而且还担心出bug. 现在用mvv ...
- 每周一书-编写高质量代码:改善C程序代码的125个建议
首先说明,本周活动有效时间为2016年8月28日到2016年9月4日.本周为大家送出的书是由机械工业出版社出版,马伟编著的<编写高质量代码:改善C程序代码的125个建议>. 编辑推荐 10 ...
- Word文档合并的一种实现
今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多.这个问题,如果是在服务端的话,直接 ...
- Linux 对比两个文本的交集和差集(comm)
200 ? "200px" : this.width)!important;} --> 介绍 comm命令可以对两个已排序好的文本的内容进行交集和差集的对比,记住必须是已排序 ...
- SQL Server 性能优化之——T-SQL TVF和标量函数
阅读导航 1. TVF(表-值行数Table-Valued Functions) a. 创建TVF b. 使用TVF的低性能T-SQL c. 使用临时表 ...