形式参数和返回值类型的对比

方法的形式参数

  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+10 ;
          b = a-b;
		  System.out.println("a:"+a+",b:"+b);
	}
在调用change()方法时,分别给变量“a”和“b”做了赋值的转换。作为局部变量,它的生命周期随着方法的调用而存在,随着方法的调用完毕而消失。在内存中的体现,就是在栈内存中调用完毕后,里面局部变量就立即被GC垃圾回收器回收。所以,此时变量“a”和“b”的值不会发生改变。运行结果如下:

(2)形式参数是引用类型

引用类型:
    类:当你看到一个类作为方法参数类型的时候,将来调用时需要传递该类及其该类的子类对象
    class Demo1 {
    public void fun1() {
        System.out.println("好好学习,天天向上!");
    }
}
class Demo1Zi extends Demo1{

}
class Demo1Test {
    public void show(Demo1 demo1) { //Demo1 demo1 = new Demo1Zi()
        demo1.fun1();
    }
}
public class StudentDemo1 {
    public static void main(String[] args) {
        Demo1Test demo1Test = new Demo1Test();
        demo1Test.show(new Demo1());
        demo1Test.show(new Demo1Zi());
    }
}

    抽象类:当你看到一个抽象类作为方法的参数类型的时候,将来调用时需要传递继承该抽象类的具体子类对象
    abstract class Demo2{
    public abstract void fun1();
}

class Demo2Zi extends Demo2{
    @Override
    public void fun1() {
        System.out.println("我真棒!");
    }
}

class Student2{
    public void show(Demo2 demo2){ //Demo2 demo2 = new Demo2Zi()
        demo2.fun1();
    }
}

public class StudentDemo2 {
    public static void main(String[] args) {
        Student2 student2 = new Student2();
        student2.show(new Demo2Zi());
    }
}
    接口:当你看到一个接口作为方法参数类型的时候,将来调用时需要传递实现该接口的具体子类对象
    interface Inter1{
    public abstract void fun1();
}

class Inter1Impl implements Inter1{
    @Override
    public void fun1() {
        System.out.println("Hello World!");
    }
}

class Student3{
    public void show(Inter1 inter1){ //Inter1 inter1 = new Inter1Impl() 接口多态
        inter1.fun1();
    }
}

public class StudentDemo3 {
    public static void main(String[] args) {
        Student3 student3 = new Student3();
        student3.show(new Inter1Impl());
    }
}
    

返回值类型

1、返回值类型是基本数据类型

(1)包括 byte, short, int, long, float, double, char, boolean 等原始数据类型,方法返回的是这些基本类型的具体数值。

(2)无返回值类型:

使用 void 关键字表示,这类方法不返回任何值,主要用于执行某种操作,如打印信息、修改对象状态等

若一个方法没有返回值,return可以省略不写

2、返回值类型是引用数据类型

类:当你看到一个类作为方法的返回值类型的时候,将来方法内部应该返回该类或该类的子类对象
class Student1{
    public void fun1(){
        System.out.println("欢迎大家来到数加学院!");
    }
}
class Demo1{
    public Student1 show(){
        return new Student1();
    }
}
public class StudentDemo1 {
    public static void main(String[] args) {
        Demo1 demo1 = new Demo1();
        Student1 s1 = demo1.show(); // Student1 s1 = new Student1()
        s1.fun1();
    }
}

抽象类:当你看到一个抽象类作为方法的返回值类型的时候,将来方法内部应该返回继承该抽象类的具体子类对象
abstract class Demo2{
    public abstract void fun1();
}
class Demo2Zi extends Demo2 {
    @Override
    public void fun1() {
        System.out.println("小祝是阿里巴巴的高级开发程序员");
    }
}
    class Student2 {
        public Demo2 show() {
            return new Demo2Zi();
        }
    }
    public class StudentDemo2 {
        public static void main(String[] args) {
            Student2 student2 = new Student2();
            Demo2 d1 = student2.show(); //Demo2 d1 = new Demo2Zi() 抽象多态
            d1.fun1();
        }
    }
接口:当你看到一个接口作为方法的返回值类型的时候,将来方法内部应该返回实现了该接口的具体子类对象
interface Inter1{
    public abstract void fun1();
}
class Inter1Impl implements Inter1{
    @Override
    public void fun1() {
        System.out.println("昨天南京下冰雹了");
    }
}
class Student3{
    public Inter1 show(){
        return new Inter1Impl();
    }
}
public class StudentDemo3 {
    public static void main(String[] args) {
        Student3 student3 = new Student3();
        Inter1 i1 = student3.show(); //Inter1 i1 = new Inter1Impl() 接口多态
        i1.fun1();
//         new Student3()
//                .show()
//                .fun1(); // 调用方式:链式调用
    }
}
posted @   hello_future  阅读(7)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示