方法引用的 4 + 2 種方式
對於類來說,有4種方式
1. 物件引用成員方法
2. 類名引用靜態方法
3. super引用父類方法
4. this引用本類方法
對於構造器來說,有2種方法。
1. 類的構造器引用
2. 陣列的構造器引用。
1 物件引用成員方法詳解
物件引用成員方法
物件名::方法名
*/public class demo01methodref
public class myclass
}
public static void method(printable printable)
}
public inte***ce printable
//練習,lambada表示式,匿名內部類,方法的引用 這裡總結了乙個練習方法,一般的列印輸出都能練習到方法的引用,增加應用頻率
//物件引用成員方法 lambada自己不重寫了。找了個物件,物件裡有個方法居然跟自己的抽象方法相似,那麼如果目的一致,
就可以把它當作重寫的,目的不一致,那麼引用後的結果就是物件的成員方法的,如果引數不要了,物件裡的方法沒有用到該引數,那裡面是啥內容,方法引用後就是啥,比如列印hello 算1+1=2. 也算是找到了乙個高檔方法表達簡單方法的途徑,只不過該簡單方法捨棄了自己的引數,或者歪用了引數。這麼想,寫抽象介面利用方法的引用和lambada表示式,就是把簡單的問題變複雜,直接算1+1=2,我非要建立介面,抽象方法當引數傳入成員方法,成員方法呼叫時再整個類,創個物件,做個成員方法,引用一下。
public class demo02methodref//物件的類// });
method((s) -> system.out.println("使用lambada手忙腳亂的" + s));
// 執行:使用lambada手忙腳亂的處理檔案
//注意需要重寫的run方法是有引數str的
// a代表有引數,
assistant a = new assistant();
// method(s -> system.out.println("使用lambda表示式手忙腳亂的處理" + s));
method(s -> a.dofile(s));//助手正在井井有條的處理
method(a::dofile);// 助手正在井井有條的處理
//介面作為引數傳進來,lambada表示式裡是需要重寫的抽象方法。然而抽象方法想要做的事和物件的成員方法
//不一致,返回值和引數一致,成員方法把引數拋棄了,該引用也就是重寫過程中拋棄了引數,直接執行方法體的內容
// 該方法可以強行造格式,比如寫出來helloworld 。介面:void(string) 傳參賦值可以任意賦值,建立乙個列印
// helloworld的類。成員方法 void method(string) 方法體sout(helloword) 。則本來可以建立物件
//列印類名.method出來,我們可以用lambada表示式這一高檔的方法了。(string s)->類名.method(s)
//還可以用方法引用這種高檔的方法了。類名;;方法名 至此,好像沒有介面方法什麼事。那麼我們能把介面省
//略直接列印不?登出之後發現並不行。。。。,那麼匿名內部類是否可以,我試試
method(new helper()
});// 試驗之後發現可以,不過這個丟參讓人一眼就看出來了。不怎麼好
}public static void method(helper helper)
}
ackage cn.itcast.demo06b_物件引用成員方法;//函式介面public class assistant
}
public inte***ce helper2 類名引用靜態方法
類名引用靜態方法//函式介面類名::靜態方法
*/public class demo01methodref
public static void method(int num, calculator c)
}
public inte***ce calculator
public class demo02methodref//自定義的函式介面,裡面寫了個檢查字串的方法,});method(" ", s -> stringunits.isblank(s));//類名引用靜態方法,拿到s對s進行操作,
// 所要做的正好是s要做的,我可以改,只要是抽象方法的返回值型別,引數型別的方法的類都能引用
// 或者說,只要是該類中的方法,類似重寫了介面中的方法,就可以用該格式引用
method(" ",stringunits::isblank);//
}public static void method(string str, stringchecker checker)
}
public inte***ce stringchecker//新建立的類。類引用靜態方法,那麼也就是主函式不建立該類的物件唄,不建立物件
//那麼也就只能引用靜態方法了。只有靜態方法能在不建立物件的情況下點出來執行
//介面要引用的類
可以看到這個類是點不出來非靜態方法的。那麼類名引用靜態方法格式和物件引用成員方法是一樣的,區別就是物件和類的區別。。
3super引用父類方法
//介面作為引數傳入子類方法了,子類沒有能力重寫,父類重寫,沒有能力呼叫,主函式呼叫。。。
/* super引用父類方法格式://函式介面super::父類方法
*///其呼叫作用的主函式,裡面就是執行了一下子類方法,子類中實現了方法的引用
public class demo01methodref
}
public inte***ce greetable//父類
public class person//子類 ,子類要用引用,方法中應該有重寫介面方法的類似方法,它沒有,借父類的sayhello,那麼格式。super::sayhello}
public class student extends person4 this 引用本類方法public static void method(greetable greetable)
}
*/ main函式呼叫稱為本類的那個類public class demo01ref
}
//我是本類。介面傳參到類,我自己的類裡面有乙個方法重寫的跟介面中想重寫的相似,this::方法名 那麼我是不是也可本類名::方法名//函式介面rich上面 有類引用靜態方法,然而本類中好像沒有靜態方法,是不是也可以呢,我試試,然而結果並不可以。。
public class man
public void man(rich rich)
public void method()
}
public inte***ce rich
*4+1(上面是前4個)this引用本類的方法格式:
this::方法名
*/public class demo01ref
*類的構造器引用
類名::new
*/public class demo01classconstrutionref
});//用匿名內部類表示的創初始化物件。因不能new 介面物件。
// lanbada表示式
method((name, age) -> new person(name, age));
/* 引數 引數
* */
}public static void method(personbuilder personbuilder)
}
//介面,該介面的抽象方法想建立乙個物件,那麼重寫方法就要。。。。4+2 陣列的構造器引用public inte***ce personbuilder
/*//函式介面陣列的構造器引用
資料型別::new
*/public class demo01arrayref
});method(int::new);
method((len) -> new int[len]);
}public static void method(arraybuilder arraybuilder)
}
public inte***ce arraybuilder
4 2 shell中的引用
4.2 shell中的引用 shell中的引用 在bash中有很多特殊字元,這些特殊字元就具有特殊含義。引用就是通知shell將這些特殊字元當作普通字元來處理。轉義字元 如果將 放到特殊字元前面,shell就忽略與 相挨的乙個特殊字元的原有含義,把它們當作普通字元對待。ll file mkdir 1...
C 引用物件成員的三種方式
在程式中經常需要訪問物件中的成員。訪問物件中的成員可以有3種方法 1.通過物件名和成員運算子訪問物件中的成員 2.通過指向物件的指標訪問物件中的成員 3.通過物件的引用變數訪問物件中的成員。通過物件名和成員運算子訪問物件中的成員 例如在程式中可以寫出以下語句 stud1.num 1001 假設num...
C 引用物件成員的三種方式
在程式中經常需要訪問物件中的成員。訪問物件中的成員可以有3種方法 1.通過物件名和成員運算子訪問物件中的成員 2.通過指向物件的指標訪問物件中的成員 3.通過物件的引用變數訪問物件中的成員。通過物件名和成員運算子訪問物件中的成員 例如在程式中可以寫出以下語句 stud1.num 1001 假設num...