final 关键字
1、用final修饰的类不能被继承,没有子类;
2、用final修饰的方法,方法不能被重写;
3、final修饰变量,变量的值不能被修改,表示常量,
(书写规范:全部字母都要大写;多个单词,可以使用下划线(_)分开;)
注意:
如果被final修饰的变量是一个引用类型的数据,那么通过这个引用改变堆空间中的数据,不会报错;;如果被final修饰的变量是一个引用类型的数据,那么通过这个引用改变堆空间中的数据,不会报错;
4、final用于成员变量表示该成员变量为常量,不能被修改,必须在变量定义时赋值。
5、final用于局部变量表示该局部变量为常量,不能被修改,可以在变量定义时赋值,也可以先定义变量后赋值。
什么时候用final关键字?
有的时候不想别人重写我的方法就使用final关键字修饰该方法;
static关键字
1、static用于成员变量表示该变量只有一份,也就是说静态成员变量属于类而不属于某个具体的类实例对象,所有的类实例对象共享这个静态成员变量;
静态函数是不需要对象的,直接可以使用类名来调用;
2、非静态函数可以调用静态函数;静态函数不能调用非静态函(
非静态函数都是通过对象调用的);静态函数不能使用非静态成员变量,但可以使用静态成员变量;
3、静态函数调用时不需要对象的,所以不能使用和对象有关的关键字;(this;super;)
4、构造函数不能使用static修饰(构造函数是创建对象,开辟空间,给所有成员变量赋默认值之后,有JVM调用进栈,用来给对象的成员变量赋初始值的)
static用于类,这里指的是内部类,那么在别的地方就可以通过外部类名来引用这个静态的内部类。
5、static还可以用于类的代码块,叫做静态代码块,静态代码块在类加载的时候就执行完毕,而类只加载一次;是在类中独立于类成员的
static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
什么时候用static关键字?
不想建立对象时;对于公用的成员变量必须使用static关键字修饰才能保证共享;
private关键字
1、java中的访问权限修饰符(作用是控制被修饰的成员的访问权限);被private修饰的成员,只能在本类中使用;所以被私有的成员需要在外界访问,还需要提供一个公共的方法;
设值:
set + 变量名(变量名的首字母大写);
取值:
get + 变量名(变量名的首字母大写);
2、构造函数私有化,就只能在被类中使用,别的地方调用不了单例设计模式时会用到;
在开发中,一般类的成员变量都要私有化,然后提供get和set
方法;
interface关键字
1、interface接口不是一个类,使用interface声明;接口没有构造函数;接口是用来描述不属于继承体系的扩展功能的;还可以定义规则;接口和类之间是实现关系,一个实现类可以实现多个接口;接口和接口之间是继承关系,可以多继承和多重继承;
2、接口中可以书写的内容:
成员变量:只能使用一下修饰符:public static final;也就是说,接口中的成员变量,都是常量;
成员函数:
只能使用修饰符:public abstract ;
也就是说,接口中的方法,都是公共和抽象的;一般函数前面的修饰符,推荐public不要省略;
什么时候用interface关键字?
对于继承体系之外的扩展功能需要使用接口来描述;
implements
关键字
implements
用于实现接口,需要实现接口中的所有方法,可以同时实现多
个接口。
extends关键字
extends
用于继承父类或父接口,继承父类时只能是单继承。
class关键字
class
用于声明类,访问权限可以是public或者默认权限,还可以指定为
abstract、final,访问权限对于顶层类和内部类的限制是不同的。
instanceof关键字
1、比较运算符,运算符左边是一个指向一个对象的引用(左边就是一个变量名),右边是一个类名,运算符表示的意思就是:判断左边的对象的类型是不是右边的类;
2、使用instanceof关键字,可以实时判断一个对象的类型,就可以避免强制类型转换中容易出现的类型转换异常。
abstract关键字
1、abstract用于类表示这个类为抽象类,不能实例化。
2、抽象类,必须由子类去继承,继承的子类必须实现父类中所有的抽象方法,否则子类也是抽象的;
3、抽象函数必须放在抽象类中;抽象类中除了抽象函数,还可以定义所有一般类中可以定义的成员;
4、抽象类中可以不书写抽象方法;抽象类中必须有构造方法;抽象类一定是父类;
5、抽象类是父类,用来描述所有子类的共性信息的,只是描述的有些功能是不具体的;
6、abstract用于方法表示这个方法为抽象方法,只需声明,不用实现,由子类实现,抽象方法不能用private和static关键字。
什么时候用abstract关键字?
当事物的功能描述不清,只能表示有这个功能时,就应该使用抽象修饰该功能,这个功能就是抽象的功能;如果一个类中有抽象的功能,那么这个类也是抽象的类;不想实例化这个类(包括自己也不行),但是允许别人继承,也可以使用抽象类。
类修饰符:
public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。
final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。
friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。
成员变量修饰符:
public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。
private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。自己的类指的是同一个包中可以被其他类访问,
不同包中只能被该类的子类访问。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
final,最终修饰符,指定此变量的值不能变。
static(静态修饰符)指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。
transient(过度修饰符)指定该变量是系统保留,暂无特别作用的临时性变量。
volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改。
方法修饰符:
public(公共控制符)
private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
protected(保护访问控制符)指定该方法可以被它的类和子类进行访问。
final,指定该方法不能被重载。
static,指定不需要实例化就可以激活的一个方法。
synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。
native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。