Java基础篇--修饰符

Java语言提供了很多修饰符,主要分为以下两类:

访问控制修饰符

非访问修饰符

访问控制修饰符

  1. private:私有访问权限,用于修饰类的属性和方法。被private修饰的成员只能在本类中进行访问。
  2. default(默认访问权限,无修饰符):如果一个类中的属性或方法没有显式指定访问修饰符,它将具有默认的访问权限。默认访问权限允许本包中的其他类访问,但不能被其他包的类访问。
  3. protected:受保护访问权限。被protected修饰的成员可以在本包及不同包的子类中访问。
  4. public:公共访问权限。被public修饰的成员可以在所有类中访问,不论是否在同一包中。

下面通过一张表总结上述的访问控制权限。

2e212fc4326b461f99b4ddc67c348d04.png

综上所述:

可以理解为将整个世界都打包成一块,同时划分为四个层次: 联合国(public)【其他包】、国家(protected)【继承子孙】、洲际(default)【同一包】、个人(private)【当前类】。

联合国制定规则所有人都可以用,国家制定的只有在国家内可以用,各联邦洲因地制宜有制定当地民法,个人制定的就给个人使用。

实例

//创建一个名为Person的类
class Person {
 private String name;       // 私有属性,只能在本类中访问
 String gender;             // 默认访问权限,本包中的其他类可以访问
 protected int age;         // 受保护的属性,本包及子类可以访问
 public String address;     // 公共属性,所有类都可以访问
 
 // 私有方法,只能在本类中调用
 private void printName() {
     System.out.println("名称:" + name);
 }
 
 // 默认访问权限的方法,本包中的其他类可以调用
 void printGender() {
     System.out.println("性别:" + gender);
 }
 
 // 受保护的方法,本包及子类可以调用
 protected void printAge() {
     System.out.println("年龄:"+ age);
 }
 
 // 公共方法,所有类都可以调用
 public void printAddress() {
     System.out.println("地址:"+ address);
 }
}

//创建另一个名为Student的子类,继承自Person类
class Student extends Person {
 public void displayInfo() {
     // 在子类中可以访问父类的受保护属性和方法
     System.out.println("Student Info:");
     printName();      // 调用了父类的私有方法,间接访问了private属性
     printGender();    // 调用了父类的默认方法,访问本包中的属性
     printAge();       // 调用了父类的受保护方法,访问子类继承的属性
     System.out.println("Address: " + address);   // 直接访问父类的公共属性
 }
}

//主程序入口
public class MyClass {
 public static void main(String[] args) {
     Student student = new Student();
     
     // 在主程序中无法直接访问Person类的私有属性和方法
     // student.name = "Alice";           // 错误!私有属性不能在其他类中直接访问
     // student.printName();              // 错误!私有方法不能在其他类中直接调用
     
     // 可以访问默认、受保护和公共属性及方法
     student.gender = "Female";
     student.age = 18;
     student.address = "123 Street";
     
     student.displayInfo();
 }
}

非访问修饰符

为了实现一些其他的功能,Java 也提供了许多非访问修饰符。

  1. static:用来修饰类方法和类变量。通过使用static修饰,可以使得方法或变量与类本身相关联,而不是具体的实例对象。静态方法可以直接通过类名调用,而无需创建实例对象。
  2. final:用来修饰类、方法和变量。被final修饰的类不能被继承,即不能有子类。被final修饰的方法不能被继承类重新定义,即不能被子类重写。被final修饰的变量为常量,即其值在初始化后不可修改。
  3. abstract:用来创建抽象类和抽象方法。抽象类是不能被实例化的类,主要用作其他类的基类。抽象方法是没有具体实现的方法,必须在子类中进行重写。
  4. synchronized:用于多线程环境,用于实现线程安全的同步访问,确保多个线程对同一代码块的串行执行。
  5. volatile:用于多线程环境,用于声明变量是被多个线程共享的,保证了其在多线程环境下的可见性和有序性。
  6. transient:用于序列化,表示某个字段不会被持久化存储或网络传输,通常用于敏感信息或与序列化无关的临时数据。
  7. native:表示方法的实现是由外部的本地语言(如C、C++)提供,用于与操作系统或底层硬件进行交互。
  8. strictfp:用于浮点数计算,强制按照IEEE 754标准执行,保证浮点计算的结果在不同平台上的一致性。

