复习笔记13 函数 重载 内联



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,如此类推,
	 * 最后想找一个关键功能要累死
	 */
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章