方法的形式参数的问题研究

方法的形式参数

本章将从如下两个方面进行研究:

  1. 形式参数是基本数据类型
  2. 形式参数是引用类型
  • 1.形式参数是基本数据类型
    基本数据类型作为方法的形参,形式参数的改变不影响实际参数。下面举例说明:
	public static void main(String[] args) {
		int a = 10;
		int b = 20;
		System.out.println(a);
		System.out.println(b);
		change(a, b);
		System.out.println(a);
		System.out.println(b);
	}

	public static void change(int a,int b){
		  a = b ;	
		  b = a+ b; 
		  System.out.println("a:"+a+",b:"+b);
	}

此时,在调用change()方法时,分别给变量“a”和“b”做了赋值的转换。作为局部变量,它的生命周期随着方法的调用而存在,随着方法的调用完毕而消失。在内存中的体现,就是在栈内存中调用完毕后,里面局部变量就立即被GC垃圾回收器回收。所以,此时变量“a”和“b”的值不会发生改变。运行结果如下:
在这里插入图片描述

  • 2.形式参数是引用类型
    引用数据类型作为形式参数,形式参数的改变,会直接影响实际参数!
    1).当引用类型是一个具体类的时候,实际参数的传递就需要传递该类的具体对象。
package com.qianfeng_0609_03;

class Student{
	
	public void study() {
		System.out.println("认真学习javaSE");
	}
}

class StudentDemo{
	
	public void show(Student s) {
		s.study();
	}
}

//需求:访问StudentDemo中的show()方法	

如上所示。首先定义了一个具体的类Student,有一个方法study(),在另一个类StudentDemo中,存在show()方法调用了study()。此程序的需求是:访问StudentDemo中的show()方法。那么我们就需要创建类的对象,然后把对象作为形参传递,达成需求。

public class StudentTest {

	public static void main(String[] args) {
	
		StudentDemo sd = new StudentDemo();
		Student student = new Student();
		sd.show(student);	
	}
}

结果如下:
在这里插入图片描述
2).当引用类型是一个抽象类的时候,实际参数的传递就需要传递该抽象类的子类对象。
需求:访问TeacherDemo中的show()方法

abstract class Teacher{
	public void teaching() {
		System.out.println("认真教书...");
	}
}

class TeacherDemo{
	public void show(Teacher t) {
		t.teaching();
	}
}

如上所示。定义了一个抽象类Teacher,有一个方法teaching(),在另一个类TeacherDemo中,存在show()方法调用了teaching()。此时,形式参数传递的是一个抽象类,不能实例化,所以我们不能再通过创建对象的方式访问。那么就需要子类继承的方式完成实例化。

class Person extends Teacher{
	
	public void teaching() {
		System.out.println("认真教javaSE");
	}
}

public class TeacherTest {

	public static void main(String[] args) {
	
		TeacherDemo td = new TeacherDemo();
		Teacher teacher = new Person();
		td.show(teacher);
	}

}

此时我们自定义了一个类Person,继承了Teacher类,作为它的子类来实现实例化,并且子类重写了父类的方法。
在这里插入图片描述
3).当引用类型是一个接口的时候,实际参数的传递就需要传递该接口的子实现类对象。
需求:访问ChildDemo中的playing()方法。

interface ClassMate{
	public abstract void play();
}

class ChildDemo{
	public void playing(ClassMate a) {
		a.play();
	}
}

如上所示。存在一个接口ClassMate,在类ChildDemo中,把接口作为形式参数传递,接口不能实例化,它的实例化需要借助子实现类。所以我们需要自定义一个类实现接口。

class Child implements ClassMate{
	public void play(){
		System.out.println("喜欢打篮球");
	}
}
public class School {
	public static void main(String[] args) {
	
		ChildDemo cd = new ChildDemo();
		ClassMate classmate = new Child();
		cd.playing(classmate);
	}
}

运行结果如下:
在这里插入图片描述
学习心得:
作为零基础的初学者,我觉得在学习的初期,上课的时候一定要听老师讲解,慢慢的理解基础概念,课后多练习,只有多练了,才能在做项目的时候熟练的写出需要的代码一定要多敲代码,不断地练习来巩固每天学习的内容,要充分理解其中的方式方法,明白代码表达的意思,要学会怎么用,在做题的时候要有明确的思路,不至于无从下手。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值