温故知新之:Java中各类修饰符

news2024/12/22 14:30:02

本文以下内容基于 JDK 8 版本。

1、介绍

Java的修饰符根据修饰的对象不同,分为类修饰符、方法修饰符、变量修饰符,其中修饰符又分为访问控制修饰符非访问控制修饰符

2、类修饰符

2.1、访问修饰符

公共类修饰符 public : Java 语言中类的访问控制符只有 public 即公共的。每个 Java 程序文件有且只有一个类是 public,它被称为主类 ,其他外部类无访问控制修饰符即默认修饰符,具有包访问性,其他包无法访问。注意:一个类的内部类可以被其他访问控制修饰符protected、缺省默认(default、friendly)、private修饰,相当于类的成员。

注意:Java类或属性如果缺省访问控制修饰符,就属于default/friendly类型修饰符,但是实际上Java中并没有名为default或者friendly的访问修饰符(即不能使用default或者friendly定义类或变量),只是为了方便标识缺省访问控制符的情况。

2.2、非访问控制符

a.抽象类修饰符 abstract :用 abstract 修饰符修饰的类,被称为抽象类。

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

c.类缺省访问控制符:如果一个类没有访问控制符,说明它具有缺省的访问控制符特性。此时,这个类只能被同一个包中的类访问或引用。这一访问特性又称为包访问性。

3、方法修饰符

3.1、访问控制修饰符

公共访问控制符public、保护访问控制符protected、缺省默认访问控制符、私有访问控制符private。

3.2、非访问控制修饰符

抽象方法控制符abstract 、静态方法控制符static 、最终方法控制符final 、本地方法控制符native 、同步方法控制符synchronized。

a.抽象方法控制符 abstract : abstract 修饰的方法称为抽象方法。抽象方法仅有方法头,没有方法体和具体实现。

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

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

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

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

4、变量修饰符

4.1、访问控制符

公共访问控制符public 、保护访问控制符protected 、缺省默认访问控制符、私有访问控制符private

a.公共访问控制符 public:用 public 修饰的域称为公共域。由于 public 修饰符会降低运行的安全性和数据的封装性,所以一般应减少 public 域的使用。

b.私有访问控制符 private:private 修饰的成员变量只能被该类自身所访问,不能被其它任何类 ( 包括子类 ) 访问。

b.保护访问控制符 protected:用 protected 修饰的成员变量可以被三种类所引用:①该类自身;②同一个包中的其它类;③其它包中的子类。使用修饰符 protected 的主要作用是允许其它包中的子类来访问父类的特定属性。

d.缺省默认修饰符 :没有访问控制符或者是用default修饰的成员变量可以被该类本身或同一包中的其他类访问。

4.2、非访问控制符

静态域修饰符static 、最终域修饰符 final 、易失 ( 共享 ) 域修饰符volatile 、暂时性域修饰符transient

a.静态域修饰符 static :用 static修饰的成员变量仅属于类的变量,而不属于任何一个具体的对象,静态成员变量的值是保存在类的内存区域的公共存储单元,而不是保存在某一个对象的内存区间。该类的任一对象访问它时取到的都是相同的数据;该类的任一对象修改它时 , 也都是对同一个内存单元进行操作。

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

c.易失 ( 共享 ) 域修饰符 volatile :易失 ( 共享 ) 域修饰符 volatile是用来说明这个成员变量可能被几个线程所控制和修改。也就是说在程序运行过程中,这个成员变量有可能被其它的程序影响或改变它的取值。通常 volatile 用来修饰接受外部输入的域。

d.暂时性域修饰符 transient :暂时性域修饰符 transient 用来定义一个暂时性变量。其特点是:用修饰符transient 限定的暂时性变量,将指定 Java虚拟机认定该暂时性变量不属于永久状态,以实现不同对象的存档功能。否则,类中所有变量都是对象的永久状态的一部分,存储对象时必须同时保存这些变量。

5、访问控制修饰符总结

访问级别访问控制修饰符同类同包子类(不同包)不同包(其他类)
公共public允许允许允许允许
受保护protected允许允许允许不允许
默认缺省修饰符允许允许不允许不允许
私有private允许不允许不允许不允许

 注意:protected修饰的属性或方法,允许不同包的子类中访问。注意这里的访问方式是通过继承访问父类中的protected属性或方法,而不是直接通过父类实例访问protected属性或方法。

