单例模式和内部类的初步认识

单例模式比较高深,老师引入了集群的概念:相同的东西复制很多份

比如一个节点集群,可以理解成很多个jvm,他们统一由一个配置文件配置,那么这个配置文件实例化一次还是多次?

那么这个配置文件保存一次还是多次?

实例化多次,而实际上只有一次-----单例

java中,在某些场景下,一个进程中只允许一个对象的实例,那么我们把这种设计模式称为单例/单态

比如代码A:            

将构造方法实例化,只能本类中访问,但是要求是外部类获得一个A对象,但是在外部又不能实例化A,而且必须是,获得同一个同一对象,所以采用加public,static和return的方法,这样就能类.方法获得一个statici对象A。

public class A {
	private String name="张三";
	private static A a;
	
	private A(){
		System.out.println(name);
	}
	
	public static A getA(){
		if (a==null) {
			a=new A();
		}
		return a;
	}
	
}

在B类中测试一下,返回:    张三    turn

public class B {
	public static void main(String[] args) {
		A a=A.getA();
		A a2=A.getA();
		System.out.println(a==a2);
	}
}

需要注意的是,A里的getA()这样的方法是懒汉写法,相对简单的还有一个饥饿写法,但是这两种写法都是 非线程安全 的写法,为何不安全现在还用不到。个人猜测在多线程里如果这样new对象返回是否会造成new多个对象?




-----------------------------------------------------------------------------------------------------------------------

内部类老师说实际上用的并不多,用的话也是双层,因为内部类里还可以写内部类,而且会生成 外部类$内部类.class这样的文件,所以嵌套太多会生成太多。

需要记住的是内部类的特点,可以访问外部类的成员变量,包括private!

例子:

外部类为out,内部类为inner,打印结果为:


可以看出,一般内部类确实可以直接打印外部类的加了private修饰符的变量,而且一般变量和静态变量都能打印出来,而且根据当前对象this的不同也能分辨出内部类和外部类变量,而静态内部类内部可以定义一般变量,但是它访问外部类的静态变量。

内部哪里还经常使用呢?------->方法的回调(扩展)

public class Test {
	public static void main(String[] args) {
		Inner inner=new Out().new Inner();
		inner.show();
		inner.show2();
		inner.show3();
		inner.show4();
		Inner2 inner2=new Inner2();
		inner2.show();
	}
}

public class Out {
	private String name="外部类的一般变量";
	private static String name2="外部类的静态变量";
	private String name3="外部类的name";
	
	public class Inner{
		private String name3="内部类的name";
		public void show(){
			System.out.println(name);
		}		
		public void show2(){
			System.out.println(name2);
		}
		public void show3(){
			System.out.println(Out.this.name3);
		}
		public void show4(){
			System.out.println(Inner.this.name3);
			System.out.println(this.name3);
		}	
	}
	
	public static class Inner2{
		//String name2="内部类2";
		public void show(){
			System.out.println(name2);
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值