方法的形式引數
-
形式引數是基本資料型別
-
形式引數是引用型別
(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(); // 呼叫方式:鏈式呼叫
}
}