Java复习笔记
去年寒假学习过Java,忘记了很多内容,需要复习一下
Java 复习笔记
static
static 静态关键字
静态成员变量
静态成员变量:属于类,加载一次,内存中只有一份,可被静态和非静态方法访问
使用方法:
- 类名.静态成员变量(推荐)
- 对象.静态成员变量
静态成员方法
静态成员方法:属于类,建议用类名访问(也可以用对象访问)
访问方法:
- 类名.静态成员方法(推荐)
- 对象.静态成员方法
注意事项
- 静态方法只能访问静态成员,不能访问实例成员
- 实例方法可以访问静态成员,也能访问实例成员
- 静态方法中不能出现this关键字
static的应用
工具类
如实现生成一个验证码,审核邮箱是否正确,获取系统时间等功能,在工具类中写好,开发时就可以直接调用
特点:
工具类内部都是静态方法,每个方法完成一个功能
建议:
对工具类的构造器进行私有化处理,因为工具类不需要创建对象
静态代码块
package com.study.static_code;
public class Static_Demo1 {
static {
System.out.println("静态代码块执行");
}
public static void main(String[] args){
}
}
特点: 随着类的加载而加载,自动触发且只触发一次,执行顺序在main之前
作用: 可以用于初始化静态资源
单例设计模式
保证系统中,应用该模式的类永远只有一个实例,即只能创建一个对象。如:任务管理器对象
饿汉单例模式
在类加载时创建对象
public class SingleInstance {
/* 定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */
public static SingleInstance instance = new SingleInstance();
/* 单例必须私有构造器*/
private SingleInstance() {System.out.println("创建了一个对象");}
}
懒汉单例模式
在用到对象的时候,才去创建对象
class SingleInstance {
/*定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次*/
public static SingleInstance instance; // null
/* 单例必须私有构造器*/
private SingleInstance() {}
/* 必须提供一个方法返回一个单例对象 */
public static SingleInstance getInstance() {
//...
//return ...;
}
}
继承
继承特点
-
Java不支持多继承,但是支持多层继承
-
子类可以继承父类的私有成员,但是不能访问
-
子类可以使用父类的静态成员(共享/继承存在争议)
-
子父类中的重名成员优先使用子类,如果一定要使用父类的成员可通过super关键字
super.父类成员变量/父类成员方法 -
重写父类方法:
- 静态方法、私有方法不能被重写
- @Override重写注解:可以校验重写是否正确,且可读性好,建议重写方法都添加该注解
- 子类重写父类方法时,访问权限必须大于等于父类(缺省<protected<public)
例如:父类的f函数的访问权限为public,子类重写为protected(或不写)就会报错
子类构造器特点
- 子类不能继承父类的构造器
- 子类中所有的构造器默认都会先访问父类的无参构造器,再执行自己
原因:子类初始化之前,需要先完成父类数据空间的初始化
原理:子类构造器第一行默认是super(),不写也存在 - 子类调用父类的有参构造器
//父类有参构造器 public Animal(String name, int age) { System.out.println("父类构造器被执行" + name + age); } //子类构造器调用父类有参构造器 public Dog(String name, int age) { super(name,age); System.out.println("子类构造器被执行"); } - 调用本类兄弟构造器
作用: 如下面代码中,若构建对象时没有传入schoolName,则会默认schoolName为XiaMenUniversitypublic Student() { } public Student(String name) { // 调用本类兄弟构造器 this(name,"XiaMenUniversity"); } public Student(String name, String schoolName) { this.name = name; this.schoolName = schoolName; }- this()和super()都只能放在第一行,二者不能共存于一个构造器中
- 通过this调用本类其他构造器时,被调用的构造器会通过super调用父类构造器,所以还是会调用父类构造器
访问权限
包
- 相同包下的类可以直接访问,不同包下的类需要导包
- 如果一个类中用到不同类,而两个类的类名相同,则默认导入一个类,另一个类需要带包名访问
权限修饰符
范围从小到大:private -> 缺省 -> protected -> public

final
- 修饰类:被修饰的类不能被继承
- 修饰方法:被修饰的方法不能被重写
- 修饰变量:被修饰的变量被赋值一次后就不能被修改
- 基本类型: 变量存储的数据值不能修改
- 引用类型:变量存储的地址值不能修改,但是指向的对象内容可以修改
常量
常量是用public static final修饰的成员变量,必须有初始化值,且执行过程中值不能改变,通常用来记录系统的配置数据
编译阶段会把使用常量的地方替换成字面量
abstract
public abstract class Animal {
public abstract Run();
}
- abstract 修饰类,这个类就是抽象类;修饰方法,这个方法就是抽象方法;不能修饰变量、代码块和构造器
- 抽象方法只能有签名,不能声明方法体
- 抽象类不能创建对象
- 一个类如果定义了抽象方法,则必须定义为抽象类
- 一个类如果继承了抽象类,则必须重写抽象类的全部抽象方法,否则这个类也必须定义为抽象类