static 那天我朋友问了我个问题,static和单例模式有什么区别,所以我觉得static可以讲一下 他的问题是,把对象弄成static是不是就不变了 显然,这是还没弄清楚引用和对象的区别 其实存放在静态区中的是引用,而不是对象.而对象是存放在堆中的.如果有这样一句话 public static final Book book = new Book(); 意思就是book这个引用,指向了这个new出来的对象. static的引用和正常的引用有什么区别? 当你加载了这个类的时候(第一次使用这个…
近期用sonar測评代码质量的时候,发现一个问题,project中一些util类,曾经写的static方法都提示最好用单例的方式进行改正. 为此,我细致想了想,发现还是非常有道理的.这里谈谈我个人对static方法与单例模式的理解. 所谓单例模式,我不做过多解释,推荐java设计模式之禅这本书,好好理解一下. 这里我谈谈两种写法: 曾经一些公共的类,我不假思索,习惯依照例如以下写法去写: public class DateUtil { public final static String DAT…
首先了解static 关键字 static声明的方法是静态方法,static声明的成员变量为静态成员变量.对于该类的所有对象来说,static的成员变量和static只有一份存储空间 即使没有创建该类的对象(实列),也可以使用该类static的成员变量和static方法. static所修饰的成员变量和静态代码块 当虚拟机对该类初始化的时候就会被创建,也就是 即使没有创建这个类的实列,java虚拟机也能根据类名在运行时数据区的方法内找到他们.(也就是说类的初始化和创建类的实列并不是一回事) 静态…
单例模式的static方法和非static方法是否是线程安全的? 答案是:单例模式的static方法和非static方法是否是线程安全的,与单例模式无关.也就说,如果static方法或者非static方法不是线程安全的,那么不会因为这个类使用了单例模式,而变的安全. 闲话休说,看代码: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestSingl…
http://tanbing1986411.blog.163.com/blog/static/7259798220103610224434/ java static final 初始化 1.static修饰(类变量)一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用. public class Test{ public static int a;//…
单例模式是Java中常用的设计模式之一.单例模式属于创建型模式,它提供了一种创建对象的最佳方式. 单例模式只创建类的一个对象,之后在一定范围为可任意调用,确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象. 单例模式的几种实现方式 1.懒汉式 懒汉式是一种非线程安全的单例实现方式,实现代码非常容易. 描述:这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程.因为没有加锁 synchronized,所以严格意义上它并不算单例模式.这种方…
DCL:Double Check Lock ,意为双重检查锁.在单例模式中懒汉式中可以使用DCL来保证程序执行的效率. 1 public class SingletonDemo { 2 private static SingletonDemo singletonDemo = null; 3 private SingletonDemo(){ 4 } 5 6 public SingletonDemo getSingletonDemo(){ 7 if(singletonDemo == null){ 8…
Static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享.只要该类加载,JVM虚拟机就能根据类名在运行时数据区的方法区内找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象.1.static修饰类的成员方法或者成员变量,我们通常称该方法是静态方法,该方法是静态变量:若用public修饰static成员方法或者成…
编写实体类并且继承序列化接口时候,实体类会有警告,要生成一个静态的serialVersionUID. 上网搜了一下资料,现通俗解释一下: 点击前2个选项,会生成: private static final long serialVersionUID = 474750103221294654L; serialVersionUID用来作为Java对象序列化中的版本标示之用: 如果一个序列化类没有声明这样一个static final的产量,JVM会根据各种参数为这个类计算一个: 对于同样一个类,不同版…
Unlike methods, a constructor cannot be abstract, static, final, native  or synchronized. 1. A constructor is not inherited, so there is no need to declare it final 2. As the same reason above, an abstract constructor could never be implemented. 3. A…