1. Static 关键字
1.概念
2.使用
3.使用static修饰属性:静态变量
3.1 属性按是否static修饰,分为静态属性//非静态属性(实例变量)
实例变量:创建类的多个对象,每个对象都有一套类中的非静态属性,当修改其中一个对象中的非静态属性时,不影响其他对象中同样的属性
静态变量:创建类的多个对象,多个对象共享同一个静态变量,当通过某个对象修改静态变量时,其他对象调用此静态变量时,也是修改的了
3.2 其他说明
1. 静态变量随着类的加载而加载 早已对象的创建
1. 实例变量是随着对象的创建加载的
1. 类在内存中只会加载一次,类变量也只加载一次
4.使用static修饰方法:静态方法
4.1 静态方法随着类的加载而加载 ,类.静态方法()
4.2 静态方法内只能调用静态属性和静态方法
4.3 非静态方法内可以调用静态属性和方法,也可以调用调用非静态的属性和方法
5.如何确定一个属性或者方法需要使用static
5.1 属性可以被多个对象共享的,不会随着对象的不同而不同
5.2 通常类的常量也声明为 static
5.3 操作静态属性的方法,通常设置为static方法
5.4 工具类的方法 通常设置为static 方法
6.设计模式(单例设计模式)
6.1 概念:所谓单例子模式,就是采取一定的方法保证在整个系统当中,对某个类只有一个对象的实例
6.2 如何使用?
1. 私有化构造器
1. 内部创建类的对象(对象也必须是静态的)
1. 提供公共的方法,返回类的实例
6.3 单例模式分类
1. 懒汉式 (1.延迟对象创建)
1. 饿汉式 (1.加载时间过长 2.线程安全)
2. main方法的语法
2.1 main 方法是程序的入口
2.2 main 方法也是一个普通的static静态方法
3. 代码块
3.1 代码块的作用?用来初始化类、或者对象
3.2 如果有修饰的话 只能是static
3.3 分类: 静态代码块和非静态代码块
3.4 静态代码块
- 随着类的加载而执行,只执行一次
2. 静态代码可以有输出语句
3. 静态代码块只能调用静态属性或者方法初始化类的属性 如果定义多个非静态代码块,则按顺序执行
3.5 非静态代码块
- 随着对象的创建而加载
2. 可以有输出语句
3. 每创建一个对象就执行一次非静态代码块可以在创建对象时对,对对象的属性初始化 如果定义多个非静态代码块,则按顺序执行 由于类的加载先与对象的创建,所以先执行静态代码块,后执行非静态代码块。静态代码块只执行一次,非静态代码块可执行多次
4. 抽象类和抽象方法
1. abstract
1.abstract 抽象的
2.abstract 可以修饰 类或者方法
3.abstract 修饰类 代表类就不能被实例化 抽象类
1. 一定有构造器
1. 便于子类实例化调用
1. 提供抽象类的子类,让子类实例化,完成相关操作
4.abstract 修饰方法 抽象方法
- abstract 修饰的方法交抽象方法
- 只有方法声明,没有方法体
- 格式:public abstract void run();
- 包含抽象方法的类一定是抽象类,抽象类中可以没有抽象方法
- 子类重写了父类(直接父类和间接父类)所有的抽象方法,则此类可实例化
5.使用场景
匿名子类对象
5. 接口
接口的使用
1.接口使用interface 来定义
2.接口和类是并列的两个结构
3.如何定义接口和接口的成员
- jdk7 只能定义全局常量和接口方法
- 全局常量 public static final 可以省略
- public abstract 可以省略
- jdk8中可以定义静态方法和默认方法 (接口.静态方法)
- 接口中不能定义构造器
- 接口都通过类去实现 implements
- 实现类需要实现接口的所有抽象方法才可以实例化
-
4. 接口的使用体现多态性
接口中的静态方法只能通过 接口来调用(接口.静态方法)
- 通过接口类的实现类的对象可以调用接口中的默认方法
- 如果实现类重写了接口类中同名同参的方法,调用时仍然调用的是重写后方法
- 如果实现类对象的父类和接口类声明了同名同参的方法,实现类没有重写此方法,默认调用父类的方法(类优先)
- 如果实现类实现了多个接口,而且多个接口定义了同名同参的默认方法,实现类没有重写此方法,我们叫接口冲突
- final 修饰 方法 变量 类
2. final修饰类:被final修饰的类 不能被继承
3. final修饰方法:被final修饰的方法 被能被重写
4. final修饰变量:被final修饰的变量 此时的变量就称为是常量
5. final修饰属性:被final修饰的属性 是类常量 (可以1.显式赋值 2.代码块赋值 3.构造器赋值)
final变量的使用场景:
1. 所有对象的常量都一样用显式赋值
2.所有对象的常量都不一样用构造器赋值
3.需要调用方法在代码块中赋值
6. final 修饰局部变量
1.修饰方法体内 变量就是一个常量
2.final 修饰形参,表明此形参是一个常量,只能在方法体内使用此形参。
7. static final 修饰属性: 全局常量
static final 修饰方法: