0024 成员方法及传参机制

 

 

 

 

 

 

 

/*    成员方法
    在某些情况下,我们需要定义成员方法(简称方法)。比如人类:除了属性外(姓名、年龄)
    还有一些行为(说话、跑步、学习等),这时就要用成员方法才能完成

    方法的好处:
    1.提高代码复用性
    2.将实现的细节封装起来,供其他用户调用

    基本语法:
    访问修饰符(4种) 返回数据类型 方法名 (形参列表){
        方法体语句;
        return 返回值;
    }
    1.形参列表:表示成员输入的值
    2.返回数据类型:表示成员方法输出,void表示没有返回值
    3.方法主体:表示为实现某一功能的代码块
    4.return语句不是必须的

    相关细节:
    访问修饰符
    1.访问修饰符作用是控制方法使用的范围,如果不写为默认访问修饰符default

    返回数据类型
    1一个方法最多有一个返回值,若要返回多个值,可以返回数组
    2.返回类型可以为任意类型,包括基本类型和引用类型
    3.如果方法要求有返回数据类型,则最后执行句必须为return值,
      且要求返回值类型必须和return的值类型一致或兼容(自动转换)
    4.如果方法为void,则方法体中可以没有return语句,或者只写return

    方法名
    最好见名知义,表达除该功能的意思,开发中按照规范

    参数列表
    1.一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开,如getSum(int n1,int n2)
    2.参数类型可以为任意类型
    3.调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数
    4.方法定义时的参数称为形式参数,方法调用时的参数称为实际参数,实参和形参类型个数、顺序要一致

    方法体
    里面写完成功能的具体语句,可以为输入、输出、变量、运算、循环....但不能再定义方法,即方法不能嵌套定义

    方法调用
    1.同一个类中的方法可直接调用
    2.跨类中的方法A类调用B类需要通过对象名调用:对象名.方法名(参数)

    方法调用机制:
    1.当程序执行到方法时,就会开辟一个独立的空间(栈空间)
    2.当方法执行完毕,或者执行到return语句时,就会返回,返回是返回到调用的方法
    3.返回后继续执行方法后面的代码
    4.当main方法(栈)执行完毕,整个程序退出
*/

//    演示:添加study成员方法,输出“我正在学Java”
/*
public class Method{

    public static void main(String[] args) {
        //先创建对象,然后调用方法即可
        Person p1 = new Person();
        p1.study();//调用方法

    }
}
class Person{
    String name;
    int age;

    public void study(){
        System.out.println("我正在学Java");
    }
}
    // 1.public表示方法是公开的
    // 2.void表示方法没有返回值
    // 3.study():study是方法名,()形参列表
    // 4.{}为方法体,写执行的代码块
    // 5.方法写好后不去调用就不会输出

/*    练习:编写类AA,有一个方法:方法名为judge 判断一个数时奇数还是偶数,返回Boolean
    思路
    1.返回类型为Boolean
    2.方法名 judge
    3.形参(int num)
    4.方法体 判断
*/
/*
public class Method{

    public static void main(String[] args) {

        AA a = new AA();
        if(a.judge(1)){
            System.out.println("是奇数");
        }else{
            System.out.println("是偶数");
        }
    }
}

class AA{
    public boolean judge(int num){
        if(num % 2 != 0){
            return true;
        }else{
            return false;
        }
        //或者使用三元运算符 return num % 2 != 0 ? true;false;
    }

}

/*    练习:根据行、列、字符打印对应的行数和列数的字符
    如:打印4行4列的字符#
        ####
        ####
        ####
        ####
    思路
    1.方法返回类型void
    2.方法名字 print
    3.方法形参(int row,int col,char c)
    4.方法体 循环
*/
/*
public class Method{

    public static void main(String[] args) {

        AA a = new AA();
        a.print(4,4,'#');
    }
}
class AA{
    public void print(int row,int col,char c){
        for(int i = 0;i < row;i++){
            for(int j = 0;j < col;j++){    //输出每一行
                System.out.print(c);
            }
            System.out.println();    //换行
        }
    }
}
*/
//    成员方法传参机制
//    1.基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参    
/*
public class Method{

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        AA a1 = new AA();    //创建对象
        a1.swap(a,b);    //调用方法swap
        System.out.println("main方法中a=" + a + "b=" + b);    //a=10 b=20
    }
}
class AA{
    public void swap(int a,int b){
        int temp = a;
        a = b;
        b = temp;
        System.out.println("swap方法中a=" + a + "b=" + b);    //a=20 b=10

    }
}
*/
//    2.引用数据类型,传递的是地址(传递也是值,但值是地址),形参的改变影响实参
/*
public class Method{

    public static void main(String[] args) {

        BB b1 = new BB();
        int[] arr = {1, 2, 3};
        b1.test(arr);
        System.out.println("main数组为");
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
    }
}

class BB{
    public void test(int[] arr){
        arr[0] = 200;
        System.out.println("test数组为");
        for(int i = 0;i < arr.length;i++){
            System.out.print(arr[i] + "\t");
        }
        System.out.println();
    }

}
*/
//    克隆对象(两个对象相互独立,属性相同)
public class Method{

    public static void main(String[] args) {

        Person p1 = new Person();
        p1.name = "huang";
        p1.age = 20;
        Tools tool = new Tools();
        Person p2 = tool.copyPerson(p1);
        System.out.println("p的属性 name=" + p1.name + " age=" + p1.age);
        System.out.println("p2的属性 name=" + p2.name + " age=" + p2.age);
        System.out.println(p1 == p2);    //比较是否相同
    }
}

class Person{
    String name;
    int age;
}
/*    思路
    1.返回类型 Person
    2.名字 copyPerson
    3.形参(Person p)
    4.方法体,创建新对象并复制属性,返回
*/
class Tools{
    public Person copyPerson(Person p1){
        Person p2 = new Person();
        p2.name = p1.name;
        p2.age = p1.age;

        return p2;
    }
}

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nzmzmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值