方法的形式参数
本章将从如下两个方面进行研究:
- 形式参数是基本数据类型
- 形式参数是引用类型
- 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);
}
}
运行结果如下:
学习心得:
作为零基础的初学者,我觉得在学习的初期,上课的时候一定要听老师讲解,慢慢的理解基础概念,课后多练习,只有多练了,才能在做项目的时候熟练的写出需要的代码一定要多敲代码,不断地练习来巩固每天学习的内容,要充分理解其中的方式方法,明白代码表达的意思,要学会怎么用,在做题的时候要有明确的思路,不至于无从下手。