欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-07 23:14:20
...

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
					// -->B
					s = new Single1();
				}
			}
		return s;
	}
}
//记住原则:定义单例时,建议使用饿汉式
public class SingleDemo2 {
	public static void main(String[] args) {

	}
}