黑马程序员_毕向东_Java基础视频教程学习笔记(十七)

来源:互联网 发布:js如何引入模块 编辑:程序博客网 时间:2024/05/17 04:27
package day03;/* * 静态代码块 * 格式:static{ * 静态代码块中的执行语句 * } *  * 特点:随着类的加载而执行,只执行一次 *  */class StaticCode1{static int num=9;StaticCode1(){System.out.println("构造");}static {System.out.println("a"+num);}public static void show(){System.out.println("show().......");}}public class StaticCode {static {System.out.println("静态代码块");}public static void main(String [] args){//new StaticCode1();new StaticCode1();System.out.println("主函数的输出语句");}static {System.out.println("静态代码块fsfs");}}/* * Person p=new Person("zhangsan",20); * 该句话都做了什么? * 1.因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中 * 2.执行类中的static代码块,如果有的话,给Person.class类进行初始化 * 3.在堆内存中开辟空间,分配内存地址 * 4.在堆内存中建立对象的特有属性,并进行默认初始化 * 5.对属性进行显示初始化 * 6.对对象进行构造代码块初始化 * 7.对对象进行对应的构造函数初始化 * 8.将内存地址赋给占内存中的p变量 */
package day03;/* * 设计模式:java中有23种设计模式 (JOF)(四人帮) * 解决某一类问题最行之有效的方法 *  * 单例设计模式:解决一个类在内存中值存在一个对象。 *  * 想要保证对象唯一: * 1.为了避免其他程序过多建立该类对象。先禁止其他程序建立该类对象 * 2.还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象 * 3.为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式 *  * 这三步怎么用代码体现呢? * 1.将构造函数私有化 * 2.在类中创建一个本类对象,并对其static,用private修饰 * 3.提供一个方法获取到对象,并对其static, *  *  * 对于事物该怎么描述,还怎么描述 * 当需要将该事物的对象保证在内存中唯一时,就将以上三部加上即可。 *  */class Single{private static int num; public int getNum() {return num;}public  void setNum(int num) {this.num = num;}private Single(){//1.将构造函数私有化}private static Single s=new Single();//2.在类中创建一个本类对象public static Single getInstance(){//3.提供一个方法获取到对象return s;}}public class SingleDemo {public static void main(String [] args){//Single s1=Single.getInstance();//Single s2=Single.getInstance();//s1.setNum(20);//System.out.println(s1.getNum());//Single.getInstance();/*Single s3=new Single();Single s4=new Single();s3.setNum(30);System.out.println(s4.getNum());*/Student.getStudent();}}class Student{private static int age;private static Student s=new Student();private Student(){}public static Student getStudent(){return s;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}


package day03;/*这个是先初始化对象 * 称为:饿汉式 * Single类一进内存,就已经创建了对象 * class Single{ * private Static Single s=new Single(); * private Single(){} * public static Single getInstance(){ * return s; * } * } *//* * 对象是方法被调用时才初始化,也叫做对象延时加载,成为懒汉式 * Single类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象 */class Single1 {private static Single1 s = null;private Single1() {}public static Single1 getInstance() {if (s == null)synchronized (Single.class) {if (s == null) {// -->A// -->Bs = new Single1();}}return s;}}//记住原则:定义单例时,建议使用饿汉式public class SingleDemo2 {public static void main(String[] args) {}}