public class Test14
{
void method(int arg0, int arg1){}
//这种换参数名字的方式并不算重载
// void method(int arg1, int arg0){}
//参数列表类型的排列组合不一样,可以形成重载
void method(int arg0, byte arg1){}
//参数类型位置调换也可以形成重载
void method(byte arg0, int arg1){}
//参数个数不一样也可以形成重载
void method(int arg0, int arg1, int arg2){}
//返回值类型不同也不算重载,jvm会不知道应该使用
//哪个函数,但也不是无法避免
// char method(int arg0, int arg1){}
//如果对于相同参数列表的函数,有多种返回值,
//可以在函数内实现重载的情况,返回值为Object
// Object method(int arg0, int arg1){}
/**
* 这里我们可以想一下,如果我们不知道需要多少个参数
* 比如求任意个 数的和,难道还能定义无数个函数?因为
* 我们并不知道用户会什么时候调用那些个组合的函数
*
* 在老版本的java里,老程序员对于这种方式的处理,
* 都是采用数组为参数来处理的。
*/
//像main函数吧
void method(int[] args)
{
//我们这里的调用方式就将是这样,但写起来会很麻烦
method(new int[]{1,2});
method(new int[]{1,2,3,4,5});
}
//可变参数列表,该参数列表表示支持任意个数的参数
//这个新特性也是专门为了解决上边的问题而出现的,
//虽然实现是一样的,但更简便
void method$1(int... arg0)
{
//for example
method$1(1,2);
method$1(1,2,3,4,5);
//由于这种可变参数的实现,是以数组来实现的
//所以访问方面,也是用数组的方式
arg0[0] = 1;
//所以由上边的代码我们也可以这样调用
method$1(new int[]{1,2});
method$1(new int[]{1,2,3,4,5});
}
/**
* 函数的内联
*
* 内联在重构中是很关键也是很重要的一种方式,
* 简单来说,就是把一段很长的代码,不利于阅读
* 的代码分而治之,从而简化阅读以及维护
*/
//假设代码我们这样写,第一段和第二段代码都挤在一起
//对于阅读的人来说很费劲,他不知道你的第二段功能是
//怎么分割的,很不直观,所以得理解整个函数的功能之后
//才能具体的区分出来,而有的代码耦合性非常高,单独
//分离出功能会很费劲
void A()
{
//case 1
//case 2
}
//如果代码以这种方式来写,并对内联函数取个很形象的名字,
//不论是别人阅读还是自己维护都会很方便,对于调试错误也
//有帮助
void B()
{
//case 1
case1();
//case 2
case2();
}
void case1(){}
void case2(){}
/**
* 内联是一种很实用的技巧,但也不能过渡使用,如果一个函数
* 最后被分割成成百上千的内联函数,最后只会变得更糟糕。
*
* 深度内联是最可耻的,比如a内联b和c,c又d和e,如此类推,
* 最后想找一个关键功能要累死
*/
}
复习笔记13 函数 重载 内联
最新推荐文章于 2024-11-04 20:50:15 发布