修饰类的关键字总结

本文详细介绍了Java中static、final与abstract这三个关键字的使用方法及注意事项,包括它们如何修饰属性、方法和类,以及在类加载过程中的行为。

转自:http://www.cnblogs.com/scf141592/p/5721093.html

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访问控制的成员或外部类可以被相同包下的其他类访问。
在 Java 中,权限修饰关键字用于控制、方法、成员变量和构造函数等的访问权限。主要有四种权限修饰关键字,分别是 `private`、`default`(默认,不写修饰符时的情况)、`protected` 和 `public`,它们的访问权限范围从小到大依次为:`private` < `default` < `protected` < `public` [^1][^2][^3][^5]。 - **`private`**:私有的,只能在本中访问。例如: ```java class PrivateExample { private int privateVariable = 10; private void privateMethod() { System.out.println("This is a private method."); } } ``` - **`default`**:默认修饰符,在编写代码时空着不写。被默认修饰修饰、方法、成员变量等,只能被同一包内的访问 [^2][^4][^5]。示例如下: ```java // 在同一个包内 class DefaultExample { int defaultVariable = 20; void defaultMethod() { System.out.println("This is a default method."); } } ``` - **`protected`**:受保护的,在本、同一包下的(包括子和无关)以及不同包下的子中可以访问 [^1][^2][^3][^5]。示例: ```java // 父 class Parent { protected int protectedVariable = 30; protected void protectedMethod() { System.out.println("This is a protected method."); } } // 不同包下的子 class Child extends Parent { void accessProtected() { System.out.println(protectedVariable); protectedMethod(); } } ``` - **`public`**:公共的,具有最高权限,被 `public` 修饰的成员可以在任何地方被访问 [^1][^2][^3][^5]。示例: ```java class PublicExample { public int publicVariable = 40; public void publicMethod() { System.out.println("This is a public method."); } } ``` 下面是一个表格总结四种权限修饰符的访问权限范围: | 权限修饰符 | 本 | 同一包下(子和无关) | 不同包下(子) | 不同包下(无关) | | --- | --- | --- | --- | --- | | `private` | 可以访问 | 不可以访问 | 不可以访问 | 不可以访问 | | `default` | 可以访问 | 可以访问 | 不可以访问 | 不可以访问 | | `protected` | 可以访问 | 可以访问 | 可以访问 | 不可以访问 | | `public` | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值