1. 程式人生 > >java常見問題筆記

java常見問題筆記

賦值 ase 筆記 修正 優先級 fin 垃圾 final python

cmd 提示“找不到或無法加載主類?”?

1.環境變量配置不正確

檢查修正即可

2.程序名和函數入口不一致

檢查修正即可

3.程序中使用了包 :package

編譯的時候使用命令: javac -d . ?Test.java (. 代表當前目錄)代替 javac test.java

運行時使用命令:java packagename.Test 代替 java Test

String類是不可變的,一旦String對象被創建,就不能被改變!

列:String s="java"

s="python"

第一條語句創建了一個內容為"Java"的String對象,並將其引用賦值給s。

第二條語句創建了一個內容為"python"的新String對象,並將其引用賦值給s。

但是 "java" 字符串對象依然存在,只是不能再被訪問,因為變量s現在指向了新的對象。s 只是對象String 的一個引用。

兩條語句執行後,內存中存在了兩個String對象,一個對 String對象的引用s。

垃圾回收機制與finalize()方法

1、Java提供finalize()方法,垃圾回收器準備釋放內存的時候,會先調用finalize()。

(1).對象不一定會被回收。

(2).垃圾回收不是析構函數。

(3).垃圾回收只與內存有關。

(4).垃圾回收和finalize()都是靠不住的,只要JVM還沒有快到耗盡內存的地步,它是不會浪費時間進行垃圾回收的。

2、垃圾回收器:

(1).在 Java 中,當你創建一個對象時,Java 虛擬機(JVM)為該對象分配內存、調用構造函數並開始跟蹤你使用的對象。當你停止使用一個對象(就是說,當沒有對該對象有效的引用時),JVM 通過垃圾回收器將該對象標記為釋放狀態。

(2)當垃圾回收器將要釋放一個對象的內存時,它調用該對象的finalize() 方法(如果該對象定義了此方法)。垃圾回收器以獨立的低優先級的方式運行,只有當其他線程掛起等待該內存釋放的情況出現時,它才開始運行釋放對象的內存。(事實上,你可以調用System.gc() 方法強制垃圾回收器來釋放這些對象的內存。)

(3)在以上的描述中,有一些重要的事情需要註意。首先,只有當垃圾回收器釋放該對象的內存時,才會執行finalize()。如果在 Applet 或應用程序退出之前垃圾回收器沒有釋放內存,垃圾回收器將不會調用finalize()。

3、finalize()方法的優缺點:

(1)根據 Java 文檔,finalize() 是一個用於釋放非 Java 資源的方法。但是,JVM 有很大的可能不調用對象的finalize() 方法,因此很難證明使用該方法釋放資源是有效的。

(2)Java 1.1 通過提供一個System.runFinalizersOnExit() 方法部分地解決了這個問題。(不要將這個方法與 java1.0 中的System.runFinalizations() 方法相混淆。)不象System.gc() 方法那樣,System.runFinalizersOnExit() 方法並不立即試圖啟動垃圾回收器。而是當應用程序或 Applet 退出時,它調用每個對象的finalize() 方法。

java常見問題筆記