java关键字abstract,static,final,this,super

abstract,static,final,this,super关键字用法
abstract:
修饰抽象方法,有抽象方法的类一定是抽象类,抽象类也用abstract修饰。
抽象类和抽象方法的规则:
抽象类和抽象方法必须使用abstract修饰,抽象方法不能有方法体。
抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器来创建实例。
抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、枚举)5种成分。主要作用是被子类调用。
含有抽象方法的类(包括直接定义一个抽象方法;或继承了一个抽象父类,但没有完全实现父类包含的抽象方法;或实现一个接口,没有实现接口所有方法)只能是抽象类。
抽象方法和空方法体的方法不是一个概念。
当使用抽象类时,表明这个类只能被继承;当用抽象方法时,表明这个方法必须由子类重写(即覆盖Override)实现。而final修饰的方法不能被重写,修饰的类是最终
类不能被继承,所以final和abstract永远不能同时使用。
abstract不能修饰成员变量,不能修饰局部变量,即没有抽象变量这么一说;abstract也不能修饰构造器。
此外static修饰方法时,表明该方法属于该类本身,通过该类就可以调用该方法,但如果该方法被定义为抽象方法,则导致通过该类来调用该方法时出现错误(调用一个没有方法体的方法肯定
会出错误)。因此static和abstract也不能同时修饰某个方法。
注意:static和abstract不是互斥的,static和abstract可以同时修饰内部类。
 此外abstract不能和private同时修饰方法。
static:
两种作用:第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。
 第二,实现某个方法或属性与类而不是对象关联在一起,也就是说可以通过类来直接调用方法或使用类的属性。
static主要有4种使用情况:成员变量、成员方法,代码块,内部类
static成员变量:
java语言中没有全局概念,但可以通过static关键字达到全局效果。static不能修饰局部变量。成员变量分为:static修饰的静态变量和没有static修饰的实例变量。
static修饰的静态变量只要类被加载,这个静态变量就会被分配空间,可以通过2种方式来调用:类.静态变量和对象.静态变量。所有该类对象都共享这个静态变量。
static成员方法:
static方法不需要被创建就可以被调用。static方法中不能使用this和super关键字,不能调用非静态方法,只能通过对象调用非静态成员变量和成员方法。
static代码块:
static代码块(静态代码块)在类中独立于成员变量和成员函数的代码块的。JVM在加载类时会执行static代码块,如果有多个static代码块,JVM将会按顺序来执行。注意:static代码块
只能被执行一次。
static内部类:
它可以不依赖于外部类实例对象而被实例化,而通常的内部类需要在外部类实例化才能实例化。静态内部类不能与外部类有相同的类名,不能访问外部类的普通成员变量,只能访问外部类
的静态成员和静态方法。
final:
用于修饰属性、方法和类。分别表示属性不可变、方法不可覆盖和类不可被继承。
final属性:
被final修饰的变量不可变。但是不可变性分为引用不可变和对象不可变。final是哪种呢?final是指引用不可变性,它只能指向初始化时指向的那个对象,而不关心指向对象内容的变化。
被final修饰的变量必须初始化。一般:①在定义时初始化;②可以在初始化块中初始化,但不能在静态初始化块初始化。③静态final成员变量可以在静态初始化块中初始化,但不能在初始化
块中初始化,但静态final成员变量不能可以在构造函数中初始化。
final方法:
当一个方法被声明为final,该方法不允许任何子类重写这个方法,但子类仍然可以使用这个方法。另外,还有一个被称为inline(内联)的机制,党调用一个final方法时,直接将方法主体插入
到调用出,而不是进行方法调用,这样可以提高程序效率。
final参数:
用来表示这个参数在这个方法内部不允许被修改。
final类:
final类,此类不能被继承,所以方法都不能被重写。
this:
用来执行当前实例对象,一个重要作用:用来曲风对象的成员变量与方法的形参。比如说构造方法中的默认使用。
public Perple(String name){
this.name = name;
}
super:
可以用来访问父类的方法或成员变量。当子类方法或成员变量与父类有相同名字时也会覆盖父类的方法或成员变量,要想访问父类的方法或成员变量只能通过super关键字来访问。
注意:static方法中不能有super和this,此外,在子类构造方法中需要显示调用父类构造方法时,super()必须是构造方法中的第一条语句。

猜你喜欢

转载自blog.csdn.net/x_i_xw/article/details/79016313