/**
* @author Administrator** @description 静态块、代码块、同步块学习测试类* @history*/class BlockDemo { static { // 在类中定义的static{ //...}为静态代码块// 静态代码块的程序只会被初始化一次System.out.println("BlockDemo->static");} { // 在类中定义的{ //...}为构造代码块// 构造代码块和对象一起初始化的System.out.println("BlockDemo->{}");}public BlockDemo() { System.out.println("BlockDemo->BlockDemo");}// 构造方法、构造代码块和静态代码块初始化顺序呢?// 静态块、构造块、构造方法 // 表面初步分析,具体有待研究}public class MyDemo { /*** @description
* @param args*/public static void main(String[] args) { // 静态块、代码块、同步块{ // 在方法中用{ //... }定义的为普通代码块int x = 100;System.out.println(x); // 100 相当于局部变量}int x = 200;System.out.println(x); // 200new BlockDemo();new BlockDemo();// BlockDemo->static static代码块只会被初始化一次// BlockDemo->{}// BlockDemo->BlockDemo// BlockDemo->{}// BlockDemo->BlockDemo}}————————————————————————————————————————————————————————————
/**
* @author Administrator** @description 构造方法、匿名对象、单例学习测试类* @history*/public class MyDemoTest { private String username; // 定义私有属性username// 构造方法的作用是初始化操作// 构造方法是一种特殊的方法,构造方法也有重载public MyDemoTest(){ // 无参数构造方法}public MyDemoTest(String username) { // 定义构造方法this.username = username; // 对属性初始化赋值操作}/***@description*@param args*/
public static void main(String[] args) { // 实例化一个匿名对象// 匿名对象不在栈中开辟空间赋地址值new MyDemoTest("eclipse");}}/*** @author Administrator** @description 单例学习测试类* @history*/class Singleton { private Singleton() { // 将构造方法私有化,外部不能直接调用System.out.println("private Singleton(){//...}");}// 饿汉式获取单例代码private static Singleton instance = new Singleton();// 对外提供一个getInstance方法获取单例public static Singleton getIntance() { return instance;}}class Singleton2{ private Singleton2(){ // 构造方法私有化,外部不能直接调用System.out.println("private Singleton2(){//...}");}// 懒汉式获取单例代码private static Singleton2 instance = null;private static Object lock = new Object();// 获取单例方法,效率比较低// 每次进入都要进行锁判断,而实际情况我们是第一次null比较特殊/*public static Singleton2 getIntance(){ synchronized (lock) { if (instance == null) { // 如果为null进行实例化对象操作instance = new Singleton2();}}return instance;}*/
// 上面同步代码的另外一种写法如下,效率比较低// public static synchronized getInstance(){ //...}// 对同步代码进行改写public static Singleton2 getIntance(){ if(instance == null){ synchronized(lock){ if(instance == null){ // 进行双重检验操作instance = new Singleton2();}}// 如果换为下面这种形式那么就可能不是产生一个实例对象了/*synchronized(lock){ instance = new Singleton2();}*/}return instance;}}