类和对象2

static关键字 

类和对象2_第1张图片
1.静态变量或方法不属于对象,但依赖类。
2.静态变量是全局变量,生命周期从类被加载后一直到程序结束
3.静态变量内存只存一份,在静态方法区存储(静态方法区:静态变量,类信息(方法)
4.静态变量是本类所有对象共享一份,谨记在类中静态初始化
5.建议不要使用对象名去调用静态数据,直接使用类名调用
6.static修饰一个方法,那么该方法属于类,不属于对象,直接用类名调用
7.静态方法不能访问非静态的数据,生命周期不同

在开发中,定义静态数据需要充分考虑数据的生命周期,如果静态数据太多,必然会占用更大的内存空间。

类和对象2_第2张图片

类和对象2_第3张图片

 main方法分析

类和对象2_第4张图片

 代码块类和对象2_第5张图片

理解代码块的作用以及实初始化的过程,注意,静态代码块可在未来开发中用来作启动项目时需要初始化数据的工具。  

 单例设计模式

单例模式的思想在于保证工具类仅有一个实例,以节省工具类在频繁使用时不断创建对象消耗内存的场景。  

类和对象2_第6张图片

 使用单例设计模式的好处:

1.在设计一些工具类的时候(通常工具类,只有功能方法,没有属性)
2.工具类可能会被频繁调用
目的是为了节省重复创建对象所带来的内存消耗,从而来提高效率

(使用构造方法私有化+静态方法,来实现工具类,比如Math,但不能来替代单例)

//单例设计模式
public class test {
    public static void main(String[] args) {
        //饿汉式:在类被加载后,对象被创建,到程序结束后释放
        Singleton1 s = Singleton1.getInstance();
        s.print();
        Singleton1 s1 = Singleton1.getInstance();
        s1.print();

        System.out.println(s == s1);

        //懒汉式:在第一次调用getInstance方法时,对象被创建,到程序结束后释放
        Singleton2 ss = Singleton2.getInstance();
        ss.print();
        Singleton2 s2 = Singleton2.getInstance();
        s2.print();

        System.out.println(ss == s2);

    }

}

//饿汉式:占用的内存的时间长,提高效率
class Singleton1 {
    private Singleton1() {};

    private static Singleton1 s = new Singleton1();

    public static Singleton1 getInstance() {
        return s;
    }

    public void print() {
        System.out.println("测试方法");
    }
}

//懒汉式:占用内存时间短,效率相对低 建议使用这个! (懒加载,延迟加载)
//多线程访问时会有安全问题
class Singleton2 {
    private Singleton2() {};

    private static Singleton2 s;

    public static Singleton2 getInstance() {
        if (s == null) {
            s = new Singleton2();
        }
        return s;
    }

    public void print() {
        System.out.println("测试方法2");
    }
}

 对象数组与管理

类和对象2_第7张图片

 动态数组的本质其实是通过创建新数组来实现无限扩容,理解扩容算法和删除算法是掌握动态数组的关键。

你可能感兴趣的:(java,java,jvm,开发语言)