我怎麼能證明類加載只在Java中發生過一次?這是一個僞命題嗎?我怎麼能證明類加載在Java只發生一次?
回答
據西方哲學,一個「僞命題」的布萊克威爾解釋如下:
維特根斯坦在「邏輯哲學論」中提出的一個術語,指任何試圖說出只能顯示的判斷。與其他命題不同,僞命題不能被分析爲原子圖像及其組合,因此它們不是世界的圖像。維特根斯坦認爲,以不同的方式,邏輯,數學,自然科學,倫理學和哲學的先驗部分 - 包括他自己的邏輯哲學 - 的命題 - 的命題都是僞命題。邏輯實證主義者在他們對形而上學的攻擊中發展了這個觀點,認爲所有聲稱能夠做出事實主張但不能被經驗證實的命題和陳述都是僞命題。他們具有情感意義,但缺乏認知意義。有很多嘗試通過邏輯實證主義來檢索至少一些被這種方式拋棄的領域。 「數學的命題是方程式,因此僞命題。」維特根斯坦邏輯哲學論
如果你在這個意義上使用「僞命題」,那麼你的主張,即使我們可能是一個僞命題根據維特根斯坦的觀點,爲它設計一個數學證明,所有的數學都是僞命題。如果不可能通過觀察來證實「類加載只發生一次」的命題總是如此。
但對我而言,這只是說當我們談論IT主題時,標籤「僞命題」不是有用的標籤。而且在這種情況下使用它的人要麼並不真正理解這個術語,要麼就是擺出姿勢。
我懷疑是否可以在數學上證明一個類只能加載一次,因爲你必須證明這是用於任何(理論上)可能的類加載器。但坦率地說,誰在乎!我很高興地聲明,允許類加載多次的任何類加載器是破。(實際上,如果你有多個類加載器,它是可能在每個類加載器中加載一次相同的字節碼文件,但是你從Java執行模型的角度得到的是具有相同類的不同類姓名。)
我想你可能會對類的靜態初始化鎖定一個全球性的資源(如文件,套接字):
public class MyClass{
static {
if (!lockFile())
throw new IllegalStateException("Attempt to load class twice");
}
...
}
當然
,它是絕對有可能加載類不止一次如果你使用多個類加載器。一直在服務器應用程序中發生。
正如克萊圖斯所說,證明一個負面是很難做到的。所以你可能想把你的陳述改進爲更窄的東西。你可以說「根據java語言(或jvm)規範,一個類永遠不會被加載兩次」,然後引用規範的相關部分。或者你可以嘗試「在sun的jvm中,版本XX.XX,只要某些其他條件(比如沒有時髦的類加載器)被滿足,一個類永遠不會被加載兩次(列出所有的條件將作爲練習原始海報)
對於一個天真的證明,你可以編寫一個Foo類的程序,在其靜態初始化器中打印「hello world」,然後實例化2個Foo實例,並向每個人展示只有一個「hello world」被打印。出這可能意味着一個類中沒有加載每次創建該類的對象時
- 1. 我怎麼能生成Java
- 2. 我怎麼能有RabbitMQ的運行只在第一條消息發送一次?
- 3. 我怎麼能在頁面加載
- 4. 如果我們再次加載已經加載的類,會發生什麼?
- 5. 我怎麼能在JAVA
- 6. 在eclipse中,我怎麼看到java類從哪裏加載?
- 7. java - 只能發送文件一次
- 8. jQuery追加只發生一次
- 9. 我怎麼知道一個Android應用第一次被加載?
- 10. 我怎麼能證明這個語法是不明確的?
- 11. 加載變量:只能使用一次
- 12. 你怎麼能證明數組類型是引用類型?
- 13. Angular JS:我怎樣才能加載工廠一次?
- 14. ios:pinchGesture只發生一次
- 15. 聲明只發生一次,在for循環 - JavaScript的
- 16. 在java腳本中只輸入一次只能發送一次作品
- 17. jquery ui加載對話框點擊只能觸發一次
- 18. 我怎麼能在一列
- 19. WordPress的:我怎麼能限制類別選擇只有一個?
- 20. Java Applet只能在Internet Explorer中加載一次(在第一個窗口中)
- 21. 我怎麼能在每次啓動
- 22. MySQL加入和刪除只發生第一次發生
- 23. 只加載一次網址一次
- 24. SendKeys.Send(「hello」);連續發送字符串我怎麼發送只有一次
- 25. 加載XML只有一次
- 26. iAd intersitial只加載一次
- 27. 我怎樣才能讓我的領域只設置一次?
- 28. 我怎麼能一個參數F#類
- 29. 動畫只發生在第一次
- 30. DataBinding只發生在第一次
我不確定你能證明這一點,因爲你確實要求證明一個否定結果(「證明一個班級沒有第二次加載」)。 – cletus 2009-12-23 02:43:21
您將不得不提供更多信息。從廣義上講,世界上有很多應用程序在進行類加載的任何次數。如果你的意思是你特意試圖在自己的應用程序中進行約束,那麼這是一個與具體答案不同的問題。 – PSpeed 2009-12-23 03:06:26