实例 

public class ModifierExample {
    // static修饰的变量和方法与类本身关联
    public static int staticVariable = 10;
    
    public static void staticMethod() {
        System.out.println("这是一种静态方法。");
    }
    
    // final修饰的变量为常量,值不可修改
    public final int finalVariable = 20;
    
    public final void finalMethod() {
        System.out.println("这是最后一种方法。");
    }
    
    // abstract修饰的方法没有具体实现,需要在子类中重写
    public abstract void abstractMethod();
    
    // synchronized修饰的方法确保多个线程对代码块的串行执行
    public synchronized void synchronizedMethod() {
        System.out.println("这是一种同步方法。");
    }
    
    // volatile修饰的变量被多个线程共享,保证可见性和有序性
    public volatile int volatileVariable = 0;
    
    // transient修饰的变量不会被序列化存储或网络传输
    public transient String transientVariable;
    
    // native修饰的方法使用外部的本地语言提供的实现
    public native void nativeMethod();
    
    // strictfp修饰的方法按照IEEE 754标准执行浮点数计算
    public strictfp void strictfpMethod() {
        double num1 = 0.1;
        double num2 = 0.2;
        double result = num1 + num2;
        System.out.println("结果:"+ result);
    }
}

注意:

abstract修饰的方法所在的类必须声明为抽象类。native修饰的方法通常需要与本地语言进行交互。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ctypes使用浅谈

什么是ctypes: ctypes 是 Python 的一个标准库,用于与 C 语言进行交互。它提供了一组工具和函数,可以方便地调用动态链接库(DLL)或共享对象(SO)中的 C 函数,并处理 C 数据类型的转换…

MySQL中基础查询语句

用户表user数据如下: iddevice_idgenderageuniversityprovince12138male21北京大学Beijing23214male复旦大学Shanghai36543famale20北京大学Deijing42315female 23 浙江大学ZheJiang55432male25山东大学Shandong 1,写出ddl语句创建如上表,…

自动化实践-全量Json对比在技改需求提效实践

1 背景 随着自动化测试左移实践深入,越来越多不同类型的需求开始用自动化测试左移来实践,在实践的过程中也有了新的提效诉求,比如技改类的服务拆分项目或者BC流量拆分的项目,在实践过程中,这类需求会期望不同染色环境…

6.6 实现卷积神经网络LeNet训练并预测手写体数字

