方法的形式参数
-
形式参数是基本数据类型
-
形式参数是引用类型
(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、返回值类型是引用数据类型
类:当你看到一个类作为方法的返回值类型的时候,将来方法内部应该返回该类或该类的子类对象
package com.shujia.day10.ketang.bao2;
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(); // 调用方式:链式调用
}
}
标签:对比,fun1,show,void,public,new,返回值,class,形式参数
From: https://www.cnblogs.com/zhuzhuya/p/18347955