java傳遞函數
『壹』 java中常見的異常類
1. java.lang.nullpointerexception
這個異常大家肯定都經常遇到,異常的解釋是"程序遇上了空指針",簡單地說就是調用了未經初始化的對象或者是不存在的對象,這個錯誤經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。對數組操作中出現空指針,很多情況下是一些剛開始學習編程的朋友常犯的錯誤,即把數組的初始化和數組元素的初始化混淆起來了。數組的初始化是對數組分配需要的空間,而初始化後的數組,其中的元素並沒有實例化,依然是空的,所以還需要對每個元素都進行初始化(如果要調用的話)
2. java.lang.classnotfoundexception
這個異常是很多原本在jb等開發環境中開發的程序員,把jb下的程序包放在wtk下編譯經常出現的問題,異常的解釋是"指定的類不存在",這里主要考慮一下類的名稱和路徑是否正確即可,如果是在jb下做的程序包,一般都是默認加上package的,所以轉到wtk下後要注意把package的路徑加上。
3. java.lang.arithmeticexception
這個異常的解釋是"數學運算異常",比如程序中出現了除以零這樣的運算就會出這樣的異常,對這種異常,大家就要好好檢查一下自己程序中涉及到數學運算的地方,公式是不是有不妥了。
4. java.lang.
這個異常相信很多朋友也經常遇到過,異常的解釋是"數組下標越界",現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的范圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了,還有一種情況,是程序中定義的數組的長度是通過某些特定方法決定的,不是事先聲明的,這個時候,最好先查看一下數組的length,以免出現這個異常。
5. java.lang.illegalargumentexception
這個異常的解釋是"方法的參數錯誤",很多j2me的類庫中的方法在一些情況下都會引發這樣的錯誤,比如音量調節方法中的音量參數如果寫成負數就會出現這個異常,再比如g.setcolor(int red,int green,int blue)這個方法中的三個值,如果有超過255的也會出現這個異常,因此一旦發現這個異常,我們要做的,就是趕緊去檢查一下方法調用中的參數傳遞是不是出現了錯誤。
6. java.lang.illegalaccessexception
這個異常的解釋是"沒有訪問許可權",當應用程序要調用一個類,但當前的方法即沒有對該類的訪問許可權便會出現這個異常。對程序中用了package的情況下要注意這個異常。
其他還有很多異常,我就不一一列舉了,我要說明的是,一個合格的程序員,需要對程序中常見的問題有相當的了解和相應的解決辦法,否則僅僅停留在寫程序而不會改程序的話,會極大影響到自己的開發的。關於異常的全部說明,在api里都可以查閱。
算術異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強制轉換異常:ClassCastException
數組負下標異常:NegativeArrayException
數組下標越界異常:
違背安全原則異常:SecturityException
文件已結束異常:EOFException
文件未找到異常:FileNotFoundException
字元串轉換為數字異常:NumberFormatException
操作資料庫異常:SQLException
輸入輸出異常:IOException
方法未找到異常:NoSuchMethodException
java.lang.AbstractMethodError
抽象方法錯誤。當應用試圖調用抽象方法時拋出。
java.lang.AssertionError
斷言錯。用來指示一個斷言失敗的情況。
java.lang.ClassCircularityError
類循環依賴錯誤。在初始化一個類時,若檢測到類之間循環依賴則拋出該異常。
java.lang.ClassFormatError
類格式錯誤。當Java虛擬機試圖從一個文件中讀取Java類,而檢測到該文件的內容不符合類的有效格式時拋出。
java.lang.Error
錯誤。是所有錯誤的基類,用於標識嚴重的程序運行問題。這些問題通常描述一些不應被應用程序捕獲的反常情況。
java.lang.ExceptionInInitializerError
初始化程序錯誤。當執行一個類的靜態初始化程序的過程中,發生了異常時拋出。靜態初始化程序是指直接包含於類中的static語句段。
java.lang.IllegalAccessError
違法訪問錯誤。當一個應用試圖訪問、修改某個類的域(Field)或者調用其方法,但是又違反域或方法的可見性聲明,則拋出該異常。
java.lang.IncompatibleClassChangeError
不兼容的類變化錯誤。當正在執行的方法所依賴的類定義發生了不兼容的改變時,拋出該異常。一般在修改了應用中的某些類的聲明定義而沒有對整個應用重新編譯而直接運行的情況下,容易引發該錯誤。
java.lang.InstantiationError
實例化錯誤。當一個應用試圖通過Java的new操作符構造一個抽象類或者介面時拋出該異常.
java.lang.InternalError
內部錯誤。用於指示Java虛擬機發生了內部錯誤。
java.lang.LinkageError
鏈接錯誤。該錯誤及其所有子類指示某個類依賴於另外一些類,在該類編譯之後,被依賴的類改變了其類定義而沒有重新編譯所有的類,進而引發錯誤的情況。
java.lang.NoClassDefFoundError
未找到類定義錯誤。當Java虛擬機或者類裝載器試圖實例化某個類,而找不到該類的定義時拋出該錯誤。
java.lang.NoSuchFieldError
域不存在錯誤。當應用試圖訪問或者修改某類的某個域,而該類的定義中沒有該域的定義時拋出該錯誤。
java.lang.NoSuchMethodError
方法不存在錯誤。當應用試圖調用某類的某個方法,而該類的定義中沒有該方法的定義時拋出該錯誤。
java.lang.OutOfMemoryError
內存不足錯誤。當可用內存不足以讓Java虛擬機分配給一個對象時拋出該錯誤。
java.lang.StackOverflowError
堆棧溢出錯誤。當一個應用遞歸調用的層次太深而導致堆棧溢出時拋出該錯誤。
java.lang.ThreadDeath
線程結束。當調用Thread類的stop方法時拋出該錯誤,用於指示線程結束。
java.lang.UnknownError
未知錯誤。用於指示Java虛擬機發生了未知嚴重錯誤的情況。
java.lang.UnsatisfiedLinkError
未滿足的鏈接錯誤。當Java虛擬機未找到某個類的聲明為native方法的本機語言定義時拋出。
java.lang.UnsupportedClassVersionError
不支持的類版本錯誤。當Java虛擬機試圖從讀取某個類文件,但是發現該文件的主、次版本號不被當前Java虛擬機支持的時候,拋出該錯誤。
java.lang.VerifyError
驗證錯誤。當驗證器檢測到某個類文件中存在內部不兼容或者安全問題時拋出該錯誤。
java.lang.VirtualMachineError
虛擬機錯誤。用於指示虛擬機被破壞或者繼續執行操作所需的資源不足的情況。
java.lang.ArithmeticException
算術條件異常。譬如:整數除零等。
java.lang.
數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。
java.lang.ArrayStoreException
數組存儲異常。當向數組中存放非數組聲明類型對象時拋出。
java.lang.ClassCastException
類造型異常。假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造為類B的實例時拋出該異常。該異常經常被稱為強制類型轉換異常。
java.lang.ClassNotFoundException
找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出該異常。
java.lang.CloneNotSupportedException
不支持克隆異常。當沒有實現Cloneable介面或者不支持克隆方法時,調用其clone()方法則拋出該異常。
java.lang.
枚舉常量不存在異常。當應用試圖通過名稱和枚舉類型訪問一個枚舉對象,但該枚舉對象並不包含常量時,拋出該異常。
java.lang.Exception
根異常。用以描述應用程序希望捕獲的情況。
java.lang.IllegalAccessException
違法的訪問異常。當應用試圖通過反射方式創建某個類的實例、訪問該類屬性、調用該類方法,而當時又無法訪問類的、屬性的、方法的或構造方法的定義時拋出該異常。
java.lang.IllegalMonitorStateException
違法的監控狀態異常。當某個線程試圖等待一個自己並不擁有的對象(O)的監控器或者通知其他線程等待該對象(O)的監控器時,拋出該異常。
java.lang.IllegalStateException
違法的狀態異常。當在Java環境和應用尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出該異常。
java.lang.IllegalThreadStateException
違法的線程狀態異常。當縣城尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出異常。
java.lang.IndexOutOfBoundsException
索引越界異常。當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。
java.lang.InstantiationException
實例化異常。當試圖通過newInstance()方法創建某個類的實例,而該類是一個抽象類或介面時,拋出該異常。
java.lang.InterruptedException
被中止異常。當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。
java.lang.NegativeArraySizeException
數組大小為負值異常。當使用負數大小值創建數組時拋出該異常。
java.lang.NoSuchFieldException
屬性不存在異常。當訪問某個類的不存在的屬性時拋出該異常。
java.lang.NoSuchMethodException
方法不存在異常。當訪問某個類的不存在的方法時拋出該異常。
java.lang.NullPointerException
空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出null等等。
java.lang.NumberFormatException
數字格式異常。當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常。
java.lang.RuntimeException
運行時異常。是所有Java虛擬機正常操作期間可以被拋出的異常的父類。
java.lang.SecurityException
安全異常。由安全管理器拋出,用於指示違反安全情況的異常。
java.lang.
字元串索引越界異常。當使用索引值訪問某個字元串中的字元,而該索引值小於0或大於等於序列大小時,拋出該異常。
java.lang.TypeNotPresentException
類型不存在異常。當應用試圖
『貳』 有三個.java文件 一個操作類,一個A,一個B,怎樣做到將從A中獲得的數據傳遞到B中 操作類中放置該傳遞函數
通過構造方法
public class aaa {
int a = 9;
}
package try1;
public class bbbbb {
int b;
bbbbb(int b){
this.b=b;
}
}
package try1;
public class cccccc {
public static void main(String[] args) {
aaa sa=new aaa();
bbbbb sb=new bbbbb(sa.a);
System.out.println(sb.b);
}
}
這個會輸出你想要的東西了
『叄』 求教:Java支持函數指針嗎
在Java里你可以用visitor模式實現傳遞函數指針的功能,但是實現很復雜,而且沒有C那麼強大(過度封裝和抽象的代價): 先聲明一個介面(譬如叫visitor),帶一個調用函數visit()。 然後寫一個類繼承你要傳遞函數指針的類,並實現visitor介面,在visit()函數中調用你要包裝的函數。 然後需要函數指針的方法接收visitor類型的對象作為參數,通過該對象的visit()方法調用函數。
『肆』 java裡面,c裡面都有回調函數,回調函數都是什麼東西啊
嗯,的確都有回調函數,但是C與java中的回調實現的方法不太一樣
C中的回調函數,是由指針實現的,將某個函數方法的地址賦給某個指針變數,然後直接由這個變數去調用方法。可以通過一個指針實現不同方法的調用。
java中,沒有指針這一概念。所以回調函數的意義似乎也不太一樣,感覺跟C比起來更像是團隊開發的一種手段和方法。java中的回調是通過介面實現的,調用函數不用知道被調用的函數是如何實現的,只需要寫好一個被調函數的介面聲明,然後根據介面調用。至於被調用函數,只需要重載介面方法就可以讓調用函數去調用...說白了就是,一個人只負責去寫大的程序流程,細節的方法部分不需要寫,只要留好介面聲明,然後讓別的人去寫這個介面的重載就可以了。更適合於團隊開發以及程序更新優化。
好吧我快給我自己說暈了
給你兩個例子去看下,這倆寫的還都比較清楚
java的:http://blog.csdn.net/allen_zhao_2012/article/details/8056665
C的:http://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html
『伍』 java nashorm怎麼用
從JDK 6開始,Java就已經捆綁了JavaScript引擎,該引擎基於Mozilla的Rhino。該特性允許開發人員將JavaScript代碼嵌入到Java中,甚至從嵌入的JavaScript中調用Java。此外,它還提供了使用jrunscript從命令行運行JavaScript的能力。如果不需要非常好的性能,並且可以接受ECMAScript 3有限的功能集的話,那它相當不錯了。
從JDK 8開始,Nashorn取代Rhino成為Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1規范以及一些擴展。它使用基於JSR 292的新語言特性,其中包含在JDK 7中引入的invokedynamic,將JavaScript編譯成Java位元組碼。
與先前的Rhino實現相比,這帶來了2到10倍的性能提升,雖然它仍然比Chrome和Node.js中的V8引擎要差一些。如果你對實現細節感興趣,那麼可以看看這些來自2013 JVM語言峰會的幻燈片。
相關廠商內容
滴滴出行iOS客戶端架構演進之路!
微信客戶端如何應對弱網路!
函數式編程中的Swift與Swift中的函數式編程!
AWS Webinar 5月24日在線課堂|利用AWS Lambda創建應用
國際范 最前沿 不容錯過的容器技術盛會
相關贊助商
GMTC全球移動技術大會2016年6月24日-25日,北京,點擊了解詳情!
由於Nashorn隨JDK 8而來,它還增加了簡潔的函數式介面支持。接下來,我們很快就會看到更多細節。
讓我們從一個小例子開始。首先,你可能需要安裝JDK 8和NetBeans、IntelliJ IDEA或者Eclipse。對於集成JavaScript開發,它們都至少提供了基本的支持。讓我們創建一個簡單的Java項目,其中包含下面兩個示例文件,並運行它:
(點擊圖片可以查看大圖)
在第12行,我們使用引擎的「eval」方法對任意JavaScript代碼求值。在本示例中,我們只是載入了上面的JavaScript文件並對其求值。你可能會發現那個「print」並不熟悉。它不是JavaScript的內建函數,而是Nashorn提供的,它還提供了其它方便的、在腳本環境中大有用武之地的函數。你也可以將 「hello world」的列印代碼直接嵌入到傳遞給「eval」方法的字元串,但將JavaScript放在它自己的文件中為其開啟了全新的工具世界。
Eclipse目前還沒有對Nashorn提供專門的支持,不過,通過JavaScript開發工具(JSDT)項目,它已經支持JavaScript的基本工具和編輯。
(點擊圖片可以查看大圖)
IntelliJ IDEA 13.1(社區版和旗艦版)提供了出色的JavaScript和Nashorn支持。它有一個全功能的調試器,甚至允許在Java和JavaScript之間保持重構同步,因此舉例來說,如果你重命名一個被JavaScript引用的Java類,或者重命名一個用於Java源代碼中的JavaScript文件,那麼該IDE將跨語言修改相應的引用。
下面是一個例子,展示如何調試從Java調用的JavaScript(請注意,NetBeans也提供了JavaScript調試器,如下截圖所示):
(點擊圖片可以查看大圖)
你可能會說,工具看上去不錯,而且新實現修復了性能以及一致性問題,但我為什麼應該用它呢?一個原因是一般的腳本編寫。有時候,能夠直接插入任何類型的字元串,並任由它被解釋,會很方便。有時候,沒有礙事的編譯器,或者不用為靜態類型擔心,可能也是不錯的。或者,你可能對Node.js編程模型感興趣,它也可以和Java一起使用,在本文的末尾我們會看到。另外,還有個情況不得不提一下,與Java相比,使用JavaScript進行JavaFX開發會快很多。
Shell腳本
Nashorn引擎可以使用jjs命令從命令行調用。你可以不帶任何參數調用它,這會將你帶入一個交互模式,或者你可以傳遞一個希望執行的JavaScript文件名,或者你可以用它作為shell腳本的替代,像這樣:
#!/usr/bin/env jjs
var name = $ARG[0];
print(name ? "Hello, ${name}!" : "Hello, world!");
向jjs傳遞程序參數,需要加「—」前綴。因此舉例來說,你可以這樣調用:
./hello-script.js – Joe
如果沒有「—」前綴,參數會被解釋為文件名。
向Java傳遞數據或者從Java傳出數據
正如上文所說的那樣,你可以從Java代碼直接調用JavaScript;只需獲取一個引擎對象並調用它的「eval」方法。你可以將數據作為字元串顯式傳遞……
ScriptEngineManager scriptEngineManager =
new ScriptEngineManager();
ScriptEngine nashorn =
scriptEngineManager.getEngineByName("nashorn");
String name = "Olli";
nashorn.eval("print('" + name + "')");
……或者你可以在Java中傳遞綁定,它們是可以從JavaScript引擎內部訪問的全局變數:
int valueIn = 10;
SimpleBindings simpleBindings = new SimpleBindings();
simpleBindings.put("globalValue", valueIn);
nashorn.eval("print (globalValue)", simpleBindings);
JavaScript eval的求值結果將會從引擎的「eval」方法返回:
Integer result = (Integer) nashorn.eval("1 + 2");
assert(result == 3);
在Nashorn中使用Java類
前面已經提到,Nashorn最強大的功能之一源於在JavaScript中調用Java類。你不僅能夠訪問類並創建實例,你還可以繼承他們,調用他們的靜態方法,幾乎可以做任何你能在Java中做的事。
作為一個例子,讓我們看下來龍去脈。JavaScript沒有任何語言特性是面向並發的,所有常見的運行時環境都是單線程的,或者至少沒有任何共享狀態。有趣的是,在Nashorn環境中,JavaScript確實可以並發運行,並且有共享狀態,就像在Java中一樣:
// 訪問Java類Thread
var Thread = Java.type("java.lang.Thread");
// 帶有run方法的子類
var MyThread = Java.extend(Thread, {
run: function() {
print("Run in separate thread");
}
});
var th = new MyThread();
th.start();
th.join();
請注意,從Nashorn訪問類的規范做法是使用Java.type,並且可以使用Java.extend擴展一個類。
令人高興的函數式
從各方面來說,隨著JDK 8的發布,Java——至少在某種程度上——已經變成一種函數式語言。開發人員可以在集合上使用高階函數,比如,遍歷所有的元素。高階函數是把另一個函數當作參數的函數,它可以用這個函數參數做些有意義的事情。請看下面Java中高階函數的示例:
List<Integer> list = Arrays.asList(3, 4, 1, 2);
list.forEach(new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o);
}
});
對於這個例子,我們的傳統實現方式是使用一個「外部」循環遍歷元素,但現在,我們沒有那樣做,而是將一個「Consumer」函數傳遞給了「forEach」操作,一個高階的「內部循環」操作會將集合中的每個元素一個一個地傳遞給Consumer的「accept」方法並執行它。
如上所述,對於這樣的高階函數,函數式語言的做法是接收一個函數參數,而不是一個對象。雖然在傳統上講,傳遞函數引用本身超出了Java的范圍,但現在,JDK 8有一些語法糖,使它可以使用Lambda表達式(又稱為「閉包」)來實現那種表示方式。例如:
List<Integer> list = Arrays.asList(3, 4, 1, 2);
list.forEach(el -> System.out.println(el));
在這種情況下,「forEach」的參數是這樣一個函數引用的形式。這是可行的,因為Customer是一個函數式介面(有時稱為「單一抽象方法(Single Abstract Method)」類型或「SAM」)。
那麼,我們為什麼要在討論Nashorn時談論Lambda表達式呢?因為在JavaScript中,開發人員也可以這樣編寫代碼,而在這種情況下,Nashorn可以特別好地縮小Java和JavaScript之間的差距。尤其是,它甚至允許開發人員將純JavaScript函數作為函數式介面(SAM類型)的實現來傳遞。
讓我們來看一些純JavaScript代碼,它們與上述Java代碼實現一樣的功能。注意,在JavaScript中沒有內置的列表類型,只有數組;不過這些數組的大小是動態分配的,而且有與Java列表類似的方法。因此,在這個例子中,我們調用一個JavaScript數組的「for Each」方法:
var jsArray = [4,1,3,2];
jsArray.forEach(function(el) { print(el) } );
『陸』 Java的數組作為參數傳入方法和C語言的不同
首先,數組名不是指針,只不過作為參數或返回值時會退化為指針,其次,java 使用值傳參(pass_by_value)的方式來傳遞函數參數,只是值傳遞方式在處理原始數據類型參數與引用類型參數時候有不同,如果一個參數是原始數據類型,那麼參數變數的值傳遞進去,如果要修改,需要傳遞引用類型
『柒』 java 中 如何將「一個類的方法 」作為參數傳到「另一個類的方法」中
在java中這是沒有辦法做到的,因為java不是函數式編程語言,不過可以通過傳遞一個介面來實現。
下面解說java如何模擬:
先定義一個介面:
interfaceMethodInterface{
//這個方法假如就是你想要傳遞的方法
publicStringtest(Strings);
}
一個類中的方法的參數就是這個介面:
classTestMethod{
//java中很麻煩的,不過下面這樣是可以達到目的得
publicvoidtest(){
System.out.println(methodInterface.test("test"));
}
}
因為這個介面是你定義的,所以你知道這個介面裡面一定有一個叫test的方法
{
publicStringtest(Strings){
returns;
}
}
publicclassTest{
publicstaticvoidmain(String[]args){
newTestMethod().test(newMethod());
}
}
在jdk8中是不需要這么復雜的,但是原理還是一樣的,只不過jdk8中的lambda表達式會自動幫你處理這些事情
『捌』 在java中,引用數據不就是一種對象么為什麼在調用函數中不能進行修改數值
樓主語句表達很模糊:
引用數據?(不知道說的是引用數據類型,還是引用某一數據對象)
引用數據類型的數據 ==>是對象;
引用數據==> 不是對象。而是對某對象的引用; 這是一動態過程;
數值?
1. 對象的值==>是內存地址值。即0xaabbcc等; // 這是JVM虛擬機分配的,不能修改值。
2. 對象內部的 成員變數==>存在於堆內存中。 //是可以修改的 (此處不考慮final static的情況)
對象 成員函數的值==>存在於方法區中。 //這只可以調用 (此處不考慮final static的情況)
『玖』 java中函數是值傳遞還是引用傳遞
相信有些同學跟我一樣,曾經對這個問題很疑惑。在網上也看了一些別人說的觀點,評論不一。有說有值傳遞和引用傳遞兩種,也有說只有值傳遞的,這里只說下個人見解
先看一個例子
publicclassTest1{
publicstaticvoidmain(String[]args){
inta=10;
changeNum(a);
System.out.println("maina="+a);
}
staticvoidchangeNum(inta){
a=100;
System.out.println("changeNuma="+a);
}
}
結果:
changeNum a=100
main a=10
說明對於基本的數值類型其實傳遞的是一份數值的拷貝,傳入函數之後跟原來的值就沒有關系了,在函數中改變這個數的值也不會影響到原來的值。
再看一個例子
publicclassP{
Stringname="P";
publicP(Stringname){
this.name=name;
}
@Override
publicStringtoString(){
returnname;
}
}
publicclassTest{
staticPp1=newP("p1");
publicstaticvoidmain(String[]args){
Pp=newP("P");
System.out.println("beforechangep:"+p.toString);
changeObj(p);
System.out.println("afterchangep:"+p.toString());
}
staticvoidchangeObj(Pp){
p=newP("pp");
System.out.println("changep:"+p.toString());
//p=p1;
//System.out.println(p.toString());
}
}
這個例子中的運行結果會是什麼呢?
在這個例子中傳入的是一個對象類型的數據。
我們先來猜想一下:如果傳入的是一個對象的引用,在函數中改變了這個引用所指向的對象,那麼外部的引用"p"應該是指向了新創建的P("pp")的對象才對
所以猜想的結果是:
before change p:P
change p:pp
after change p:pp
那讓我們來實際運行一下看看結果,實際的結果是:
before change p:P
change p:pp
after change p:P
想猜想的不一樣!!!
這就讓我們很疑惑了,為什麼函數沒有改變引用所指向對象呢?
其實是這樣的,首先要理解「=」賦值操作的意義,
對於基本類型來說「=」賦值操作是直接改變內存地址上的值,
而對引用類型來說「=」賦值其實是改變引用變數所指向的內存地址。
所以對外部的p變數是沒有影響的。
總結:
函數參數傳遞其實是一個賦值的過程,基本類型傳遞的是數值,引用類型傳遞的引用對象的內存地址。
另外一點要特別注意,函數的參數其實是函數內部的局部變數。不要跟外部變數混淆
『拾』 在Java的Swing中如何使用form action
通過類的構造函數傳遞函數,
類似說你要再創建一個窗口,傳遞個int參數
就是用JFrame_new jfa=new JFrame_new (8);
class JFrame_new extends JFrame{
int n;
public JFrame_new(int n){
this.n=n;
}
}