模型架构 代码实现 import torch from torch import nn from d2l import torch as d2lnet nn.Sequential(nn.Conv2d(1,6,kernel_size5,padding2),nn.Sigmoid(),#padding2补偿5x5卷积核导致的特征减少。nn.AvgPool2d(kernel_size2,stride2),nn.Conv2d(6,16,kernel_size5),nn.S…

竞赛项目 深度学习实现语义分割算法系统 - 机器视觉

文章目录 1 前言2 概念介绍2.1 什么是图像语义分割 3 条件随机场的深度学习模型3\. 1 多尺度特征融合 4 语义分割开发过程4.1 建立4.2 下载CamVid数据集4.3 加载CamVid图像4.4 加载CamVid像素标签图像 5 PyTorch 实现语义分割5.1 数据集准备5.2 训练基准模型5.3 损失函数5.4 归…

IT运维:使用数据分析平台监控PowerStore存储(进阶)

概述 本文基于《IT运维:使用鸿鹄监控PowerStore存储》(以下简称原文)文章进行了优化。主要优化部分包括存储日志进入到鸿鹄后,如何进行字段抽取,以及图表的展示。 字段抽取:由原来采用视图的方式&#xff0…

干货丨学完网络安全专业,我掌握了哪些技能?

andy Ng在我校完成网络防御与司法大专(Diploma in Network Defense and Forensic Countermeasures)之后,顺利升入我校的网络安全本科课程,目前她就职于一家金融机构并担任安全操作中心的分析专员。在进入我校就读之前,Sandy在建筑行业领域工作…

数学建模—多元线性回归分析(+lasso回归的操作)

第一部分:回归分析的介绍 定义:回归分析是数据分析中最基础也是最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的人数就是,通过研究自变量X和因变量Y的相关关系,尝试去解释…

解决遥感技术在生态、能源、大气等领域的碳排放监测及模拟问题

以全球变暖为主要特征的气候变化已成为全球性环境问题,对全球可持续发展带来严峻挑战。2015年多国在《巴黎协定》上明确提出缔约方应尽快实现碳达峰和碳中和目标。2019年第49届 IPCC全会明确增加了基于卫星遥感的排放清单校验方法。随着碳中和目标以及全球碳盘点的现…

2000-2022年全国各地级市绿色金融指数数据

2000-2022年全国各地级市绿色金融指数数据 1、时间:2000-2022年 2、来源:来源:统计局、科技部、中国人民银行等权威机构网站及各种权威统计年鉴,包括全国及各省市统计年鉴、环境状况公报及一些专业统计年鉴,如 《中国…

【深度学习笔记】TensorFlow 基础

在 TensorFlow 2.0 及之后的版本中,默认采用 Eager Execution 的方式,不再使用 1.0 版本的 Session 创建会话。Eager Execution 使用更自然地方式组织代码,无需构建计算图,可以立即进行数学计算,简化了代码调试的过程。…

KAFKA第二课之生产者(面试重点)

生产者学习 1.1 生产者消息发送流程 在消息发送的过程中,涉及到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator,Sender线程不断从RecordAccumulator中拉取消息发送到K…

泰国的区块链和NFT市场调研

泰国的区块链和NFT市场调研 基本介绍 参考: https://zh.wikipedia.org/zh-hans/%E6%B3%B0%E5%9B%BD参考: https://hktdc.infogram.com/thsc–1h7k2303zo75v2x zz制度: 君主立宪制(议会制) 国王: 玛哈哇集拉…

基于vue3+webpack5+qiankun实现微前端

一 主应用改造(又称基座改造) 1 在主应用中安装qiankun(npm i qiankun -S) 2 在src下新建micro-app.js文件,用于存放所有子应用。 const microApps [// 当匹配到activeRule 的时候,请求获取entry资源,渲染到containe…

JVM内存管理

文章目录 1、运行时数据区域1.1 程序计数器(线程私有)1.2 JAVA虚拟机栈(线程私有)1.3 本地方法栈1.4 Java堆(线程共享)1.5 方法区(线程共享)1.6 直接内存(非运行时数据区…

拥抱AIGC浪潮,亚信科技将如何把握时代新增量?

去年底,由ChatGPT带起的AIGC浪潮以迅雷不及掩耳之势席卷全球。 当互联网技术的人口红利逐渐消退之际,AIGC就像打开通用人工智能大门的那把秘钥,加速开启数智化时代的到来。正如OpenAI CEO Sam Altman所言:一个全新的摩尔定律可能…

560. 和为 K 的子数组

思路 本题的主要思路为创建一个哈希表记录每个0~i的和,在遍历这个数组的时候查询有没有sum-k的值在哈希表中,如果有,说明有个位置到当前位置的和为k。   有可能不止一个,哈希表负责记录有几个sum-k,将和记录下来。这…

10个问题,带你重新认识smardaten企业级无代码

很多新客户在接触数睿数据,或者在初步认识smardaten企业级无代码的时候,大家更多地以为只是个普通的无代码工具。在交流过程中,大家也提出了很多疑惑: smardaten无代码平台包括哪些能力? 适合开发哪些应用&#xff1f…

AI自动驾驶

AI自动驾驶 一、自动驾驶的原理二、自动驾驶的分类三、自动驾驶的挑战四、自动驾驶的前景五、关键技术六、自动驾驶的安全问题七、AI数据与自动驾驶八、自动驾驶的AI算法总结 自动驾驶技术是近年来备受关注的热门话题。它代表了人工智能和机器学习在汽车行业的重要应用。本文将…

web集群学习:源码安装nginx配置启动服务脚本、IP、端口、域名的虚拟主机

目录 1、源码安装nginx,并提供服务脚本。 2、配置基于ip地址的虚拟主机 3、配置基于端口的虚拟主机 4、配置基于域名的虚拟主机 1、源码安装nginx,并提供服务脚本。 1、源码安装会有一些软件依赖 (1)检查并安装 Nginx 基础依赖…