java_关于static关键字,单例模式及抽象类

static关键字:静态的

1.修饰成员变量:
    (1)修饰的成员变量,不属于对象的数据结构
    (2)静态变量属于类的,通常使用类名去调用
    (3)静态变量与类的信息一起存在方法区中,只存在一份,是对象的公共资源,在加载期间进行初始化
2.修饰方法:
    (1)通常的方法都是与具体对象有关,即对象的方法(行为)
    (2)若是static方法则与具体对象毫无关系,是类的方法,通常用类名调用,常常与参数有关系
    (3)static内因为无法使用this关键字,因此不能直接访问非静态成员
    (4)static方法的作用一般用于设计成"工具方法"和"工厂方法"
        如:Arrays.sort(参);

3.静态块:static修饰代码块
    static{
        代码逻辑
    }

    静态块存储在方法区中,只加载一次,与对象无关,执行时机为加载类的信息期间,可以理解为在实例化之前

    作用:通常用于加载程序中所需要的静态资源,如:图片,音频等
public class Person {
    private String name;
    private int age;
    static int numOfPerson;
    public Person(){}
    public Person(String name,int age){
        this.name = name;
        this.age = age;
        this.numOfPerson++;
    }
    public String toString() {
        /*
         * 隐藏了一个this参数,即当调用方法时
         * 如:p.toString()即将p赋值给this
         */
        return name+",age="+age+",人数"+numOfPerson;
    }
}
class TestPerson {
    public static void main(String[] args) {
        Person p = new Person("张三",23);
        System.out.println(p);
        Person p1 = new Person("李四",40);
        System.out.println(p1);
        Person.numOfPerson = 10;
        System.out.println(Person.numOfPerson);
    }
}

这里写图片描述
非静态代码块与静态代码块,成员变量,方法都是类的成员

{
    代码逻辑
}

运行时机:在实例化之前执行,每次实例化之前都会执行一次

常量:
一般都是一些特殊的值
一般都使用成员变量,修饰词:static,final,public
声明时必须初始化
命名规则:字母全部大写
如:Math.PI –圆周率

===========================================================

设计模式之单例模式:

需求:在程序中的任何地方,我们想要获取某一个类的唯一对象
    我们称之为类的单例

    (1)提供一个私有的静态的本类的成员变量
    (2)构造器私有化
    (3)提供一个公有的静态的方法获取本类中创建的实例


    饿汉写法:
    public class SingletonDemo {
        private static SingletonDemo instance = new SingletonDemo();
        private SingletonDemo(){}
        public static SingletonDemo getInstance(){
        return instance;
        }
    }

    懒汉写法:
    public class SingletonDemo {
        private static SingletonDemo instance;
        private SingletonDemo(){}
        public static SingletonDemo getInstance(){
        if(instance==null){
        //只创建一次,下次调用方法instance非空
            instance = new SingletonDemo();
        }
        return instance;
        }
    }

========================================================
抽象类:

因为继承的关系,子类的功能可以越来越具体,相对来说,父类更加一般化,通用化,因为父类封装了子类的共同行为,所以,在定义时,我们可以定义方法的逻辑,有的时候,在父类中,无法定义子类的功能需求,此时,不如不写,即不写方法体,代码简单化,但是此方法必须使用abstract修饰,那么次类型也必须使用abstract声明或修饰,即抽象类

1.抽象方法与抽象类
     1)用abstract修饰的方法,不需要写方法体,但是要用";"结束语句
     2)有抽象方法的类,必须使用abstract声明(修饰)
2.抽象类不能实例化
     1)抽象类不能创建对象,没有意义
     2)可以提供构造器
     3)抽象类中可以没有抽象方法
     4)abstract和final不能同时修饰一个类型
3.继承抽象类
     1)若一个类继承了抽象类,那么这个类必须重写(实现)所有抽象方法
     2)若一个类没有实现抽象方法,那么这个类是抽象的
4.抽象类的意义
     1)将不同的子类定义一个父类
     2)抽象类可以封装子类的共同特征,共同行为
     3)虽然子类可能有不同的实现逻辑,但方法的定义一致

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yc_hen/article/details/81392723