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. [编译] 10、kconfig 入门指导教程

    目录 前言 1. 安装 kconfig 2. 克隆一个 demo 3. 运行 kconfig 4. 源码解析 4.1 选择题目设计模板 4.2 填空题目设计模板 4.3 判断题目设计模板 5. 产物解 ...

  2. 用 Java 写个塔防游戏「GitHub 热点速览 v.21.37」

    作者:HelloGitHub-小鱼干 本周 GitHub Trending 的主题词是:多语言.本周特推的 C 语言教程是大家都知道的阮一峰编写的,想必和他之前的技术文章类似,能起到科普作用.再来时 ...

  3. 开源自己编写的半人工标注平台PaddleOCRLabel(.NET Winform版本)

    大家好, 我是博客园的老用户了,许久不做.NET技术了,从2013年起,开始从事App技术,写过书,在Linux上搭建区块链,用GO写智能合约,使用nodejs搭建过微服务,用python写过爬虫,写 ...

  4. 三剑客之sed编辑器 基操

    目录: 一.sed编辑器 二.打印内容 三.使用地址 四.删除行 五.替换 六.插入 一.sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流. sed ...

  5. Elasticsearch(ES)分词器的那些事儿

    1. 概述 分词器是Elasticsearch中很重要的一个组件,用来将一段文本分析成一个一个的词,Elasticsearch再根据这些词去做倒排索引. 今天我们就来聊聊分词器的相关知识. 2. 内置 ...

  6. CodeForce-785B Anton and Classes(简单贪心)

    Anton and Classes Anton likes to play chess. Also he likes to do programming. No wonder that he deci ...

  7. CentOS8部署nextcloud网盘

    Nextcloud是一款开源的存储软件,功能丰富,支持多人协同工作,目前完全免费. 官网:https://www.nextcloud.com 架构:LAMP或LNMP 本文以LAMP为基础 注意:ph ...

  8. 【PHP数据结构】散列表查找

    上篇文章的查找是不是有意犹未尽的感觉呢?因为我们是真真正正地接触到了时间复杂度的优化.从线性查找的 O(n) 直接优化到了折半查找的 O(logN) ,绝对是一个质的飞跃.但是,我们的折半查找最核心的 ...

  9. iOS之内存管理-字节对齐

    字节对齐 1 struct Mystruct1{ 2 char a; //1字节 3 double b; //8字节 4 int c; //4字节 5 short d; //2字节 6 }Mystru ...

  10. pyqt5实现窗口跳转并关闭上一个窗口

    关键在于要定义一个关闭窗体的函数colsewin() 然后将按键与该函数连接(connect)在一起即可 import sys from PyQt5.QtWidgets import QMainWin ...