第十七天,有不对之处麻烦各位指正
代码的封装:
先编译以下代码:
[Java] 纯文本查看 复制代码 public class S
{
public static void p(){
System.out.println();
}
//输出int
public static void p(int i){
System.out.println(i);
}
//输出double
public static void p(double d){
System.out.println(d);
}
//输出byte
public static void p(byte b){
System.out.println(b);
}
//输出short
public static void p(short s){
System.out.println(s);
}
//输出long
public static void p(long l){
System.out.println(l);
}
//输出float
public static void p(float f){
System.out.println(f);
}
//输出boolean
public static void p(boolean o){
System.out.println(o);
}
//输出char
public static void p(char c){
System.out.println(c);
}
//输出String
public static void p(String t){
System.out.println(t);
}
}
那么在以上代码编译后,我们通过编译以下代码发现:
[Java] 纯文本查看 复制代码 public class test
{
public static void main(String[] args){
System.out.println("test");
S.p(1);
S.p("test");
}
}
以上代码仍然可以运行。(注:两个代码不在同一个文件中,但在同一个文件夹中)
那么,这就可以视作一种封装。(同时也可以推断出:println也是一种方法,可以通过看Java底层源代码来找到)
方法递归:
[Java] 纯文本查看 复制代码 /*
方法递归:
1.什么是方法递归
方法自己调用自己,这就是方法递归
2.当递归时,程序没有结束条件,一定会发生:
栈内存溢出错误:stack over flow Error
所以递归一定要有结束条件
JVM发生错误后就只有一个结果,就是退出JVM
3.递归有结束条件就一定不会发生栈内存溢出错误吗
假设这个结束条件是对的,是合法的,递归有的时候也会出现栈内存溢出错误
因为有可能递归的太深,栈内存不够,因为一直压栈
4.在实际的开发中,不建议轻易的选择递归,能用for循环while循环替代的,尽量使用循环来做,因为循环的效率高,耗费的内存少。递归耗费的内存比较大,另外递归的使用不当,会导致JVM死掉。(但在极少数的情况下,不用递归,出现无法实现)
*/
public class 方法递归{
//人口
public static void main(String[] args){
doSome();
}
public static void doSome(){
System.out.println("doSome begin");
//调用方法doSome既然是一个方法,那么这个方法就可以被调用
doSome();
//这行代码永远执行不到
System.out.println("doSome over");
}
}
案例:计算从1~n累加
[Java] 纯文本查看 复制代码 //先不使用递归,请编写程序,计算1~n的和
public class 从1加到n{
public static void main(String[] args){
//1~10的和
int retValue1 = sum(10);
System.out.println(retValue1);
//1~3
int retValue2 = sum(3);
System.out.println(retValue2);
}
//单独编写一个计算1~n和的方法
public static int sum(int n){
int result = 0;
for(int i=1;i<=n;i++){
result +=i;
}
return result;
}
}
[Java] 纯文本查看 复制代码 //使用递归,请编写程序,计算1~n的和
public class 从1加到n第二种
{
public static void main(String[] args){
//1~3的和
int retValue = sum(3);
System.out.println(retValue);
}
//单独编写一个计算1~n和的方法
//这个代码修改为递归的方式
//3+2+1或1+2+3
public static int sum(int n){
//n最初等于3
//3+2(2是通过:n-1)
//sum(n-1);
if(n==1){
return 1;
}
//程序能执行到此处说明此时n不是1
return n + sum(n-1);
}
} |