注意:当子类和父类在同一个包内,访问控制按照同包下范围控制。

测试类:

package basic.modifier;

public class Demo {

//    public>>protected>>default>>private
    public String publicAage = "publicAage";
    protected String protectedAage = "protectedAage";
    String defaultAage = "defaultAage";
    private String privateAage = "privateAage";

    public void publicSay(){
        System.out.println("输出父类的方法 publicSay");
    }

    protected void protectedSay(){
        System.out.println("输出父类的方法 protectedSay");
    }

    void defaultSay(){
        System.out.println("输出父类的方法 defaultSay");
    }

    private void privateSay(){
        System.out.println("输出父类的方法 privateSay");
    }
}

 参考文章

Java中各类修饰符的使用总结(看完这篇就够了) - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端需要知道的HTTP知识

超文本传输协议(HTTP,Hypertext Transfer Protocol )是一个用于传输超媒体文档(例如 HTML)的应用层协议。它是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。HTTP 遵循经典的客户端…

Centos 7 安装系列(8):openGauss 3.0.0

安装依赖包: yum -y install libaio-devel flex bison ncurses-devel glibc-devel patch redhat-lsb-core readline-devel openssl-devel sqlite-devel libnsl 安装插件: yum install -y bzip2 net-tools为什么要安装这两个? 安装bzip2 是…

卷积神经网络——上篇【深度学习】【PyTorch】【d2l】

文章目录 5、卷积神经网络5.1、卷积5.1.1、理论部分5.1.2、代码实现5.1.3、边缘检测 5.2、填充和步幅5.2.1、理论部分5.2.2、代码实现 5.3、多输入多输出通道5.3.1、理论部分5.3.2、代码实现 5.4、池化层 | 汇聚层5.4.1、理论部分5.4.2、代码实现 5、卷积神经网络 5.1、卷积 …

【3D激光SLAM】LOAM源代码解析--laserMapping.cpp

系列文章目录 【3D激光SLAM】LOAM源代码解析–scanRegistration.cpp 【3D激光SLAM】LOAM源代码解析–laserOdometry.cpp 【3D激光SLAM】LOAM源代码解析–laserMapping.cpp 【3D激光SLAM】LOAM源代码解析–transformMaintenance.cpp 写在前面 本系列文章将对LOAM源代码进行讲解…

【校招VIP】java语言考点之jvm内存结构

考点介绍: jvm虚拟机相关内容是校招的高频考点之一,Java虚拟机,准确来说是Java二进制字节码的运行环境,jvm是一套规范,用来执行class文件,保证Java语言跨平台... 『java语言考点之jvm内存结构』相关题目及…

shell 01(概述)

一、shell linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等[参考]? 答: 使用linux的内核操作计算机的硬件 通过编写shell命令发送给linux内核去执行,操作计算机硬件, 所以shell命令是用户操作计算机硬件的桥梁;shell是命令,类似于windows系统Dos命令;shell是…

Linux权限维持—OpenSSHPAM后门SSH软连接公私钥登录

Linux权限维持—OpenSSH&PAM后门&SSH软连接&公私钥登录 1. SSH—PAM后门1.1. 整体流程1.2. 操作演示1.2.1. 查看PAM版本1.2.2. 下载对应版本1.2.2.1. 解压 1.2.3. 安装依赖1.2.4. 修改配置1.2.4.1. 配置内容1.2.4.2. 编译安装1.2.4.3. 备份配置 1.2.5. 连接测试1.2…

第10步---MySQL的日志操作

第10步---MySQL的日志操作 错误日志 慢日志 1.查看错误日志 -- 查看日志信息 show VARIABLES like log_error%;2.查看binlog 高版本是默认开启的,低的是默认是不开启的 binlog日志文件是与事务相关 -- 查看binlog日志的格式 show variables like binlog_format;-- …

代码随想录打卡—day24—【回溯】— 基础最新8.20+8.22

