1、分类
java提供了很多修饰符,主要分为以下两类:
- 访问修饰符
- 非访问修饰符
2、访问控制修饰符
java中,可以使用访问控制符来控制对类、方法以及变量的访问权限。java中有四种不同的访问权限,具体说明及使用注意事项如下:
- default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
- public : 对所有类可见。使用对象:类、接口、变量、方法。
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
default(默认访问修饰符–不使用任何关键字)
使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public。
例如:
String str = "java";
int test1(){
return 1;
}
private–私有访问修饰符
私有访问修饰符是最严格的访问级别。***被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。***
声明为private类型的变量只能通过类里权限为public的 get/set方法被外部类访问。
private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据。
例如:
public class Student {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
实例中,
- Student类中的 name变量为私有变量,所以其他类不能直接得到和设置该变量的值。为了使其他类能够操作该变量,定义了两个 public 方法:getName() (返回 name的值)和 setName(String name)(设置 name 的值)
public–公共的
- 被声明为 public 的类、方法、构造方法和接口能够被任何其他类访,但是如果几个相互访问的 public
类分布在不同的包中,则需要导入相应 public 类所在的包。 - 值得注意的是:java程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。
protected–受保护的访问修饰符
被声明为 protected 的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问
protected 访问修饰符不能修饰类和接口。
- 方法和成员变量能够声明为 protected,但是接口的成员变量和成员方法不能声明为 protected。
- 子类能访问 protected 修饰符声明的方法和变量。
public class People{
protected String test(){
return "呵呵";
}
}
class Student extends People {
@Override
protected String test() {
// TODO Auto-generated method stub
return super.test();
}
}
- 如果把 test() 方法声明为 private,那么除了 People之外的类将不能访问该方法。
3、非访问控制修饰符
static–静态的
- 使用对象:类、方法、字段、初始化函数
- 介绍:成名为static的内部类是一个顶级类,它和包含类的成员是不相关的。静态方法 是类方法,
是被指向到所属的类而不是类的实例。静态字段是类字段,无论该字段所在的类创建了 多少实例,该字
段只存在一个实例被指向到所属的类而不是类的实例。 - 初始化函数是在装载类时执行 的,而不是在创建 实例时执行的。
final–终极的
- 使用对象:类、方法、字段、变量
- final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final
对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。 - final 修饰符通常和 static 修饰符一起使用来创建类常量
- 类中的 final 方法可以被子类继承,但是不能被子类修改。
- final 类不能被继承,没有类能够继承 final 类的任何特性。
abstract–抽象的
- 使用对象:类、接口、方法
- 介绍:类中包括没有实现的方法,不能被实例化。如果是一个abstract方法,则方法体 为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类。
synchronized–同步的
- 用对象:方法
- :对于一个静态的方法,在执行之前jvm把它所在的类锁定;对于一个非静态类的方 法,执行 前把某个特定对象实例锁。
strictfp –精准的
- 用对象:类、方法
- 介绍:strictfp修饰的类中所有的方法都隐藏了strictfp修饰词,方法执行的所有浮点 计算遵守 IEEE
754标准,所有取值包括中间的结果都必须表示为float或double类型,而不能利用
由本地平台浮点格式或硬件提供的额外精度或表示范围。
native–本地的
- 对象:成员
- 用native修饰的方法表明它是用java以外的语现的会
被序列化
transient— 临时的
- 使用对象:字段
- transient是一个变量修饰符,标记为transient的变量,在对一个对象进行序列化时,这些变量状态不会被序列化。
4、总结
==