0 0

奇了?关于静态内部类单例模式5

各位大侠好,小弟最近写了一个spring读取配置文件的工具类,出现以下问题,希望各位不吝赐教~ 拜谢!

代码如下:

public class PropertieUtil {

	private static Properties properties;

	private PropertieUtil() {
		try {
			System.out.println("once");
			properties = PropertiesLoaderUtils
					.loadAllProperties("parameter.properties");
		} catch (IOException e) {
		}
	}

	private static class PropertieUtilFactory {
		private static final PropertieUtil instance = new PropertieUtil();
	}

	@SuppressWarnings("static-access")
	public static String getPropertie(String key) {
		// 这种不加括号的报错:java.lang.NullPointerException,是因为没走构造函数,为什么不走构造函数呢??
		// return PropertieUtilFactory.instance.properties.getProperty(key);
		// 这种加括号的可以,为什么呢?
		return (PropertieUtilFactory.instance).properties.getProperty(key);
	}

}

 

2014年12月12日 15:40

1个答案 按时间排序 按投票排序

0 0

采纳的答案

首先,你的这种写法是不对的,static修饰的是跟实例无关的的属性和方法,而你把static属性的初始化放到构造方法里面本身是不对的,如果properties是跟实例是相关的,去掉static就可以了,如果不相关,则添加一段static代码块来初始化properties
--------------------
再次,如果按照目前这样写的,以下只是我的理解,不一定正确
1. 不加括号,PropertieUtilFactory.instance.properties.getProperty(key);
因为properties是static的,前面的PropertieUtilFactory.instance仅仅表示这个方法所在的路径而不会做任何处理
2. 加括号 (PropertieUtilFactory.instance).properties.getProperty(key);
由于括号优先级高,编译时认为这里要用到PropertieUtilFactory.instance而对instance进行实例化,之后再访问properties

3. 如果properties是实例属性,则与instance相关,需要初始化instance

2014年12月13日 18:01

相关推荐

    单例模式的多种实现.docx

    单例模式的七种实现方法以及分析,可以作文大作业提交 ...3.6使用静态内部类实现单例模式 12 3.7使用枚举类实现单例模式 13 4.单例模式怎么用才合理? 14 4.1测试 14 4.2无边界 15 5.设计模式学习总结: 15

    这可能是最全的单例模式了

    静态内部类实现单例模式5. 饿汉实现单例模式6. 饿汉变种实现单例模式7. 枚举实现单例模式static修饰下是怎么做到线程安全的?完全不使用synchronized实现单例模式1. CAS(AtomicReference)实现单例模式2. ...

    Java单例模式实现静态内部类方法示例

    主要介绍了Java单例模式实现静态内部类方法示例,涉及构造函数私有化等相关内容,需要的朋友可以了解下。

    java单例模式实例

    一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。

    java实现单例模式-静态内部类模式(线程安全)

    静态内部类模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。

    Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)

    Java-设计模式-单例模式-实现源码(简单实现、双重检查锁、静态内部类、枚举类)

    Java设计模式之单例模式讲解

    主要讲了单例模式的几种方法,懒汉模式、饿汉模式、静态内部类模式。着重讲解了懒汉模式下怎么实现线程安全。饿汉模式和静态内部类模式如何设置能够避免使用反射方法获取多个实列,以及实现了序列化的类如何避免创建...

    Java实现多种单例模式

    通过Java语言,主要实现了六种单例的生成方法,包括懒汉式、饿汉式、双重校验锁、枚举、静态内部类,可以根据实际情况选择使用

    java单例设计模式 4中实现方式,重点介绍了静态内部类的实现方式

    java单例设计模式,重点介绍了静态内部类的实现方式

    项目中用到的jdbc连接 单例模式

    在该方法中,Singleton有一个private类型静态内部类, * 内部类在外部类加载的时候并不会加载,只有在调用getInstance方法的时候加载SingletonHolder类。 * 分析: * 类载入到jvm的时候,会进行初始化,但是只会...

    PHP单例模式是什么 php实现单例模式的方法

    一、什么是单例模式? 1、含义   作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 2、...

    –设计模式–五种实现单例模式的方式

    往下学习单例模式吧■ 章节目录■ 前言■ 什么是单例模式?① 应用场景实例② 模式优点③ 模式缺点④ 注意事项■ 单例模式的五种实现方式饿汉式代码实现懒加载代码实现双重检测锁代码实现静态内部类代码实现(也是懒...

    PHP单例模式详解及实例代码

    单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它不会创建实例副本,而是会向单例类...

    c#设计模式之单例模式的实现方式

    场景描述 单例模式对于我们来说一点也不模式,是一个常见的名称,单例...单例模式实现方式有:饿汉式、懒汉式、双重验证式、静态内部类 下面分别对每一种实现方式做一个简单的实例,以及其优缺点 饿汉式 /// <summary>

    【设计模式】(四)–创建型模式–单例模式

    【设计模式】(四)–创建型模式–单例模式单例模式的定义饿汉式单例模式懒汉式单例模式饿汉式与懒汉式的区别:单例模式的优点单例模式的缺点Java中其他生成单例的方式使用Spring框架...

    Java+单例+多例+工厂+枚举+动态代理===》演示

    通过单例模式可以保证系统中,**应用该模式的这个类只有一个实例**。即一个类只有一个对象实例。 #### 单例设计模式实现步骤 1. 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。 2. 在该类内部...

    PHP设计模式之单例模式原理与实现方法分析

    作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 二、PHP单例模式三要素 1. 需要一个保存类的唯一...

    Kotlin中的5种单例模式示例详解

    静态内部类式 PS:该篇文章不讨论单例模式的运用场景与各种模式下的单例模式的优缺点。只讨论在Java下不同单例模式下的对应Kotlin实现。 一、饿汉式实现 //Java实现 public class SingletonDemo { private ...

    PHP单例模式与工厂模式详解

    一、单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。 所有的单例模式至少拥有以下三种公共元素: 1. 它们必须拥有一个构造函数,并且必须被标记为...

    PHP单例模式详细介绍

    单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它不会创建实例副本,而是会向单例类...

Global site tag (gtag.js) - Google Analytics