zoukankan      html  css  js  c++  java
  • 三、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
    细水长流,打磨濡染,渐趋极致,才是一个人最好的状态。
  • 相关阅读:
    AWS re:Invent 2019 召开 | 云原生生态周报 Vol. 30
    更强、更稳、更高效:解读 etcd 技术升级的三驾马车
    Service Mesh 是新瓶装旧酒吗?
    从零开始入门 K8s | 深入剖析 Linux 容器
    阿里云上万个 Kubernetes 集群大规模管理实践
    CNCF 官方大使张磊:什么是云原生?
    函数计算自动化运维实战 3 -- 事件触发自动创建快照
    函数计算自动化运维实战 2 -- 事件触发 eip 自动转移
    函数计算自动化运维实战1 -- 定时任务
    273. Integer to English Words
  • 原文地址:https://www.cnblogs.com/jiarui-zjb/p/6165934.html
Copyright © 2011-2022 走看看