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. MySQL——SQL语句入门

    1.DDL: 数据库定义语言 定义对象:库.表 何为定义: 库的定义: 创建 删除 修改---->修改本身以及库中的对象(表.视图.函数.触发器...) 表的定义: 创建---->定义表的 ...

  2. centos7安装privoxy

    本文分为三部分,第一部分是在阿里云的ECS上安装Privoxy,第二部分是在AWS的EC2上安装Privoxy,第三部分是Privoxy的配置. 第一部分:阿里云ECS安装Privoxy 配置yum源 ...

  3. Mybatis-Plus常用的查询方法--看这一篇就够了!!!

    前言: Mybatis-Plus作为Mybatis的增强,自己封装了很多简单还用的方法,来解脱自己写sql! 对于项目的搭建小编就不在说了,可以参考: SpringBoot+Mybatis-Plus的 ...

  4. Python - poetry(3)配置项详解

    config 命令 poetry 通过 config 命令进行配置 也可以直接在 config.toml 文件中进行配置,该文件将在首次运行该命令时自动创建 文件目录 macOS:~/Library/ ...

  5. 如何在云效流水线 Flow中构建属于自己的NPM仓库

    如何在云效流水线 Flow中构建属于自己的NPM仓库,Flow 通过各种构建组件,对各种语言提供了制品打包能力,让用户可以快速的使用流水线构建制品,并通过后续的部署任务进行部署.Flow 已经完成了与 ...

  6. 详解JDBC中的Class.forName(DriverName)

    在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法.通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态 ...

  7. systemctl添加自定义系统服务

    [Service] Type=forking ExecStart=绝对路径 ExecStop=绝对路径 ExecReload=绝对路径 以上最精简版,文件/usr/lib/systemd/system ...

  8. HCNP Routing&Switching之IS-IS路由聚合和认证

    前文我们了解了IS-IS路由渗透和开销相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15302382.html:今天我们来聊一聊IS-IS路由聚合和认 ...

  9. 获取发布版SHA1和调试版SHA1

    总结 调试版: 常见问题 | 高德地图API (amap.com) 发布版: 首先需要生成签名 Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值_donkor_的博客-C ...

  10. 【Python】python 2.7.16 x64 百度网盘

    倒霉官网下载太慢,下好了分享出来,也给自己留一个备份. 链接:点这里提取码:znaf PS: py2.7版本 for win 64位