Java:修饰符小记

对 Java 中的 修饰符,做一个微不足道的小小小小记

Java 语言提供了很多修饰符,大概分为两类:

  1. 访问权限修饰符

  2. 非访问权限修饰符

访问权限修饰符

修饰符 说明
public 共有访问。对所有的类都可见
protected 保护型访问。对同一个包可见,对不同的包的子类可见
default 默认访问权限。只对同一个包可见,注意:对不同的包的子类不可见
private 私有访问。只对同一个类可见,其余都不见

非访问权限修饰符

修饰符 说明
static 用来创建类方法和类变量
final 用来修饰类、方法和变量,
final 修饰的类不能够被继承,
final 修饰的方法不能被继承类重新定义,
final 修饰的变量为常量,是不可修改的
abstract 用来创建抽象类和抽象方法
synchronized 用于多线程的同步
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。
而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。
这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值
transient 序列化的对象包含被 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该特定的变量

外部类修饰符

外部类修饰符 说明
public(访问控制符) 将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类
default(访问控制符) 类只对包内可见,包外不可见
abstract(非访问控制符) 将一个类声明为抽象类,抽象类不能用来实例化对象,
声明抽象类的唯一目的是为了将来对该类进行扩充,
抽象类可以包含抽象方法和非抽象方法
final(非访问控制符) 将一个类生命为最终(即非继承类),表示它不能被其他类继承

注意

  1. protected 和 private 不能修饰外部类,是因为外部类放在包中,只有两种可能,包可见和包不可见。
  2. final 和 abstract 不能同时修饰外部类,因为该类要么能被继承要么不能被继承,二者只能选其一。
  3. 不能用 static 修饰类,因为类加载后才会加载静态成员变量。所以不能用 static 修饰类和接口,因为类还没加载,无法使用 static 关键字。

内部类修饰符

内部类与成员变量地位一致,所以可以 public、protected、default 和 private;

同时还可以用 static 修饰,表示嵌套静态内部类,不用实例化外部类,即可调用。

方法修饰符

方法修饰符 说明
public(公共控制符) 包外包内都可以调用该方法
protected(保护访问控制符) 指定该方法可以被它的类和子类进行访问
具体细节可参考
default(默认权限) 指定该方法只对同包可见,对不同包(含不同包的子类)不可见
private(私有控制符) 指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类),非常严格的控制
final 指定方法已完备,不能再进行继承扩充
static 指定不需要实例化就可以激活的一个方法,即在内存中只有一份,通过类名即可调用
synchronize 同步修饰符,在多个线程中,该修饰符用于在运行前,对它所属的方法加锁,以防止其他线程的访问,运行结束后解锁
native 本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的
abstract 抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。
抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();

成员变量修饰符

成员变量修饰符 说明
public(公共访问控制符) 指定该变量为公共的,它可以被任何对象的方法访问
protected(保护访问控制符) 指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量
default(默认权限) 指定该变量只对同包可见,对不同包(含不同包的子类)不可见
private(私有访问控制符) 指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问
final 最终修饰符,指定此变量的值不能变
static(静态修饰符) 指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类
transient(过度修饰符) 指定该变量是系统保留,暂无特别作用的临时性变量。不持久化
volatile(易失修饰符) 指定该变量可以同时被几个线程控制和修改,保证两个不同的线程总是看到某个成员变量的同一个值
final+static 一起使用来创建常量

局部变量修饰符

only final is permitted:只有final是被允许的。

  1. 为什么不能赋予权限修饰符?

    因为局部变量的生命周期为一个方法的调用期间,所以没必要为其设置权限访问字段,既然你都能访问到这个方法,所以就没必要再为其方法内变量赋予访问权限,因为该变量在方法调用期间已经被加载进了虚拟机栈,换句话说就是肯定能被当前线程访问到,所以设置没意义。

  2. 为什么不能用 static 修饰

    我们都知道静态变量在方法之前先加载的,所以如果在方法内设置静态变量,可想而知,方法都没加载,你能加载成功方法内的静态变量?

接口

接口修饰符

  1. 接口修饰符只能用 public、default 和 abstract。
  2. 不能用 final、static 修饰。
  3. 接口默认修饰为 abstract。

