Java面向对象基础杂记5
静态变量:
创建多个对象,都通用一个静态变量,其中一个对象修改,其他的对象调用此静态变量时,也是被修改固定。
可以直接以类名.static变量来赋值。
静态变量的加载早于对象的创建,在内存中只存在一份,保存在方法区的静态域中
静态方法与静态变量类似,可以由类直接调用,但静态方法中只能调用静态方法,不能使用this,super等关键字
**单例设计模式:**要求程序里的某个类只能有单个实例对象。所以对象在类中创建,对象为静态私有,构造器为私有,方法为公共静态。外部通过类名.静态方法来操作。分为饿汉式与懒汉式,前者会初始化,后着在方法里new。
一般用于网站的计数器,应用程序的日志,数据库连接池,windows的任务管理器与回收站等
**代码块:**相当于在类内部对属性操作
1.代码块的作用:用来初始化类和对象
2.代码块只能用static来修饰
静态代码块:
内部可以有输出语句
随着类的加载而执行,只执行一次
作用:初始类的信息
如果有多个静态代码块,按顺序执行
其中不能调用非静态的结构
非静态代码块:
内部可以有输出语句
随着对象的创建而执行
作用:创建对象时,对对象属性等进行初始化
final:
1.用来修饰类,方法,变量
2.修饰类时,类不能被继承
修饰方法时,方法不能被重写
修饰变量时,变量不可被修改
3变量是属性时,不能默认初始化,必须从,显式,代码块,构造器中进行初始化
static final:用来修饰属性,全局常量
abstract:用来修饰类与方法
类:不能实例化,但有构造器
方法:只有声明没有主体;所在类必须是抽象类,但抽象类里可以没抽象方法,子类必须重写父类所有抽象方法才能实例化.
abstract不能修饰私有方法,静态方法
抽象类的匿名子类:抽象类 对象名 = new 抽象类{重写方法};
interface:
接口内部变量:
JDK7及以前:只能定义全局常量和抽象方法
全局常量:public static final,书写时可以不写
抽象方法:public abstract
JDK8:还可以定义静态方法,默认方法
接口没有构造器,不能实例化。接口对应实现类,如果实现类没有覆盖接口中所有抽象方法,则实现类仍为一个抽象类。
接口使用上也满足多态性,定义接口 接口名,传入的必须是一个实现类对象
接口也有匿名实现类:接口 对象名 = new 接口{重写方法};
JDK8中,接口定义的静态方法,只能通过接口调用;默认方法(default)可以通过实现类的对象调用,同样默认方法可以重写。
如果子类(实现类)继承的父类和实现的接口中声明了同名同参数的方法,那么子类在没有重写此方法的情况下,默认调用的是父类中同名同参的方法。(父类更高优先级,类优先原则)
如果实现类实现的多个接口,有同名同参默认方法,此时必须要重写此方法。
super.method()调用父类声明被重写方法
接口.super.method()调用接口中被重写的默认方法
**内部类:**成员内部类(静态,非静态),局部内部类(方法内,代码块内,构造器内)