类成员(static成员):
当使用实例来访问类成员时,系统底层依然是委托该类来访问类成员。因此,即便该类实例为null,她依然可以访问所属类的类成员。
例如:
package lesson5;
class L5
{
public static void main(String[] args)
{
Person p = new Person();
System.out.println(p.eyenum);
System.out.println(p.age);
p = null;
System.out.println(p.eyenum);//静态成员,即便p=null,仍然可以访问。因为实际是通过类访问的。
//System.out.println(p.age);//出错。因为age为实例成员,此时因为为null,无法通过引用访问到对象了。
}
}
class Person
{
static int eyenum = 2 ;//类属性static
int age = 100;//实例成员
}
单例模式(Singleton),主要通过静态变量、静态方法和private构造方法完成。例如:
package lesson5;
class L5 extends Person
{
public static void main(String[] args)
{
Singleton st1 =Singleton.getInstance();
Singleton st2 = Singleton.getInstance();
System.out.println(st1==st2);//结果为true,因为st1,st2指向单个唯一的实例对象
}
public void test()//不能覆写父类test()方法,否则出错。因为父类test()为final
{
}
private final void test(String str)//由于为private,因此即便子类出现具有重写特征的方法,也不是重写,只是子类的一个新方法。
{
//代码不会报错。因为此时test(String str)其实是一个新的方法,与父类的相同签名的方法无关。
}
}
class Singleton
{
private static Singleton instance = null;//该静态变量用于缓存实例
private Singleton()//把构造方法隐藏起来,外部无法继承和实例化该类
{
}
//暴露给外部使用,以便产生唯一一个该类实例
public static Singleton getInstance()
{
if(instance==null)
{
//缓存该类实例
instance = new Singleton();
}
return instance;
}
}
//测试
class Person
{
final void test()//不能被覆写,因为为final
{
}
private final void test(String str)//由于为private,因此即便子类出现具有重写特征的方法,也不是重写,只是子类的一个新方法。
{
}
}