JAVA基础-U7 面向对象编程(基础部分)-成员方法

成员方法
快速入门
  1. 添加speak成员方法,输出“我是一个好人”
  2. 添加cal01成员方法,可以计算从1+…+1000的结果
  3. 添加cal02成员方法,该方法可以接受一个数n,计算从1加到n的结果
  4. 添加getSum成员方法,可以计算两个数的和
import java.util.Scanner;

public class Method01{

	public static void main(String[] args) {

		Person p1 = new Person();
		p1.speak();//调用方法
		p1.cal01();
		p1.cal02(5);//d调用方法,并给n = 5

		int returnRes = p1.getSum(10, 20);
		System.out.println("getSum 计算结果:" + returnRes);
	}
}

class Person{
	String name;
	int age;
	//public表示方法是公开,void表示方法没有返回值
	//speak是方法名,()是形参列表
	public void speak(){
		System.out.println("我是一个好人");
	}

	public void cal01(){
		int res = 0;
		for (int i = 1; i <= 1000; i++) {
			res += i;
		}
		System.out.println("cal01 计算结果 = " + res);
	}

	//(int n)表示当前有一个形参,可以接受用户输入
	public void cal02(int n){
		int res = 0;
		for (int i = 1; i <= n; i++) {
			res += i;
		}
		System.out.println("cal02 计算结果 = " + res);
	}

	//int表示方法执行后返回一个int
	//(int num1, int num2)有两个形参,可以接受用户传入的两个数
	//return res;表示把res的值返回
	public int getSum(int num1, int num2){
		int res = num1 + num2;
		return res;
	}
}

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jGKhx3K-1685258389357)(C:/Users/苏逸云/AppData/Roaming/Typora/typora-user-images/image-20230507162646500.png)]


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

成员方法的定义
访问修饰符 返回数据类型 方法名(形参列表){//方法体
	语句;
    return 返回值;//return语句不是必须的,void就没有返回值
}

注意事项和使用细节
  • 返回数据类型

    1. 一个方法最多有一个返回值(但是想要返回多个数据的话,可以将多个数组存入数组,返回数组)
    2. 返回类型可以为任意类型,包括基本类型和引用类型(数组,对象)
    3. 如果方法要求必须返回数据类型,则方法体中的最后执行语句必须为return;而且要求返回值类型必须和return中的值类型一致或相兼容
    4. 如果方法是void,则方法体中可以没有return语句,或者只写return;
  • 方法名

    遵循驼峰命名法

  • 形参列表

    1. 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开
    2. 参数类型可以是任意类型,包括基本类型和引用类型(数组,对象)
    3. 调用带参数的方法时,一定对应着参数列表,传入相同类型或兼容类型的参数
    4. 方法定义时的参数成为形式参数,简称形参;方法调用时的参数成为实际参数,简称实参。实参和形参的类型要一致或者兼容,个数顺序必须一致
  • 方法体

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

  • 方法调用

    1. 同一个类中的方法调用:直接调用

    2. 跨类中的方法调用,A类调用B类方法:需要通过对象名调用。

      eg.
      class A{
      	B b = new B();
      	b.print();
      }
      class B{...}
      
    3. 特别说明一下,跨类的方法调用和方法的访问修饰符有关,以后细说


方法练习题
  1. 编写类AA,有一个方法:判断一个数是奇数odd还是偶数,返回boolean
  2. 根据行、列,字符,打印对应行数和列数的字符。比如:行:4,列:4,字符#
public class MethodExercise01{

	public static void main(String[] args) {

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

		a.print(4, 4, '#');
		
	}
}


class AA{
	/*编写类AA,有一个方法:判断一个数是奇数odd还是偶数,返回boolean*/
	//1. 方法的返回类型:boolean
	//2. 方法的名字:isOdd
	//3. 方法的形参:(int num)\
	//4. 方法体 判断
	public boolean isOdd(int num){
		/*if (num % 2 != 0) {
			return true;
		}else{
			return false;
		}
		*/

		//return num % 2 != 0 ? true; false;
		return num % 2 != 0; //因为返回值是boolean,所以是真的就是返回true,假的就会返回false
	}

	//根据行、列,字符,打印对应行数和列数的字符。比如:行:4,列:4,字符#
	//1. 方法的返回类型:void
	//2. 方法的名字:print
	//3. 方法的形参:(int row, int col, char c)
	//4. 方法体 循环
	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();
		}
	}
}

成员方法传参机制
  • 基本数据类型,传递的是值拷贝,形参的任何改变不影响实参

    • 案例

    •   public void swap(int a, int b){}//形参再怎么改变,也不影响实参
      
  • 引用数据类型,传递的是地址,可以通过形参改变实参

    • 案例

    •   public int[] test01(int[] a){}//引用类型
        public void test02(Person p){}//形参改变实参
      

练习

public class MethodParameter01{

	public static void main(String[] args) {
		Person p = new Person();
		p.name = "Jack";
		p.age = 10;
		B b = new B();
		/*b.test01(p);
		System.out.println("main p.age = " + p.age);//20000, 因为是引用数据类型*/
		b.test02(p);
		System.out.println("main p.age = " + p.age);//10, 因为test02里的p所在的是一个新的栈,它指向了null,但是main的p还指向堆
		b.test03(p);
		System.out.println("main p.age = " + p.age);//10, 因为test03里的p在堆开辟了一个新的空间,与main指向的堆空间无关

	}
}

class Person{
	String name;
	int age;
}
class B{
	public void test01(Person p){
		p.age = 20000;
		System.out.println("test 02 p.age = " + p.age);//20000
	}
	public void test02(Person p){
		p = null;
	}
	public void test03(Person p){
		p = new Person();
		p.age = 20000;
	}
}

克隆对象

编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。克隆对象,注意要求得到的新对象和原来的对象是两个独立的对象,只是他们的属性相同。

public class MethodParameter02{

	public static void main(String[] args) {
		Person p = new Person();
		p.name = "Jack";
		p.age = 10;
		MyTools tool = new MyTools();
		Person p2 = new Person();
		p2 = tool.copyPerson(p);
		System.out.println("p2 name:" + p2.name);
		System.out.println("p2 age:" + p2.age);
		//比较p和p2是否为同一个,false即不是同一个
		System.out.println(p == p2);//false
	}
}

class Person{
	String name;
	int age;
}

class MyTools{
	/*编写一个方法copyPerson,可以复制一个Person对象,返回复制的对象。
	克隆对象,注意要求得到的新对象和原来的对象是两个独立的对象,只是他们的属性相同。*/
	public Person copyPerson(Person p){
		Person p2 = new Person();
		p2.name = p.name;
		p2.age = p.age;
		return p2;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值