day03--面向对象--设计模式之单例模式

来源:互联网 发布:考研网络辅导班 编辑:程序博客网 时间:2024/05/01 00:01
package day03;/* * 静态代码块:static {  },主要作用:初始化静态成员变量 *  * 静态代码块:随着类的加载而执行的,只执行一次 *  * 构造代码块:{ },优先于构造方法执行,主要是来初始化成员变量 *  * 构造代码块:随着对象的创建而执行,每次创建对象而执行 *  * static修饰符什么时候使用? * 1.在多个类之间共享成员变量时,需要将其改为static静态成员 * 2.如果一个成员方法中没有访问本类的成员变量,则将其改为static静态成员方法 *  * 注: * 在程序优化中,建议不要过多地使用static,因为它会长时间地保留在内存中(方法区的静态区) * *对象初始化过程: *   1.加载类的字节码文件到jvm的方法区中 *   2.为静态成员变量在静态区开辟内存空间,并初始化默认值 *   3.加载静态代码块,初始化静态成员变量 *   4.在堆中开辟空间(根据成员变量的大小),并默认初始化成员变量 *   5.加载构造代码块,显示初始化成员变量 *   6.加载构造方法,显示初始化成员变量 *   7.将堆内存空间的首地址赋给对象的引用 */public class Demo7 {    private static int age;    static {        System.out.println("age-->" + age);        // 初始化静态成员变量,在类加载时执行        age = 18;        System.out.println("age-->" + age);    }    {        // 构造代码块,可以被看成是一个无参的构造方法        age += 1;        System.out.println("构造代码块--->age" + age);    }    public static void main(String[] args) {        new Demo7();        // System.out.println("--age-->" + age);        new Demo7();        new Demo7();        new Demo7();    }    public Demo7() {        age += 1;        System.out.println("构造方法中: age-->" + age);    }}
package day03;/* * 设计模式:23种,解决某一类问题的最有效方法 *  * 单例模式:在程序运行期间,保证类对象只会创建一次 *  * 实现过程: *  * 1.私有化构造方法 *  * 2.提供本类的实例对象(饿汉式和懒汉式) *  * 3.向类的外部提供一个方法,获取类的对象 */class View {    private static View view = new View();// 2.提供本类的对象    private View() {        // 1. 构造方法私有化,不能在类的外部通过new创建对象    }    // 3.向外部提供可访问的方法,并返回当前类的对象    public static View getInstance() {// 静态成员不能访问非静态成员        return view;    }}class TextView {    private static TextView tv;    private String text;    private TextView(String text) {        this.text = text;    }    public String getText() {        return text;    }    public static TextView getInstance(String text) {        if (tv == null) {// 懒汉式            tv = new TextView(text);        }        return tv;    }}public class Demo9 {    public static void main(String[] args) {        View v1 = View.getInstance();        View v2 = View.getInstance();        System.out.println(v1 == v2);// 比较的是内存地址        TextView tv1 = TextView.getInstance("张三");        TextView tv2 = TextView.getInstance("李四");        System.out.println(tv1 == tv2);        System.out.println(tv2.getText());    }}
package day03;class BreadMachine {    private static BreadMachine bm = null;    private int counter;// 默认为0    public BreadMachine() {    }    // 单例模式,获取当前类的对象    public static BreadMachine getInstance() {        if (bm == null) {            bm = new BreadMachine();// 创建对象        }        return bm;    }    public void create() {        counter++;        System.out.println(String.format("正在制作第%d个面包", counter));    }}public class Demo10 {    public static void main(String[] args) {        BreadMachine bm = BreadMachine.getInstance();        for (int i = 0; i < 10; i++) {            bm.create();        }        BreadMachine bm2 = BreadMachine.getInstance();        for (int i = 0; i < 10; i++) {            bm2.create();        }    }}
0 0
原创粉丝点击