首页 > 代码库 > 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
经常在书上看到介绍类里面的构造方法,静态方法,普通方法与静态变量,调用顺序,但不明白它的真正用处。
今天走进公司时,我突然间,想到了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
Java类的调用顺序决定的单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。