详解Java中的修饰符

1、分类

java提供了很多修饰符,主要分为以下两类:

  1. 访问修饰符
  2. 非访问修饰符

2、访问控制修饰符

java中,可以使用访问控制符来控制对类、方法以及变量的访问权限。java中有四种不同的访问权限,具体说明及使用注意事项如下:

  1. default (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  2. private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
  3. public : 对所有类可见。使用对象:类、接口、变量、方法。
  4. 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、总结

这里写图片描述==

猜你喜欢

转载自blog.csdn.net/gaoqisong/article/details/78460548