1 理论基础 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯算法——回溯和递归是相辅相成的。回溯法的效率,回溯法其实就是暴力查找,并不是什么高效的算法。回溯法解决的问题都可以抽象为树形结构(N叉树) 1.1…

【数据分享】2006-2021年我国省份级别的节约用水相关指标(免费获取\20多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况,在之前的文章中,我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国省份级别的市政设施水平相关指标、2006-2021年我国省份级别的各类建设用地面积数…

ArcGIS Serve Windows下用户密码变更导致Server服务无法启动问题

问题: 因未知原因Windows下的Server安装账户密码变更,但是又忘记了密码,导致,Server服务启动失败,错误1069: 解决方法: 在账户管理界面,重置对应的arcgis账户的密码,…

【已解决】Docker启动MySQL容器失败:STATUS:‘ Exited (1) 2 minutes ago ‘,远程连接MySQL连不上问题

先查看正在运行的容器 # 查看正在运行的容器 docker ps # 查看所有的docker容器 docker ps -a 这个时候如果显示的是up状态,那就是启动成功了。 状态为exited,所以没有启动成功。 问题所在 好像是权限的问题 在docker run时额外加上参数 --privileged…

热烈祝贺甘肃峻茂成功入选航天系统采购供应商库

经过航天系统采购平台的严审,甘肃峻茂新材料科技有限公司成功入选中国航天系统采购供应商库。航天系统采购平台是航天系统内企业采购专用平台,服务航天全球范围千亿采购需求,目前,已有华为、三一重工、格力电器、科大讯飞等企业、…

Linux系统USB摄像头测试程序(三)_视频预览

这是在linux上usb摄像头视频预览程序&#xff0c;此程序用到了ffmpeg、sdl2、gtk3组件&#xff0c;程序编译之前应先安装他们。 #include <sys/ioctl.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> #include <zconf.h> …

DTCC第3天 优炫软件共享存储多写多读集群数据库隆重发布

8月17日&#xff0c;北京优炫软件股份有限公司在DTCC2023第十四届中国数据库技术大会上&#xff0c;隆重发布优炫软件共享存储多写多读集群&#xff08;SRAC&#xff09;数据库&#xff0c;并开启预约试用。 数据库共享存储多写多读集群是保障重点行业信息系统核心业务连续性的…

通过树莓派上搭建WordPress博客网站,并内外通透远程访问【无公网IP内网穿透】

虎头金猫主页 在强者的眼中&#xff0c;没有最好&#xff0c;只有更好。我们是移动开发领域的优质创作者&#xff0c;同时也是阿里云专家博主。 ✨ 关注我们的主页&#xff0c;探索iOS开发的无限可能&#xff01; &#x1f525;我们与您分享最新的技术洞察和实战经验&#xff…

UG\NX二次开发 创建中心线

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,C\C++,Qt-CSDN博客 简介: 下面是在制图模块创建中心线的例子,用的是ufun函数。 效果: 代码: #include "me.hpp"#include <stdio.h> #include <string.h> #include <uf.h>…

12.串,串的存储结构与模式匹配算法

目录 一. 一些术语 二. 串的类型定义 &#xff08;1&#xff09;串的顺序存储结构 &#xff08;2&#xff09;串的链式存储结构 三. 串的模式匹配算法 &#xff08;1&#xff09;BF算法 &#xff08;2&#xff09;KMP算法 四. 案例实现 串(String)---零个或多个任意字符…

带你了解SpringBoot---开启Durid 监控(SQL 监控、SQL 防火墙、Web 应用、Session 监控等)

数据库操作–开启Durid 监控 整合Druid 到Spring-Boot 官方文档 使用手册: https://github.com/alibaba/druid 中文手册&#xff1a; https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98English手册&#xff1a; https://github.com/alibaba/drui…

第十二届钧瓷文化旅游节主题曲:让世界看见钧瓷的魅力

下面是以产业&#xff0c;古镇&#xff0c;营销为主题专门为第十二届钧瓷文化旅游节创作的《让世界看见钧瓷的魅力》的歌词。 古镇千年的沉淀&#xff0c;窑火燃烧的传说 传承着古老的技艺&#xff0c;匠人们用心铸就 钧瓷的魅力&#xff0c;吸引着世界的目光 这里的风景&am…