Java基础之方法

目录

1.1 方法是什么

1.2 方法的核心内容:代码段,参数,返回值。

1.3 方法的声明格式

1.4 方法调用格式

1.5值传递与引用传递

1.6 注释(方法主用文档注释)

1.7 练习 

① 给定一个数组,删除数组中指定一个元素。

② 计算阶乘的累加:1!+2!+3!+……+n!

③ 图形的打印

1.8 方法的可变长参数

1.9 方法的递归调用

案例:计算n!


1.1 方法是什么

方法是具有某种特定功能的代码段。某段代码功能经常使用,因此使用{}花括号,将这段代码包起来,

起个名字,以后就使用这个名字来代替这段代码。

面向对象语言的三大特性:封装,继承,多态。方法就是对实现某一功能的重复的代码的封装

1.2 方法的核心内容:代码段,参数,返回值。

第一个核心:代码段。 实现某一功能的一段程序  --- 方法

第二个核心:输入的数据:代码段实现功能时需要用的数据。外部程序将这个数据提供给代码段。 --- 参数

第三个核心:输出的数据:代码段实现功能后,都会形成新的数据。外部程序也需要接收到这个新的数据。--- 返回值

1.3 方法的声明格式

[public static] 返回值类型  方法名(参数列表){

代码段;方法体;

}

① 返回值类型:用来描述一个方法执行完成之后,提供给调用者的数据的类型。

int,String,…:返回值的类型描述。

void : 表示当前方法没有返回值。

② 参数列表 : 用来描述一个方法执行时,需要的数据个数和类型。

不需要参数: void 方法名( ){…}

需要一个参数: void 方法名(数据类型  参数名){…}

需要二个参数: void 方法名(数据类型  参数名, 数据类型  参数名){…}

在方法中每一个参数就是一个临时变量

作用域: 就只有这个方法的方法体。

生命周期:方法调用时创建,方法调用完销毁。

作用域看局部变量和全局变量:http://c.biancheng.net/view/1858.html

③ 方法名:按命名规范编写就行。见名知意,驼峰命名,第一个字母小写。

④ 方法体:实现方法功能的代码段。

使用return 关键字确定返回值。

格式: return 值;

1.4 方法调用格式

调用一次方法,就表示执行一次方法。方法的调用就是按方法名调用。

① 无参无返回值: 方法名();

② 有参无返回值: 方法名(参数值,参数值)

声明:void print(int i){…}   int i--形参

调用:print(10); 10--实参

形参与实参:https://blog.csdn.net/qq_53350943/article/details/128942833?spm=1001.2014.3001.5502

调用时型参与实参实际操作是  int i = 10;  使用实参为型参赋值。

③ 有返回值:在调用方法时,就需要使用一个变量来接收这个返回值。

类型 变量 = 方法调用();

例如:声明:int add(int i , int j ){…}

调用:int x = add(10,20);

1.5值传递与引用传递

在Java中数据类型分为 基本数据类型 和 引用数据类型 二个大类。

① 基本数据类型做为参数时----值传递

基本数据类型做参数时,参用值传递,只是将变量的值,做一个副本传递给方法的参数。

形参与实参 实际上是没什么关系的。形参与实参是二个不同的变量。 

② 引用数据类型做为参数时---引用传递

int[] a = new int[3];

a是数组名,是一个引用。  

new是实例化关键字。实例化就是在内存中开辟空间的过程。

1.6 注释(方法主用文档注释)

① 单行注释://

② 多行注释:/*   */

单行和多行是为了读源文件编写的注释。给编写当前源文件的程序员使用的。

③ 文档注释:/**   */

文档注释是为使用当前编写的方法写的注释。是给方法的调用者使用的。

/**
 * 这是一个计算二个数相加的方法
 * @param i 操作数1
 * @param j 操作数2
 * @return 返回二个数的和
 */
public static int add(int i ,int j){
    //表示当前方法的返回值,返回值是二个数的和。方法遇到return方法执行结束。
    return i+j;
}

1.7 练习 

① 给定一个数组,删除数组中指定一个元素。

 /**
     * 在数组中找到指定数值索引的方法
     * @param a 被查询的数组
     * @param x 指定要查询的数值
     * @return 数值在数组中的第一次出现的索引位置。如果没有找到返回-1
     */
    public static int findIndex(int[] a ,int x){
        int index = -1;
        for (int i = 0;i<a.length;i++) {
            if(a[i]==-1){
                break;
            }
            if(x == a[i]){
                index = i;
                break;
            }
        }
        return index;
    }

    /**
     * 删除数组中指定索引位的数值。空位使用-1补
     * @param index 要删除数据的索引
     * @param a 要删除数据的数组
     */
    public static void delByIndex(int[] a,int index){
        //使用 a[i] = a[i+1] 这个公式
        for(int i = index ;i< a.length - 1 ; i++){
            a[i] = a[i+1];
        }
        //第三步:将最后一位赋值为-1。
        a[a.length-1] = -1;
    }

    /**
     * 输出数组的内容
     * @param a 数组
     */
    public static void println(int[] a){
        for (int x : a ) {
            System.out.print(x+"\t");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int x = 20;
        int [] a = {100,50,20,10,20,-1,-1};

        int index = findIndex(a,x) ;//调用方法获取索引

        if(index == -1){
            System.out.println("没找到!");
        }else {
            delByIndex(a,index);
        }
        println(a);
    }

② 计算阶乘的累加:1!+2!+3!+……+n!

/**
 * 这是一个计算阶乘的方法
 * @param n 参数,指定计算几的阶乘
 * @return n!
 */
public static int factorial(int n) {
        int f=1;
        for (int i=1;i<=n;i++){
            f*=i;
        }
        return f;
    }
    public static void main(String[] args) {
//计算5的阶乘
//        int a=factorial(5);
//        System.out.println(a);
//计算1-5的阶乘和
        int sum=0;
        int n=5;
        for (int i=1;i<=n;i++){
            sum+=factorial(i);
        }
        System.out.println(sum);
    }

③ 图形的打印

 /**
     * 在一行上打印图形的方法
     *
     * @param s 打印的内容
     * @param n 打印的个数
     */
    public static void print(String s, int n) {
        for (int i = 1; i <= n; i++) {
            System.out.print(s + " ");
        }
    }

    public static void main(String[] args) {
        //打印三角形
        for (int i = 1; i <= 5; i++) {
            print("*", i);
            System.out.println();
        }
        System.out.println("--------------");
        //打????
        for (int i = 1; i <= 5; i++) {
            print(" ", 5 - i);
            print("^", 2 * i - 1);
            System.out.println();
        }
    }

1.8 方法的可变长参数

语法格式:

public static void add(int a); //其中 int… a 就是一个可变长参数。

调用时:可变长参数的实参个数是可以随意的。

add();

add(10);

add(10,20);

可变长参数在Java方法中是以数组方式存在的。

例:[I@4554617c

只有左边[号,说明是一个数组。 如果[ ]都有,说明是一个集合。

I 表示当前数组元素类型是一个int类型。

注意:一个方法中只能有一个可变长参数。可变长参数的位置必须是形参的最后一个。

1.9 方法的递归调用

递归调用:在方法体中调用自身方法的一种调用方式。

调用案例:声明一个方法

public static void dis(){

dis();

}

案例:计算n!

利用n! = n * (n-1)! 这个公式来计算阶乘。

递归调用是先根据公式进行递归,到达源点时,必须有一个明确的返回值。

从源点开始向上递推操作。递推就是向上给明确的取值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值