黑马程序员_毕向东_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) {
}
}
上一篇: CSS中flex的用法( 学习笔记 )
下一篇: 程序七