`
longhua2003
  • 浏览: 13469 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java类的调用顺序决定的单例模式

    博客分类:
  • Java
阅读更多
  学习Java有一年多,很多基础知识是了解的,有些知道怎么用,但不明白,它是怎么来的。
经常在书上看到介绍类里面的构造方法,静态方法,普通方法与静态变量,调用顺序,但不明白它的真正用处。
  今天走进公司时,我突然间,想到了Java的类中,方法,变量的调用顺序重要吗,我一下就想到了单例模式,因为我之前只是知道单例模式的用处,但不明白它怎么来的,单例模式不就是根据类的启动顺序写出来,因为类会先调用static,然后,再是构造函数,可见有些知识点,你只要灵活一点,就大有用处,当然不知,大家认为我的观点对不对,我认为是这样的。



package com.fanshe;

public class TestB {

public static void main(String[] args) {
TestA tmp = TestA.getSingleton();
tmp.Show("TestB调用show");
tmp.setX(20);
System.out.println(tmp.getX());
TestC tmpc = new TestC();
tmpc.Td();
}

}


//先调用静态变量与静态方法,再是构造方法
package com.fanshe;

public class TestA {

private static TestA Singleton = null;
int x;

public TestA() {
x = 15;
    System.out.println("进入构造方法...");
}

public static TestA getSingleton(){ 
System.out.println("Singleton = "+Singleton);
if (Singleton == null){
System.out.println("进入单例...");
Singleton = new TestA();
}
return Singleton;
}

public void Show(String str)
{
System.out.println(str);
}
public int getX() {
return x;
}

public void setX(int x) {
this.x = x;
}


}


package com.fanshe;

public class TestC {

public void Td()
{
TestA.getSingleton().Show("TestC调用show");
System.out.println(TestA.getSingleton().getX());
}
}


结果如下:
Singleton = null
进入单例...
进入构造方法...
TestB调用show
20
Singleton = com.fanshe.TestA@dd7404
TestC调用show
Singleton = com.fanshe.TestA@dd7404
20
0
0
分享到:
评论

相关推荐

    Java 基础面试题

    24. 手写单例模式中的懒汉式和饿汉 25. transient 这个关键字是干啥的 26. 什么是一致性hash算法 27. 构造方法链 28. 谈谈你对线程调度的理解 29. JDK动态代理和CGLIB动态代理 30. 反射机制以及反射的方式 31...

    Java经典编程源码基础例程300.zip

    实例046 单例模式的应用 69 实例047 汉诺塔问题求解 70 实例048 编写同名的方法 71 实例049 构造方法的应用 72 实例050 统计图书的销售量 73 实例051 两只完全相同的宠物 74 实例052 重新计算对象的哈希码 76 实例...

    java 面试题 总结

    以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ private int j; public static void main(String args[]){ ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); ...

    java面试800题

    类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值; (2)调用父类构造函数; (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式; (4)调用本身构造函数。" Q0053 "Public ...

    java设计模式选择题复习题.doc

    行为型特点:怎样合理的设计对象之间的交互通信,以及怎样合理的为对象分配职 结构型特点:主要用于处理类或对象的组合 Java jdk中使用了哪些设计模式 1.单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器...

    疯狂JAVA讲义

    6.3.2 单例(Singleton)类 176 6.4 final修饰符 177 6.4.1 final变量 177 6.4.2 final方法 181 6.4.3 final类 182 6.4.4 不可变类 182 6.4.5 缓存实例的不可变类 186 6.5 抽象类 188 6.5.1 抽象方法和抽象...

    研磨设计模式-part2

    初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,培养正确的“设计观”;中高级内容则深入探讨如何理解这些模式,...

    研磨设计模式-part4

    初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,培养正确的“设计观”;中高级内容则深入探讨如何理解这些模式,...

    研磨设计模式-part3

    初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,培养正确的“设计观”;中高级内容则深入探讨如何理解这些模式,...

    design-pattern-forjava.zip

    9,工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化那个类,工厂方法使一个类的实例化延迟到其子类。 10,享元模式:运用共享技术有效的支持大量细粒度的对象。 11,解释器模式:给定一个语言,定义...

    java7hashmap源码-java:Java

    java7 hashmap源码 Table Of Contents day01_JAVA语言概述与基本语法:标识符...day10_高级类特性2:初始化块、抽象类、interface接口、main方法、单例模式、模板方法设计模式 day11_高级类特性2:内部类、接口与抽象类

    JAVA 范例大全 光盘 资源

    实例31 单例模式(Singleton) 75 实例33 开车(简单工厂模式) 77 实例33 旅游(工厂方法模式) 79 实例34 花园布局(抽象工厂模式) 80 实例35 几何图形(适配器模式) 82 第6章 字符串 85 实例36 获取字符...

    Java JDK实例宝典

    5 类的加载顺序 2. 6 方法和变量在继承时的覆盖与隐藏 2. 7 排序类 2. 8 Singleton单例模式 2. 9 Factory工厂模式 2. 10 Adapter适配器模式 第3章 数字 3. 1 数字与数字封装类 3. ...

    java范例开发大全源代码

     实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248 ...

    java范例开发大全

    实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160 汽车适配器(Adapter适配器模式) 248 8.4 垃圾回收 250 实例...

    Java范例开发大全 (源程序)

     实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248  8.4 ...

    超级有影响力霸气的Java面试题大全文档

     java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或...

    java面试题

    答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装类。 String和StringBuffer的区别? 答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新...

Global site tag (gtag.js) - Google Analytics