zoukankan      html  css  js  c++  java
  • java基础(7)--方法

    方法

    Math.sqrt() 取平方  Math.pow(2,3) 2的3次方

    方法(Method),就是数学函数(Function)。  业务方面: 是功能,是动作,一般采用动词命名。  数据层面:是利用算法操作数据模型,实现业务功能。  方法就是数据算法。

    方法的声明

    方法用于封装特定的逻辑功能。方法的主要要素有:方法名、参数列表和返回值。方法在类中定义,不能在方法中定义。

    语法结构

    修饰符   返回值类型  方法名(参数列表)
    { 
       // 方法体
    }

    方法要素--返回值

    方法调用结束后可以返回一个数据,称之为返回值。方法在声明时必须指定返回值类型。如果方法没有返回值(即方法不需要返回数据),需将返回值类型声明为void,通过return语句返回,return语句的作用在于结束方法并且将数据返回。

    return a+b;  return语句返回该表达式的值

    return; 对于返回值为void的方法也可以使用return语句,此时该语句的作用在于结束方法调用。

    如果方法声明的返回值,必须在方法体使用return 语句返回数据!

    方法要素--参数列表

    方法的参数是指:在调用时传递给方法,需要被方法处理的数据。在定义方法时,需要声明该方法所需要 参数变量。在方法调用时,会将实际的参数值传递给方法的参数变量。必须保证传递参数的类型和个数符合方法的声明。 

    方法的调用过程

    public static int max(int a, int b){....}

    int a=5;  int b=6;

    int max=max(5 , 6);

    (1)为main方法中的便利a b max 分配空间并赋值

    (2)调用方法max,为max方法的参数变量a, b分配空间

    (3)将调用值传入参数变量中

    (4)max方法运行完返回,参数变量空间释放。

    (5)main方法中的max变量得到返回值。

    求斐波那契(Fibonacci) 数列(第n项 等于前两项的和)

    public static long f(long n) {
            long f1 = 1;
            long f2 = 1;
            long fn = 2;
            for(int i = 3; i <= n; i++){
                fn = f1 + f2;
                f1 = f2;
                f2 = fn;
            }
            return fn;
     }

    方法的递归调用

    1. java 的栈是Java进程启动时候在内存中开辟的存储空间。栈内存的利用方式LIFO(后进先出)。ava所有局部变量都在栈中分配(压入), 方法的参数也是局部变量,局部变量在离开作用域时候回收 就是从栈中弹出(删除)。

    2. Java方法调用使用栈实现, 递归调用就是栈实现的

    3. 递归时候要按照递归深度分配全部临时变量, 栈开销很大,性能不好,要注意不要超过栈的大小, 并且一定要给出结束条件, 否则会造成栈溢出错误。

    递归的优点与缺点

    优点:业务问题解决的很优雅 只需要解决一个层次,其他层次问题就递归解决了。

    缺点:大量消耗栈内存空间,不能进行过深层次的递归。否则可能出现栈溢出错误。

    使用递归的要点

    1)不能过深的递归

    2)不能发散递归

    3)必须有结束条件

    案列

    递归实现1+2+...+1000=?  fn(n)=f(n-1)+n

    public static int f(int n) {
            if(n == 1){
                return 1;
            }
            return n + f(n - 1);
    }

    斐波那契

    public static long f1(long n) {
            if(n == 1 || n == 2){
                return 1;
            }
            return f1(n - 1) + f1(n - 2);
    }
    
    public static long f(long n) {
            long f1 = 1;
            long f2 = 1;
            long fn = 1;
            for(int i = 3; i <= n; i++){
                fn = f1 + f2;
                f1 = f2;
                f2 = fn;
            }
            return fn;
    }
  • 相关阅读:
    排序入门练习题3 谁考了第k名 题解
    排序入门练习题2 从大到小排序 题解
    排序入门练习题1 排序 题解
    关于这个博客
    Count Good Substrings
    Long Long Message
    Milk Patterns
    Musical Theme
    Life Forms
    New Distinct Substrings
  • 原文地址:https://www.cnblogs.com/qin-derella/p/6548615.html
Copyright © 2011-2022 走看看