java中修饰符总结

                    修饰符大致分为访问控制符和非访问控制符

修饰类    

    JAVA语言中有公共的(public),私有的(private),保护的(protacted)和默认的(default)四种访问控制符。其中针对外部类(内部类可当做成员变量理解),仅能使用公共的和默认的这两种访问控制符。

    public级别

公共访问级别是类的访问控制级别中用得数量较多的一种,可以将类声明为任何包可见。

    默认访问级别

一个类的资源仅允许在包内访问

修饰类的非访问控制符抽象类修饰符 abstract ;最终类修饰符 final

abstract :凡是用 abstract 修饰符修饰的类,被称为抽象类。----含有未实现的方法的类。

final :当一个类不可能有子类时可用修饰符 final 把它说明为最终类。被定义为 final 的类通常是一些有固定作用、用来完成某种标准功能的类。

修饰成员属性

访问控制符同一类中同一包中同一子类中其他包
private
default
protected
public


非访问控制符:静态域修饰符: static ;最终域修饰符: final ;易失 ( 共享 ) 域修饰符: volatile ;暂时性域修饰符: transient还有一种比较特殊的访问控制符:私有保护访问控制符 private protected ,用修饰符 private protected 修饰的成员变量可以被该类本身或该类的子类两种类访问和引用。不论这些子类是与该类在同一个包里,还是处于其他的包中,相对于 protected , private protected 修饰符把同一包内的非子类排除在可访问的范围之外,使得成员变量更专用于具有明确继承关系的类,而不是松散地组合在一起的包。(此处更正,应该在jdk较老版本中可以使用,现在已经没有此用法 Java2程序设计基础 这本书里应该有提到此用法

      静态域修饰符 static :用 static修饰的成员变量仅属于类的变量,而不属于任何一个具体的对象,静态成员变量的值是保存在类的内存区域的公共存储单元(JDK8之前,静态成员变量确实存放在方法区;但JDK8之后就取消了“永久代”,取而代之的是“元空间”,永久代中的数据也进行了迁移,静态成员变量迁移到了堆中(方法区是JVM的规范,永久代是方法区的具体实现)),而不是保存在某一个对象的内存区间。任何一个类的对象访问它时取到的都是相同的数据;任何一个类的对象修改它时 , 也都是对同一个内存单元进行操作。

      最终域修饰符 final :最终域修饰符 final 是用来定义符号常量的。一个类的域 ( 成员变量 ) 如果被修饰符 final 说明,则它的取值在程序的整个执行过程中都是不变的。

      易失 ( 共享 ) 域修饰符 volatile :易失 ( 共享 ) 域修饰符 volatile是用来说明这个成员变量可能被几个线程所控制和修改。也就是说在程序运行过程中,这个成员变量有可能被其它的程序影响或改变它的取值。因此,在使用中要注意这种成员变量取值的变化。通常 volatile 用来保证可见性,不能保证原子性。

      暂时性域修饰符 transient :暂时性域修饰符 transient 用来定义一个暂时性变量。其特点是:用修饰符transient 限定的暂时性变量,将指定 Java虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能。否则,类中所有变量都是对象的永久状态的一部分,存储对象时必须同时保存这些变量。不参与序列化过程 可以用于修饰密码等安全性信息。

 修饰方法

可访问控制符有 4 种:公共访问控制符: public ;私有访问控制符: private ;保护访问控制符: protected ;私有保护访问控制符: private protected,默认修饰符default

非访问控制符有 5 种:抽象方法控制符: abstract ;静态方法控制符: static ;最终方法控制符: final ;本地方法控制符: native ;同步方法控制符: synchronized

      1、抽象方法控制符 abstract :用修饰符 abstract 修饰的方法称为抽象方法。抽象方法是一种仅有方法头,没有方法体和操作实现的一种方法。

      2、静态方法控制符 static :用修饰符 static 修饰的方法称为静态方法。静态方法是属于整个类的类方法;而不使用static 修饰、限定的方法是属于某个具体类对象的方法。 由于 static方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,即 static 方法只能处理 static的域。

      3、最终方法控制符 final :用修饰符 final修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,即最终方法不能重载。这样,就固定了这个方法所具有的功能和操作,防止当前类的子类对父类关键方法的错误定义,保证了程序的安全性和正确性。所有被 private 修饰符限定为私有的方法,以及所有包含在 final 类 ( 最终类) 中的方法,都被认为是最终方法。

      4、本地方法控制符 native :用修饰符 native 修饰的方法称为本地方法。为了提高程序的运行速度,需要用其它的高级语言书写程序的方法体,那么该方法可定义为本地方法用修饰符 native 来修饰;

      5、同步方法控制符 synchronized :该修饰符主要用于多线程共存的程序中的协调和同步。

注意点:

类:

顶级类只能用public 修饰,顶级类不能使用private 和protected 修饰。

外部类可以被public修饰或者默认不写,不能用private和protected。

内部类可为静态,可用protected和private修饰。

方法:

通常方法可以被四个访问修饰符修饰,构造方法也可以被四个访问修饰符修饰。

抽象类中的抽象方法不能被private修饰,可以被其他三个修饰。

而接口中的方法只能被public修饰(默认也是public)。

属性:

属性可以被四个修饰符修饰,接口中的属性只能被public修饰(默认也是public)。

代码块:

代码块不能被任何修饰符修饰(因为代码块里面是属性还是方法,这个属性和方法都有自己的修饰符)。

构造代码块的作用:可以初始化非静态属性,构造代码块优先于构造函数执行,可以放在构造函数中。

静态代码块的作用:可以初始化静态属性,类加载时加载,不可以放在构造函数中。

final:

修饰类:最终类,最终类不能被继承。最终类通常完成一定标准功能的类,例如Java库中的数学类Math等。

修饰方法:用final修饰的方法不能被继承,不能被重写(例如Object中的wait()),但是可以重载。

常量:定义局部常量用final,定义全局常量用static final (或者final static)。

三:static:

修饰类:可以修饰内部类

修饰属性:static可以修饰任何属性。

修饰方法:不能修饰抽象方法,不能修饰构造方法。

修饰代码块:被修饰的代码块叫静态代码块

四:abstract

修饰类(抽象类):抽象类不能被实例化。抽象类就是用来被继承的。

修饰方法(抽象方法):能被修饰的方法叫做抽象方法,只有方法的声明,没有方法的实现,以分号结束。

不能修饰:不能修饰属性、私有方法、构造器、静态方法、final 方法。

abstract不可以和哪些关键字共存?

final:如果方法被抽象,就需要被覆盖,final修饰不能被覆盖。

private:如果函数被私有了,子类无法直接访问,无法覆盖

static:类方法,直接调用抽象方法没有意义。

修饰符类        变量方法代码块
abstract表示抽象类不能修饰抽象方法(不能修饰属性、私有方法、构造器、静态方法、final 方法)
final最终类,不能被继承变量不可变,引用不可变,引用指向的内容是可以改变不能被继承,不能被重写(例如Object中的wait()),但是可以重载
static只能修饰内部类静态变量(属于类,所有实例共享)静态方法(属于类所有实例共享)静态代码块(类加载时就执行)
native提高程序运行速度,需要用其它的高级语言书写程序的方法体,那么该方法可定义为本地方法用修饰符 native 来修饰
volatile保证变量在多线程中的可见性(读前加读屏障,写后加写屏障,强制写主存)
synchronized修饰对象修饰静态方法、局部方法静态代码块、普通代码块
transient暂时性域修饰符 transient 用来定义一个暂时性变量。其特点是:用修饰符transient 限定的暂时性变量,将指定 Java虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值