可以事例化調(diào)用! 也能直接調(diào)用!
把要調(diào)用的方法定義為static !
通過類名就可以直接調(diào)用!
如:
Class AA
{
public static void show(String s){
..
System.out.println(s);
}
public void test(){
AA.show("test");
}
}
java類有兩種方法一種是類方法就是用static修飾的,一種是實(shí)例方法,就是沒有static修飾的方法。類方法可以同時(shí)類名.方法名的方式調(diào)用。而實(shí)例方法必須先生存類的實(shí)例在通過實(shí)例.方法名的方式調(diào)用。例如:
public class MethodCall
{
public static void main(String[] args)
{
Test.sayStatic();
Test test = new Test();
test.sayInstance();
}
}
class Test
{
public static void sayStatic()
{
System.out.println("這是一個(gè)靜態(tài)方法。");
}
public void sayInstance()
{
System.out.println("這是一個(gè)實(shí)例方法。");
}
}
public class A{
public void a(){
b();
}
public void b(){
class C{
//。。這個(gè)方法內(nèi)的不能再方法外被實(shí)例化,就像一個(gè)變量一樣,有作用域
}
C c = new C();
}
class D
{
//。
}
public static void main(String[] params)
{
D d = new A().new D();
}
}
這個(gè)從關(guān)鍵字來理解啊,
1. 如果方法定義前面加final,說明你已經(jīng)知道這個(gè)方法提供的功能已經(jīng)滿足你要求,不需要進(jìn)行擴(kuò)展,并且也不允許任何從此類繼承的類來覆寫這個(gè)方法,但是繼承仍然可以繼承這個(gè)方法,也就是說可以直接使用。
2. 如果方法定義前面加static,表示靜態(tài)方法,方法和類關(guān)聯(lián),直接由類名來調(diào)用。
3. 如果方法定義前面加abstract,表示抽象方法,由繼承類來實(shí)現(xiàn)。
4. 對于方法前面的public, private,protected等這些是控制方法可以被調(diào)用的范圍。
5. 如果方法定義前面有native,Native方法是由另外一種語言(如c/c++,FORTRAN,匯編)實(shí)現(xiàn)的本地方法。因?yàn)樵谕獠繉?shí)現(xiàn)了方法,所以在java代碼中,就不需要聲明了,有點(diǎn)類似于借口方法,一般用不著。
6.如果方法定義前面加synchronized,表示當(dāng)前方法體是一個(gè)臨界區(qū),通過鎖機(jī)制來控制多個(gè)線程同步,在多線程應(yīng)用里面經(jīng)常使用。
System.out.println(x);//這個(gè)是55
System.out.println(In.x);//這個(gè)是9
樓主這兩行是對的,樓上是不用兄弟認(rèn)為人家這兒錯(cuò)了?
1,后面那個(gè)是無法做到的那個(gè)x是方法 的局部變量,在進(jìn)入方法時(shí)被推到棧里,方法結(jié)束后就出棧了。除非有方式可以跑一個(gè)在主方法中的線程監(jiān)控當(dāng)前棧中變量,就像是Debug一樣,我也研究好久這個(gè),不過沒發(fā)現(xiàn)有。
2, 也像1一樣沒有侵入性,你可以用字節(jié)碼框架去操作類,動(dòng)態(tài)地改變方法的行為,也就是說你可以在main方法中用程序語言去改變doit(x)方法里所做的事情。
3, 再侵入點(diǎn)兒,你可以傳進(jìn)那個(gè)doit(int)方法一個(gè)Callback, 你明白我意思?給你看個(gè)回調(diào)式:
public class HelloJava{
private interface Listener{
public void listenDoit(int x);
}
private static int x=55;
private class In{
private Listener listener;
private static final int x=9;
public In(Listener listener){this.listener=listener;}
public void doit(int x){
listener.listenDoit(x);
x=6;//這個(gè)X和上一行的應(yīng)該是同一個(gè)吧?怎么在主方法里輸出這個(gè)量?
listener.listenDoit(x);
HelloJava.this.x++;
}
}
public static void main(String[] args){
System.out.println(x);//這個(gè)是55
System.out.println(In.x);//這個(gè)是9
In in =new HelloJava().new In(new Listener(){
@Override
public void listenDoit(int x) {
System.out.println(x);
}});
in.doit(0);
System.out.println(x);//這個(gè)是55
System.out.println(In.x);//這個(gè)是10
}
} 還有許多方式可以做到,比如代理模式等等,不過都大同小異。該方法好處是不改變方法的原定義模型。如返回值從void改成int,如果doit的返回值本身就是String,要返回個(gè)其他的東西,怎么去改變返回值完成?
另外運(yùn)行一下會(huì)發(fā)現(xiàn)最后兩行輸出不是55 10, 而是56, 9,你就知道HelloJava.this.x++;做的是什么了。
4,然后就是樓上朋友們都說的方式,返回值。
在靜態(tài)方法中可以直接調(diào)用本類的其他靜態(tài)方法(就是方法有聲明為static的),非靜態(tài)方法則可以直接調(diào)用非靜態(tài)方法或者靜態(tài)方法,靜態(tài)方法如果要調(diào)用非靜態(tài)方法需要先創(chuàng)建類對象,通過對象去調(diào)用類的非靜態(tài)方法,如你有一個(gè)方法為public static void xx(){},另一個(gè)為public void yy(){}, 那么你在xx方法中要調(diào)用yy方法則必須要先創(chuàng)建這個(gè)類的對象,用對象調(diào)用yy方法,但是如果你想在yy方法中調(diào)用xx方法,則可以直接調(diào)用xx();即可。
直接調(diào)用
比如
interface A {
void interfaceMethod();
}
class B {
public void classMethod(A a) {
a.interfaceMethod();
}
}
直接這樣調(diào)用沒有任何問題的 因?yàn)樗鸄是接口不能實(shí)例化 他傳給你的a對象一定是實(shí)現(xiàn)了A接口的 調(diào)用的也就是實(shí)現(xiàn)的那個(gè)方法 } }
要調(diào)用方法void showInfo()就直接在調(diào)抄用的地方直接寫showInfo();
要調(diào)用方法 boolean showInfo()就在調(diào)用的地方比如寫boolean ect=showInfo();
要調(diào)用方法void showInfo(String message)就在調(diào)用的地方比如寫showInfo("java functions");
有參數(shù)襲的括號里面?zhèn)鲄?shù),無參方法的括號不能省.
有返回值的前面要加一個(gè)變量接受返回值。
方法之間是如何調(diào)用的?2113
比如在程序a行遇到調(diào)用方法showInfo()
程序在運(yùn)行的時(shí)候會(huì)找到被調(diào)用的showInfo()方法所在的區(qū)域,如果showInfo方法是有參數(shù)的,則把參數(shù)傳過去(傳地址或者5261傳值),然后就初始化showInfo方法開始執(zhí)行,4102當(dāng)showInfo方法執(zhí)行遇到return語句或者執(zhí)行代碼結(jié)束,如果有return語句則返回一個(gè)showInfo方法的聲明類型的值到程序行的接受參數(shù)變量;此1653時(shí)會(huì)返回到程序的a行執(zhí)行。
聲明:本網(wǎng)站尊重并保護(hù)知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:2.650秒