java定义类的关键字_JAVA类与对象(三)----类定义关键字详
解
static 表⽰静态,它可以修饰属性,⽅法和代码块。
1.static修饰属性(类变量),那么这个属性就可以⽤类名.属性名来访问,也就是使这个属性成为本类的类变量,为本类对象所共有。这个属性就是全类公有。(共有的类变量与对象⽆关,只和类有关)。
注意:类中的实例变量是在创建对象时被初始化的,被static修饰的属性,也就是类变量,是在类加载时被创建并进⾏初始化,类加载的过程是进⾏⼀次。也就是类变量只会被创建⼀次。
2.static修饰⽅法(静态⽅法),会使这个⽅法成为整个类所公有的⽅法,可以⽤类名.⽅法名访问。
注意:static修饰的⽅法,不直接能访问本类中的⾮静态(static)成员(包括⽅法和属性),本类的静态(static)⽅法可以访问本类的静态成员(包括⽅法和属性),可以调⽤静态⽅法。静态⽅法要慎重使⽤。在静态⽅法中不能出现this关键字。
注意:⽗类中是静态⽅法,⼦类中不能覆盖为⾮静态⽅法,在符合覆盖规则的前提下,在⽗⼦类中,⽗类中的静态⽅法可以被⼦类中的静态⽅法覆盖,但是没有多态。
注意:⽗⼦类中,静态⽅法只能被静态⽅法覆盖,⽗⼦类中,⾮静态⽅法只能被⾮静态⽅法覆盖。
3.static修饰初始代码块,这个代码块只在类加载时被执⾏⼀次。可以⽤静态初始代码块初始化⼀个类。动态初始代码块,写在类体中
的“{}”,这个代码块是在⽣成对象的初始化属性是运⾏。
补充:类在什么时候会被加载?
创建对象时会加载类,调⽤类中静态⽅法或访问静态属性也是会加载类的。在加载⼦类时必会先加载⽗类,类加载会有延迟加载原则,只有在必须加载时才会加载
final修饰符,可以修饰变量,⽅法,类1.final修饰变量被
fianl修饰的变量就会变成常量(常量应当⼤写),⼀旦赋值不能改变,fianl的常量不会有默认初始值,对于直接在初始化是赋值时final修饰符常和static修饰符⼀起使⽤。
2.final修饰⽅法,被final修饰的⽅法将不能被其⼦类覆盖,保持⽅法的稳定不能被覆盖。
3.final修饰类,被final修饰的类将不能被继承。final类中的⽅法也都是final的。
注意:(1)、final,不能⽤来修饰构造⽅法,在⽗类中如果有常量属性,在⼦类中使⽤常量属性时是不会进⾏⽗类的类加载。
(2)、不变模式,对象⼀旦创建属性就不会改变。⽤final修饰属性,也⽤final修饰类(强不变模式),⽤final修饰属性(弱不变模式)。
abstract(抽象)修饰符,可以修饰类和⽅法
1.abstract修饰类,会使这个类成为⼀个抽象类,这个类将不能⽣成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于⼀类的半成品,需要⼦类继承并覆盖其中的抽象⽅法。
2.abstract修饰⽅法,会使这个⽅法变成抽象⽅法,也就是只有声明(定义)⽽没有实现,实现部分以";"代替。需要⼦类继承实现(覆盖)。
注意:(1)、有抽象⽅法的类⼀定是抽象类。但是抽象类中不⼀定都是抽象⽅法,也可以全是具体⽅法。
(2)、abstract修饰符在修饰类时必须放在类名前。
(3)、abstract修饰⽅法就是要求其⼦类覆盖(实现)这个⽅法。调⽤时可以以多态⽅式调⽤⼦类覆盖(实现)后的⽅法,也就是说抽象⽅法必须在其⼦类中实现,除⾮⼦类本⾝也是抽象类。
注意:⽗类是抽象类,其中有抽象⽅法,那么⼦类继承⽗类,并把⽗类中的所有抽象⽅法都实现(覆盖)了,⼦类才有创建对象的实例的能⼒,否则⼦类也必须是抽象类。抽象类中可以有构造⽅法,是⼦类在构造⼦类对象时需要调⽤的⽗类(抽象类)的构造⽅法。
抽象类的使用final和abstract,private和abstract,static和abstract,这些是不能放在⼀起的修饰符,因为
abstract修饰的⽅法是必须在其⼦类中实现(覆盖),才能以多态⽅式调⽤,以上修饰符在修饰⽅法时期⼦类都覆盖不了这个⽅法,final是不可以覆
盖,private是不能够继承到⼦类,所以也就不能覆盖,static是可以覆盖的,但是在调⽤时会调⽤编译时类型的⽅法,因为调⽤的是⽗类的⽅法,⽽
⽗类的⽅法⼜是抽象的⽅法,⼜不能够调⽤,所以上的修饰符不能放在⼀起。
抽象(abstract)⽅法代表了某种标准,定义标准,定义功能,在⼦类中去实现功能(⼦类继承了⽗类并需要给出从⽗类继承的抽象⽅法的实现)。
⽅法⼀时间想不到怎么被实现,或有意要⼦类去实现⽽定义某种标准,这个⽅法可以被定义为抽象。(abstract)
public(公共访问权限):
这是⼀个宽松的访问控制级别,如果⼀个成员(包括成员变量、⽅法和构造器等)或者⼀个外部类使⽤public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同⼀个包中,是否具有⽗⼦继承关系。
private(当前类访问权限):
如果类⾥的⼀个成员(包括成员变量、⽅法和构造器等)使⽤private访问控制符来修饰,则这个成员只能在当前类的内部被访问。很显然,这个访问控制符⽤于修饰成员变量最合适,使⽤它来修饰成员变量就可以把成员变量隐藏在该类内部。
protected(⼦类访问权限):
如果⼀个成员(包括成员变量、⽅法和构造器等)使⽤protected访问控制符修饰,那么这个成员既可以被同⼀个包中的其他类访问,也可以被不同包中的⼦类访问。在通常情况下,如果使⽤protected来修饰⼀个⽅法,通常是希望其⼦类来重写这个⽅法。
default(包访问权限):
如果类⾥的⼀个成员(包括成员变量、⽅法和构造器等)或者⼀个外部类不使⽤任何访问控制符修饰,就称它是包访问权限,default访问控制的成员或外部类可以被相同包下的其他类访问。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论