Java面向对象
关键字
return-用于方法中
权限修饰符
- private
- 缺省
- protected
- public
package
instanceof
- 判断对象a是否是类A的实例
import
this
- 属性
- 方法
- 构造器
super
- 属性
- 方法
- 构造器
static
静态结构前面省略的都是类
-
属性
- 静态属性
- 每个对象都共享同一个静态变量,当通过某一个对象修改该变量时,其他对象的静态变量也随之修改。
- 1、静态变量随着类的加载而加载,其早于对象的创建
2、由于类只会加载一次,则静态变量在内存中也只会存在一份:存在方法区的静态域中。
3、一般常量定义为static,以及所有对象共享的属性定义为static
- 非静态属性(实例属性)
- 不同的对象独立拥有属于自己的一套非静态属性,修改该属性不会影响其他对象的属性值。
- 静态属性
-
静态方法
- 随着类的加载而加载
- 静态方法中只能调用静态方法和属性,非静态方法中,既可以调用静态方法和属性也可以调用非静态方法和属性
- 在静态方法内,不能使用this、super关键字
- 工具类中的方法,习惯上声明为static,例如:Math(类中的各种方法,sin、cos等)、Arrays(sort等)
-
代码块
-
内部类
-
单例模式:饿汉式VS懒汉式
- 应用场景:网站的计数器、应用程序的日志应用、数据库连接池、读取配置文件的类等
final
-
最终的,可以修饰类、方法、变量
-
修饰类:此类不能被其它类所继承。比如:String类、System类、StringBuffer类
-
修饰变量(此时变量为常量)
-
属性
- 显示初始化
- 代码块中初始化
- 构造器中初始化
- static final 修饰属性:全局常量
-
局部变量
- 修饰方法体中的变量时此时就为常量
- 修饰形参时,表明此形参是一个常量,当调用此方法时,给常量形参赋给一个实参,一旦赋值后,就只能在方法体中使用此形参,但不能进行重新赋值。
-
-
修饰方法:此方法不能被重写,比如:object类中个体Class()方法
- static final 修饰方法,表示不能重写且只能通过类进行调用。
abstract(抽象的)
-
只能修饰类或者方法
-
抽象类
- 此类不能实例化
- 抽象类中一定会有构造器,便于子类实例化时调用
- 开发中,提供抽象类的子类。
-
抽象方法
-
包含抽象方法的类一定是个抽象类
抽象类中可以没有抽象方法 -
抽象方法只有方法的声明,没有方法体
-
抽象方法必须被重写
-
子类重写父类中所有的抽象方法
- 子类可以实例化
-
子类没有重写父类(直接父类+间接父类)中所有的抽象方法
- 子类也是一个抽象类用abstract修饰
-
-
abstract不能修饰私有方法、静态方法、final方法、final类;
不能修饰属性、构造器等结构
-
interface
-
接口-多实现-作用:可以弥补单继承的局限性
-
如何定义接口
-
JDK7之前
- 只能定义全局变量和抽象方法
- 全局常量:public static final,书写时可以省略不写。
抽象方法:public abstract,也可以省略
-
JDK8
-
除了定义全局变量和抽象方法,还可以定义静态方法、默认方法(default)。
-
接口中定义的静态方法只能通过接口去调用
-
通过实现类的对象,可以调用接口中的默认方法
- 如果实现类重写了接口中的默认方法,调用时,仍然调用的是重写以后的方法。
-
如果子类继承的父类和实现的接口中声明了同名同参数的默认方法,如果子类(实现类)在没重写此方法的情况下,默认调用父类的方法。-- 类优先原则
-
如果实现类实现多个接口,多个接口中声明了同名同参数的默认方法,如果实现类在没重写此方法的情况下,则会报错。
实现类必须重写此方法–接口冲突
-
-
接口中不可以定义构造器,意味着接口不可以实例化。
-
类实现(implements)接口
-
实现类覆盖了接口中的所有抽象方法,实现类可以实例化
-
实现类没覆盖接口中所有的抽象方法, 实现类为一个抽象类
-
-
创建实现类的对象
-
非匿名实现类的非匿名对象
- Flash f = new Flash();
-
非匿名实现类的匿名对象
- new Flash ()
-
匿名实现类的非匿名对象
- USB phone = new USB(){ 重写抽象方法};
-
匿名实现类的匿名对象
- new USB(){ 重写抽象方法}
-
-
-
接口与接口之间可以继承,而且可以多继承
-
接口具体使用体现了多态性
只要实现了某个接口的实现类,在方法定义的形参上定义接口形式,就可以new实现类的对象,USB usb = new Flash();
native
- 表示调用底层的c、c++代码
三大特性
封装
-
权限修饰符
- public
- protected
- 缺省
- private
继承
-
extends
- this、super
多态
-
只针对方法、编译左边,运行右边
- instanceof
-
interface-接口体现多态性
常用类
object
- 所有类的直接或间接父类
- equals()
- toString()
包装类
- Byte
- Short
- Integer
- Long
- Float
- Double
- Boolean
- Character
类和类的成员
属性
-
属性赋值
- 1、默认初始化
- 2、显示初始化
- 3、代码块中赋值
- 4、构造器中初始化
- 5、有了对象之后,对象.属性、对象.方法进行赋值
方法
-
main()的使用说明
- 程序的入口
- 是一个普通的静态方法
- 静态方法只能调静态结构,所以在main中调用非静态方法的时候只能采用创建对象调用非静态方法。
- 形参可以作为与控制台交互的方式(原来是Scanner)
-
权限修饰符
- public
- protected
- 缺省
- private
-
返回值
- 有返回值-return
- 无返回值-void
-
形参
- 重载
-
修饰符
- static、final、abstract、native
-
继承
- 重写
-
接口
- 实现
构造器
- 创建对象
代码块(初始化块)
-
形式:{}两个大括号
修饰:只能用static-
静态代码块
- 内部可以输出语句
- 随着类的加载而执行,而且只执行一次
- 作用:初始化类的信息
- 一个类中定义了多个静态代码块,则按照声明的先后顺序执行
- 静态代码块的执行优先于非静态代码块
- 只能调用静态属性、静态方法。
-
非静态代码块
- 内部可以输出语句
- 随着对象的创建而执行,创建一个对象则执行一次
- 作用:在创建对象时,初始化对象的信息
- 一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
- 能调用静态属性、静态方法、非静态属性、非静态方法。
-
-
作用:用来初始化类、对象的信息
内部类
-
Java中允许将一个类A声明在另一个类B中,则类A就是内部类,类B就是外部类。
-
分类
-
成员内部类-静态、非静态
-
作为外部类的成员
-
调用外部类的成员
- 属性:外部类名.this.属性
方法:外部类名.this.方法()
- 属性:外部类名.this.属性
-
可以被static修饰
-
可以被4中不同的权限修饰
-
-
作为一个类
- 类内可以定义属性、方法、构造器
- 可以被继承,也可以被final修饰,表示此类不可以继承
- 可以被abstract修饰
-
如何创建成员内部类的对象
-
静态
- 外部类名.内部类名 名称 = new 外部类名.内部类名();
-
非静态
- 外部类名 外名 = new 外部类名();
外部类名.内部类名 名称 = 外名.new 内部类名();
- 外部类名 外名 = new 外部类名();
-
-
-
局部内部类-方法内、构造器内、代码块内
-
一般在方法的返回值为接口时,需要返回接口的实现类的对象—匿名实现内部类的匿名对象
-
在局部内部类的方法中,如果调用局部内部类所声明的方法中的局部变量时,要求该变量定义为final的。
-
先继承父类再实现接口
-
-
变量
成员变量
- 实例变量
- 类变量
局部变量
- 形参
- 方法局部变量
- 代码块局部变量