首页 > 代码库 > java常见问题笔记

java常见问题笔记

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常见问题笔记