三、java基础-方法含义_重载_递归

1、java中方法:

方法的含义:

  就是一个代码片段,可以完后某个特定的功能,可以重复利用;

定义方法的语法:
 [方法的修饰符列表]   方法的返回值类型   方法名{
    java语句;
 }

注意:[]括号里面的可以有也可以没有,但是不在[]里面的一定的有。
 1)[方法的修饰符列表]是可选项,现在暂时先写成:public static
 2)方法的返回值类型,可以是java语言中的任何一种数据类型,包括基本数据类型和引用数据类型
 3)如果方法执行结束之后,并没有任何返回值,那么定义方法的时候,返回值类型写:void
 4)方法名只要是合法的标识符即可
 5)方法的形式参数列表,可以有参数,也可以没有参数,如果有多个参数的话使用"逗号"隔开。

备注:如果一个方法的返回值类型不是void,那么在方法中必须使用return 语句来返回数据,否则编译无法通过。return语句一定执行,方法结束。

2、方法的重载
 1)同一个类中,
 2)方法名相同
 3)参数列表不同。(类型不同、个数不同、顺序不同)
 4)和返回值类型无关
 5)和方法的修饰符列表无关

方法的重载:1)可以使代码变的美观;2)程序只需记忆很少的方法名,方便调用;

3、方法的执行原理:

 1)方法在调用的时候,才会给该方法在内存中分配空间。如果这个方法只是定义没有调用,则不会在内存中分配空间。
 2)方法在调用的时候在“栈”中分配空间,(jvm内存中有一块内存是栈内存)方法调用其实就是“压栈”意味着方法调用;
 3)方法结束其实就是“弹栈”,意味着方法结束。最后一个弹的肯定是最先进去的。  

4、方法的递归

 方法的递归:就是方法自身调用自身。
 递归因为没有结束的条件,所以一直压栈,而没有弹栈,导致内存溢出错误。所以递归必须要有结束条件。
备注:递归每使用一次就会发生一次压栈,但是不适用递归的该例子只发生了一次压栈,所以不使用递归能完成的就不使用递归,递归的运行效率不是很高。但是有些时候是必须使用递归的:让你做一个程序,查询文件夹里面有哪些文件

不使用递归求1到N的和

public static void main(String[] args) {
  //计算1-N的求和
  
  int reValue=method1(10); 
  System.out.println(reValue);
  
 }

 public static int method1(int n){
  int sum=0;
  for(int i=0;i<=n;i++){
   sum+=i;
  }
  return sum;
 }
View Code

  使用递归求n的和

 public static void main(String[] args) {
  int reValue=method2(10);
  System.out.println(reValue);
 } 
 public static int method2(int n){
  if(n==1){
   return 1;
  }
  return n+method2(n-1);
 }
View Code

 使用递归实现文件的复制

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
使用递归复制某个目录下所有的子目录和子文件
*/
public class FileInputStreamTest05 {
   public static void main(String[] args)  {
     File f=new File("E:/工作资料/入职必学/移动平台知识");
     method(f);
 }
 public static void method(File f){
    //如果是文件则拷贝
    if(f.isFile()){
     String filePath=f.getAbsolutePath();
     String newFilePath="D"+filePath.substring(1);
     File parentFile=new File(newFilePath).getParentFile();
     //如果父路径文件不存在则创建
     if(!parentFile.exists()){
        parentFile.mkdirs();
     }
     FileInputStream fis=null;
     FileOutputStream fos=null;
     try {
        fis=new FileInputStream(filePath);
     } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     }
     try {
        fos=new FileOutputStream(newFilePath);
     } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     }
     //复制
     byte[] bytes=new byte[102400];
     int temp=0;
     try {
        while((temp=fis.read(bytes))!=-1){
         fos.write(bytes, 0, temp);
      }
      fos.flush();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }finally{
        if(fis!=null){
         try {
         fis.close();
         } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }
    }
      if(fos!=null){
         try {
          fis.close();
       } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       }
    }
   }
  }else{
     //如是目录
     File[] fs=f.listFiles();
     for(File subFile:fs){
    
      method(subFile);
   }
  }
 }
}
View Code

 

posted @ 2016-12-12 20:49  爱笑的berg  阅读(335)  评论(0编辑  收藏  举报