Java中的修饰符

本文详细介绍了Java中的访问控制修饰符public、protected、默认和private的作用范围,以及abstract、final和static修饰符的使用规则。对于理解类、方法和变量的可见性和行为特性非常有帮助。

1 访问控制修饰符

public 的访问级别最高,其次是protected,默认和private

成员变量和成员方法可以处于4个访问级别中的一个:公开,受保护,默认和私有

顶层类可以处于公开或者默认级别,顶层类不能被protected和private修饰

局部变量不能被访问控制修饰符修饰

 

2 abstract修饰符

抽象类不能被实例化

抽象类中的可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类

如果子类没有实现父类中的所有抽象方法,子类也必须定义为抽象类

抽象类不能被定义为private,final和static类型

没有抽象构造方法

抽象方法没有方法体

 

3 final 修饰符

用final修饰的类不能被继承

用final修饰的方法不能被子类方法覆盖

private类型的方法默认为final方法,因而不能被子类的方法覆盖

final变量必须被显示初始化,并且只能被赋值一次

 

4 static 修饰符

静态变量在内存中只有一个拷贝,在类的所有实例中共享

在静态方法中不能直接访问实例变量和实例方法

在静态方法中不能使用this和super关键字

静态方法不能被abstract修饰

静态方法和静态变量都可以通过类名直接访问

当类被加载时,静态代码块只能被执行一次,类中不同的静态代码块按照他们在类中出现的顺序被依次执行

Java 中,访问修饰符用于控制、方法、变量等成员的访问权限,从而实现封装和信息隐藏。Java 提供了四种访问级别:`public`、`protected`、默认(无修饰符)和 `private`,它们分别对应不同的可见性范围。 ### public 修饰符 `public` 是访问权限最宽松的修饰符。被 `public` 修饰的成员可以在任何地方被访问,无论是否在同一个包中,也不论是否是子。例如,一个的 `public` 方法可以被任何其他调用。[^2] ### protected 修饰符 `protected` 修饰符允许同一包内的访问,同时也允许不同包中的访问。这种修饰符通常用于需要被子继承但又不希望完全公开的成员。例如,一个基中的 `protected` 方法可以在其子中被访问,即使子位于不同的包中。[^5] ### 默认访问权限(无修饰符) 当没有明确指定访问修饰符时,Java 会使用默认的访问权限。默认访问权限允许同一包内的访问该成员,但不允许不同包中的访问,即使是子不能访问。这种访问级别有助于实现包级别的封装。[^1] ### private 修饰符 `private` 是访问权限最严格的修饰符。被 `private` 修饰的成员只能在声明它们的内部访问,的外部(包括其子)无法访问。这通常用于隐藏的内部实现细节,确保数据的安全性。例如,一个中的 `private` 字段只能通过提供的公共方法进行访问。[^4] ### 示例代码 以下是一个简单的示例,展示了不同访问修饰符的使用: ```java package com.example; public class AccessModifiersExample { public int publicVar = 1; protected int protectedVar = 2; int defaultVar = 3; // 默认访问权限 private int privateVar = 4; public void publicMethod() { System.out.println("Public Method"); } protected void protectedMethod() { System.out.println("Protected Method"); } void defaultMethod() { System.out.println("Default Method"); } private void privateMethod() { System.out.println("Private Method"); } public static void main(String[] args) { AccessModifiersExample example = new AccessModifiersExample(); System.out.println("Public variable: " + example.publicVar); System.out.println("Protected variable: " + example.protectedVar); System.out.println("Default variable: " + example.defaultVar); // 下面的代码将无法编译,因为privateVar不能在此处访问 // System.out.println("Private variable: " + example.privateVar); } } ``` 在上面的示例中,`publicVar` 和 `publicMethod` 可以在任何地方被访问;`protectedVar` 和 `protectedMethod` 可以在同一包内的中访问,也可以被不同包中的访问;`defaultVar` 和 `defaultMethod` 只能在同一包内的中访问;`privateVar` 和 `privateMethod` 只能在 `AccessModifiersExample` 内部访问。[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值