进阶篇开始

首先是static:他叫静态,可以修饰成员变量、成员方法。

1.成员变量按照有无stactic修饰分为类变量和实例变量。

(1)类变量有static修饰,在计算机中只有一份,会被类的全部对象共享

(2)实例对象,无static修饰,属于每个对象的。

public  class test {

    static String name;//类变量
    int age;//实例变量

}

类变量可以通过类名(推荐)和对象(不推荐)进行访问。而实例变量只能通过对象访问。

public class test1 {
    public static void main(String[] args) {
        test.name = "lzk";// 类名.类变量(推荐)
        
        test t = new test();
        t.name = "lzk";//对象.类变量(不推荐)
    }
}
public class test1 {
    public static void main(String[] args) {
        test.name = "lzk";// 类名.类变量(推荐)

        test t = new test();
        t.name = "lzk";//对象.类变量(不推荐)

        test t1 = new test();
        t1.name = "lzk1";
        System.out.println(t1.name);//输出lzk1,因为name是共享的。
    }
}

应用场景:类变量用于共享,并且只需要一个就行。

2.成员对象的分类

(1)类方法,有static修饰,属于类

public static class test{
}

(2)实例方法,无static修饰,属于对象。

public void test{
}

原理大致和上面相似。

应用场景:类方法,做工具类,提高复用性,供给开发人员共同分使用,方便调用。

实例方法做工具类的话,需要创建对象,而创建对象需要占用大量内存,会导致浪费。

3.使用类方法、实例方法的注意事项

(1)类方法可以直接访问类的成员,不可以直接访问实例成员

public  class test {

    static String name;//类变量
    int age;//实例变量
    public static void Hello(){
        name = "lzk";
        age = 18;//报错
    }

}

(2)实例方法可以直接访问类成员,也可以直接访问实例成员

public  class test {

    static String name;//类变量
    int age;//实例变量
    public static void Hello(){
        name = "lzk";
        age = 18;//报错
        sayHello();//报错
    }
    public void sayHello(){
        name = "lzk";
        Hello();//不报错
        age = 18;//不报错
    }

}

(3)实例方法中可以出现this关键字,类方法中不可以出现this关键字

public  class test {

    static String name;//类变量
    int age;//实例变量
    public static void Hello(){
        this.name = "lzk";//报错
        this.age = 18;//报错
        sayHello();//报错
    }
    public void sayHello(){
        this.name = "lzk";
        Hello();//不报错
        this.age = 18;//不报错
    }

}

4.代码块,代码块是类的五大成分之一(成员变量、构造器、方法、代码块、内部类)。

面向对象高级_类方法

5。单例设计模式(架构师构建框架所使用的,)

设计模式是一个问题的最优解。

单例设计模式:目的:确保一个类只有一个对象,不管调用多少次,对象的地址又是同一个。

    (1)定义一个私有构造函数

    (2)定义一个类变量记住类的一个对象

   (3)定义一个类方法,返回对象

示例:饿汉式单例,在获取对象时,对象已经创建好了。

public class A {
    // 2.定义一个类变量记住类的一个对象
    private static  A a = new A();


    // 1.定义一个私有构造函数
    private A() {

    }
    //3.定义一个静态方法,返回类的一个对象
    public static A getInstance() {
        return a;
    }
}

懒汉式单例,在获取对象时,才开始创建对象。

public class B {
    private static B b;

    private B() {

    }
//第一次调用时创建对象,后续只会返回第一次的对象
    public static B getInstance() {
        if (b == null) {
            b = new B();
        }
        return b;
    }
}