今天呢 利用闲余时间读了Java编程思维里的前三章,基本上是介绍Java中的各种基础知识,自己接触开发这一块也接近一年了。再会回过头看基础知识的时候,也有些收获。
1 对象的finalize()方法
和java的内存回收机制有关系,当一个对象被回收的时候,会调用这个对象的finalize()方法,但是我们一般不用重写这个方法,除非你有特殊需求的时候。经过查资料得知,比如在JNI或者与C++交互的时候,由于C语言和C++的特点,垃圾回收机制不能正确的回收通过C或者C++new出来的内存空间,这个时候,就需要手动去回收了。个人觉得,这个方法可以用来在这个对象被销毁的时候,做一些数据的存留或者扫尾工作。另外,学习到一个和System.gc()作用的相同的方法,System.runFinalize();这个方法的作用和System.gc()的作用是一样的,通知内存回收机制注意回收这块内存,但是只能是通知作用,具体什么时候回收跟java内存回收机制的算法有关。
2 static关键字。
这个平时就用的比较多了,static 相信每个接触过java的都对这个关键字很熟悉,毕竟你保存常量,单例模式,各种各种,都会用到static关键字。
下面是static的一些定义:
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。
static前面加上其它访问权限关键字的效果也以此类推.。static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问
静态方法在调用的时候,不用加载类的实例就可以直接用。这就是为什么常用的main()方法是static关键字来修饰的了。
下面记下之前面试时候被问到单例模式的懒汉和饿汉模式:
1 懒汉模式(类加载时不初始化)
package Singleton;
public class LazySingleton {
//懒汉式单例模式
//比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
private static LazySingleton intance = null;//静态私用成员,没有初始化
private LazySingleton()
{
//私有构造函数
}
public static synchronized LazySingleton getInstance() //静态,同步,公开访问点
{
if(intance == null)
{
intance = new LazySingleton();
}
return intance;
}
}
2 饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)
package Singleton;
public class EagerSingleton {
//饿汉单例模式
//在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化
private EagerSingleton()
{
//私有构造函数
}
public static EagerSingleton getInstance() //静态,不用同步(类加载时已初始化,不会有多线程的问题)
{
return instance;
}
}
以上就是今天看书所得,明天继续看,加油咯~~~