Static关键字的基本概念
- 使用static的关键字修饰成员变量表示静态的含义,此时成员变量由对象层级提升为类层级,也就是整个类只有一份并被所有对象共享。该成员变量随着类的加载准备就绪,与是否创建对象无关
- static关键字修饰的成员可以使用引用,的方式访问,但推荐类名.的方式
Static关键字的使用方法
在非静态成员方法中既能访问非静态的成员又能访问静态的成员。
(成员:成员变量 + 成员方法,静态成员被所有对象共享)
在静态成员方法中只能访问静态成员,不能访问非静态成员。
(成员:成员变量 + 成员方法,因为此时可能还没有创建对象)
- 在以后的开发中只有隶属于类层级并被所有对象共享的内容才可以用static关键字修饰。(切勿滥用static)
构造块和静态代码块
- 构造块:在类体中直接使用{}括起来的代码块
- 每创建一个对象都会执行一次构造块
- 静态代码块:使用static关键字修饰的构造块
- 静态代码块随着类加载时执行一次
public class BlockTest{
//当需要在执行构造方法体之前做一些准备工作时,将准备工作的相关代码写到构造块中即可
{
System.out.println("构造块。");
}
//静态代码块会随着类的加载而准备就绪,会先于构造块执行
//当需要在执行代码块之前随着类的加载做一些准备工作时
static {
System.out.println("构造静态块。");
}
//定义构造方法
public BlockTest(){
System.out.println("====构造方法体。");
}
public static void main(String[] args) {
BlockTest b1 = new BlockTest();
BlockTest b2 = new BlockTest();
}
}
单例
单例设计模式
- 在某些特殊场合中,一个类对外提供且只提供一个对象时,这样的类叫做单例类,而设计单例的流程和思想就叫做单例设计模式
单例设计模式的实现流程
- 私有化构造方法,使用private关键字修饰
- 声明本类类型的引用指向本类类型的对象,并使用private static关键字共同修饰
- 提供共有的get方法负责将对象返回出去,并使用public static 关键字共同修饰
单例设计模式的实现方式
- 单例设计模式的实现方式有两种,饿汉式和懒汉式,在以后的开发中推荐饿汉式。(考虑到多线程的抢占共享资源问题)
/*
设计模式:单例模式demo
*/
public class staticTest {
//声明本类类型的引用指向本类类型的对象,使用private static关键字共同修饰
//private static staticTest sta = new staticTest(); //懒汉式
private static staticTest sta = null; //饿汉式
//私有化构造方法,使用private修饰
private staticTest(){}
//提供公有的get方法负责将对象返回,使用public static关键字共同修饰
public static staticTest getInstance(){
if(null == sta){
sta= new staticTest();
}
return sta;
}
}
继承
继承的意义
继承的特点
- 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承只是不能直接访问
- 无论使用何种方式构造子类的对象时,都会自动调用父类的无参构造方法,来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代码super()的效果
- 使用继承必须满足逻辑关系:子类 is a 父类,也就是不能滥用继承
- Java语言中只支持单继承不支持多继承,也就是一个子类只能有一个父类,但一个父类可以有多个子类
- 若想实现子类继承多个父类的实现方式只能通过多个继承来实现即子类继承自父类A
构造块与静态代码块
- 先执行父类的静态代码块,在执行子类的静态代码块
- 执行父类的构造块,执行父类的构造方法体
- 执行子类的构造块,执行子类的构造方法体
常用的访问控制符
Final关键字基本概念
- 不可变修饰符,可以修饰类,成员方法及成员变量
- Final修饰的类不能被继承 如java.lang.String类等(用于防止滥用继承)
- Final关键字修饰的方法不能被重写,但可以被继承(放置不小心重写)
- Final关键字修饰成员变量,成员变量必须初始化且不能改变值
常量的概念
在后续的开发中很少单独使用Final关键字修饰常量,通常的使用方法是通过public static final type共同修饰成员变量来表达常量的含义,常量的命名规范是要求所有的字母大写,不同单词之间用下划线来连接