P59-58方法的重载overloead
只是名称相同,但是实际上是完全不同的方法
形参类型,形参个数,形参顺序不同的时候
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。调用时,会根据不同的参数自动匹配对应的方法。
雷区
重载的方法,实际是完全不同的方法,只是名称相同而已!
构成方法重载的条件:
1.不同的含义:形参类型、形参个数、形参顺序不同
2.只有返回值不同不构成方法的重载
如:inta(Stringstr){}和voida(Stringstr){}
不构成方法重载
3.只有形参的名称不同的时候,不构成方法的重载
比如:
inta(Stringstr){}和inta(Strings){}
不构成方法的重载
方法重载
packagehello;/***测试方法的重载**
authorVan.G**/publicclassTestOverload{publicstaticvoidmain(String[]args){System.out.println(add(3,5));//8System.out.println(add(3,5,10));//18System.out.println(add(3.0,5));//8.0System.out.println(add(3,5.0));//8.0//我们已经见过的方法的重载System.out.println();//0个参数System.out.println(1);//参数是1个intSystem.out.println(3.0);//参数是1个double}/**求和的方法static方便调用,*/publicstaticintadd(intn1,intn2){intsum=n1+n2;returnsum;}//方法名相同,参数个数不同,构成重载publicstaticintadd(intn1,intn2,intn3){intsum=n1+n2+n3;returnsum;}//方法名相同,参数类型不同,构成重载publicstaticdoubleadd(doublen1,intn2){doublesum=n1+n2;returnsum;}//方法名相同,参数顺序不同,构成重载publicstaticdoubleadd(intn1,doublen2){doublesum=n1+n2;returnsum;}//编译错误:只有返回值不同,不构成方法的重载publicstaticdoubleadd(intn1,intn2){doublesum=n1+n2;returnsum;}//编译错误:只有参数名称不同,不构成方法的重载publicstaticintadd(intn2,intn1){doublesum=n1+n2;returnsum;}}P递归算法的详解——递归和迭代效率的测试
递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。
递归结构包括两个部分:
1.定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
2.递归体。解答:什么时候需要调用自身方法。
packagehello;/***测试递归的效率*
authorVan.G**/publicclassTestRecursiion01{publicstaticvoidmain(String[]args){a();}staticvoida(){System.out.println("a");b();}staticvoidb(){System.out.println("b");}}packagehello;/***测试递归的效率*
authorVan.G**/publicclassTestRecursiion01{publicstaticvoidmain(String[]args){a();}staticintcount=0;staticvoida(){System.out.println("a");count++;if(count10){a();}else{return;}}staticvoidb(){System.out.println("b");}}递归的缺陷
简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
比如上面的递归耗时ms。但是用普通循环的话快得多,如示例3-23所示。
packagehello;/***测试递归的效率*
authorVan.G**/publicclassTestRecursiion01{publicstaticvoidmain(String[]args){longd3=System.currentTimeMillis();inta=10;intresult=1;while(a1){result*=a*(a-1);a-=2;}longd4=System.currentTimeMillis();System.out.println(result);System.out.printf("普通循环费时:%s%n",d4-d3);}}注意事项
任何能用递归解决的问题也能使用迭代解决。当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;
在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。
●句子
●编程学习
●大学生生活图鉴
●JavaScript
●计算机网络原理
●计算机组成原理
●操作系统
●数据库系统概论
●数据结构
●英语
●R语言
●Linux
●人生哲学以及电竞
●云计算与人工智能
●新媒体运营以及各种资源分享
●明星电视剧社会现象娱乐
仙女都在看点点点,赞和在看都在这儿!凡花花的小窝欢迎赞赏