接口中方法修饰符

  1. only public & abstract are permitted:意思只能用 public abstract 修饰,当然如果你什么都不写,默认就是public abstract。
  2. 注意:在Java1.8之后,接口允许定义static 静态方法了!所以也可以用static来修饰!

进一步说明:Java:抽象类和接口小记

参考:

https://www.nowcoder.com/test/question/done?tid=38386652&qid=56132#summary

Java:修饰符小记的更多相关文章

  1. JAVA修饰符类型(public,protected,private,friendly)

    转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...

  2. Java修饰符关键词大全

    所以我以此主题写了这篇文章.这也是一个可用于测试你的计算机科学知识的面试问题. Java修饰符是你添加到变量.类和方法以改变其含义的关键词.它们可分为两组: 访问控制修饰符 非访问修饰符 让我们先来看 ...

  3. JAVA修饰符类型(转帖)

    JAVA修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的 ...

  4. java修饰符public final static abstract transient

    JAVA 修饰符public final static abstract transient  关键字: public final static abstract ...  1.public prot ...

  5. Java基础之Java 修饰符

    前言:Java内功心法之Java 修饰符,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) Java语言提供了很多修饰符,主要分为以下两类: 访 ...

  6. 浅析java修饰符之public default protected private static final abstract

    浅析java修饰符之public default protected private static final abstract 一   修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 ...

  7. 【java初探外篇01】——关于Java修饰符

    本文记录在学习Java语言过程中,对碰到的修饰符的一些疑问,在这里具体的拿出来详细学习和记录一下,以作后续参考和学习. Java修饰符 Java语言提供了很多修饰符,但主要分两类: 访问修饰符 非访问 ...

  8. Java知识回顾 (2) Java 修饰符

    一.Java 修饰符 1.1 访问控制修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default (即缺省,什么也不写): 在 ...

  9. Java-Runoob:Java 修饰符

    ylbtech-Java-Runoob:Java 修饰符 1.返回顶部 1. Java 修饰符 Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变 ...

随机推荐

  1. AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)

    AntD上传组件 AntDesign VUE文档 第一种方式 beforeUpload(file) { let isLt = true if (filesSize) { isLt = file.siz ...

  2. Tars | 第7篇 TarsJava Subset最终代码的测试方案设计

    目录 前言 1. SubsetConf配置项的结构 1.1 SubsetConf 1.2 RatioConfig 1.3 KeyConfig 1.4 KeyRoute 1.5 SubsetConf的结 ...

  3. DHCP的原理和配置

    前言 在大型企业网络中,会有大量的主机或设备需要获取IP地址等网络参数.如果采用手工配置,工作量大且不好管理,如果有用户擅自修改网络参数,还有可能会造成 IP地址冲突等问题.使用动态主机配置协议DHC ...

  4. 运行FreeSWITCH的命令行参数

    一般来说,FreeSWITCH 不需要任何命令行参数就可以启动,但在某些情况下,你需要以一些特殊的参数启动.在此,仅作简单介绍.如果你知道是什么意思,那么你就可以使用,如果不知道,多半你用不到. 使用 ...

  5. 利用协程爬网页,自动切换io 精典案例:

    首先Python提供的协程库gevent好像并不能知道那些程序使用了io  所以要加一个补丁,mondey,以下同步和异步各爬一次的案例 : , from urllib import requesti ...

  6. mac下使用vscode技巧

    1.查找 command +  F 2.查找并替换 选中要替换的文字  再 command +  options + F 3.竖状区域部分替换 鼠标点中替换字段的开头或者结尾,按options + s ...

  7. 教你用ps如何将图片、文字做出模糊斑驳的作旧效果

    1.对图片的图层执行滤镜-风格化-扩散,选变亮优先. 2.选择画笔工具,在画笔选项里选择喷溅59像素,画笔大小我用的是100px,大家可以根据自己的情况自定义大小,前景设置为黑色. 3.在图章图层上方 ...

  8. Docker系列(23)- CMD和ENTRYPOINT的区别

    CMD和ENTRYPOINT的区别 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 测试CMD ...

  9. 博客主题——element v2

    主题预览 主题下载 gshang.element-v2.rar

  10. python 函数高级功能

    闭包 我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包. # 闭包 # 外部函数的参数被内部函数引用,内部函数对外 ...