类成员

理解类成员:类成员就是被static修饰的的成员


类变量属于整个类,当类初始化完成后,类变量也被初始化完成


类变量既可以通过类来访问,也可以通过对象访问,但是通过对象访问只是一种假象,通过对象访问依然是该类的类变量,可以这样理解:当通过对象来访问类变量时,系统会

在底层转换为通过该类来访问类变量

public class NullAccessStatic {
    public static int id;
    private static void test(){
	    System.out.println("static的静态方法");
    }
    public static void main(String args[]){
	   NullAccessStatic nas = null;
	   nas.id=12;
	   System.out.println(id);//输出:12
	   nas.test();//输出:static的静态方法
	   //如果null对象访问实例成员,将会引发异常,因为null表示该对象根本不存在
	   //所以采用对象来调用类方法和类变量时,是一种假象,系统会在底部转换为通过该类来访问类变量。
    }
}

类成员不能访问实例成员,因为类成员是属于类的,类成员的作用比实例成员作用域更大,完全可能出现类成员已经初始化完成,但实例成员还不曾初始化的情况,如果允许类

成员访问实例成员将会引起大量错误


单例类:如果一个类始终只能创建一个实例,则这个类被称为单例类

class Singleton{
	//使用一个类变量来缓存曾经创建的实例
    private static Singleton instance;
    //对构造器使用private修饰,隐藏该构造器
    private Singleton(){
    	
    }
    //提供一个静态方法,用于返回Singleton实例
    //该方法可以加入自定义控制,保证只产生一个Singleton对象
    public static Singleton getInstance(){
    	//如果instance为null,则表明还不曾创建Singleton对象
    	if(instance == null){
    		//创建一个Singleton对象,并将其缓存起来
    		instance = new Singleton();
    	}
    	return instance;
    }
}
public class SingletonTest {
	public static void main(String args[]){
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		System.out.println(s1==s2);//输出:true
	}
}

上面通过getInstance方法提供的自定义控制,保证只产生一个实例。所以在main方法中,看到产生的两次Singleton对象实际上是同一个对象





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值