Java基础篇--修饰符

news2024/11/23 17:00:32

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修饰的方法通常需要与本地语言进行交互。

 

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

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

相关文章

spark 图计算 助力解决 dataframe中的链式依赖

链式依赖说明 name newName a b c d b c 我们需要的结果 即我们可以支持获取到链式转换的 起点 重点 以及链式的中间转换过程顺序数组. 特别说明: 出版只支持 单向 无分叉的图,其他复杂场景暂时未测试. 场景举例: 比如某件商品价格变化,我们需要知…

原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

1. 背景 最近看一个客户的代码片段,发现他在用原始套接字编程,一般学习套接字都是流式套接字和数据报套接字,本来也不是搞网络的,原始套接字了解得很少,借着这次机会,自己来学习一下原始套接字编程。 2. …

函数的模拟实现

题一&#xff1a; 模拟实现strncpy #include <stdio.h>void my_strncpy(char* arr2, char* arr1, size_t num){int i 0;for (i 0; i < num; i){*(arr2 i) *(arr1 i);}}int main(){char arr1[] "hello liangzai";char arr2[10] { 0 };//strncpy(ar…

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)

1、包管理工具npm &#xff08;1&#xff09;包管理工具npm&#xff1a; Node Package Manager&#xff0c;也就是Node包管理器&#xff1b;但是目前已经不仅仅是Node包管理器了&#xff0c;在前端项目中我们也在使用它来管理依赖的包&#xff1b;比如vue、vue-router、vuex、…

3.6 Spring MVC文件上传

1. 文件上传到本地 实现方式 Spring MVC使用commons-fileupload实现文件上传&#xff0c;注意事项如下&#xff1a; l HTTP请求方法是POST。 l HTTP请求头的Content-Type是multipart/form-data。 SpringMVC配置 配置commons-fileupload插件的文件上传解析器CommonsMultip…

搭建servlet服务

目录 servlet的生命周期 配置tomcat环境 创建web后端项目 配置web.xml http请求 get和post 其他请求 http响应 Servlet是Server Applet的简称&#xff0c;意思为用Java编写的服务器端的程序&#xff0c;它运行在web服务器中&#xff0c;web服务器负责Servlet和客户的通…

Springboot开发常用注解

文章目录 1.RestController2.Data3.RequestMapping4.Builder 1.RestController RestController注解其实就是将 return 中的内容以 JSON字符串的形式返回客户端 controller的详解 2.Data Data详解 3.RequestMapping RequestMapping 4.Builder Builder

文件系统目录结构

1. 目录结构 linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录/ &#xff0c;然后在此目录下再创建其他的目录。 在linux中&#xff0c;一切皆文件(Linux将所有的设备、文件、进程等都当做文件来处理) 2. 目录作用具体介绍 目录名解析/b…

访企聚力促创新:长安大学来访闪马智能

7月31日&#xff0c;长安大学运输工程学院院长葛颖恩教授、学院副书记李婷以及学办主任董彬一行来访闪马智能&#xff0c;闪马智能创始人兼CEO彭垚、城市交通行业总经理兼营销副总裁詹诚以及公共交通行业总经理熊天圣等出席了本次交流会。 长安大学运输工程学院院长葛颖恩教授…

软考考点之Mccabe度量计算及路径覆盖

软考考点之Mccabe度量计算及路径覆盖 [2023年上半年] 34、35、以下流程图中&#xff0c;至少需要(34)个测试用例才能覆盖所有路径。采用McCabe方法计算程序复杂度为(35) A&#xff0e;3B&#xff0e;4C&#xff0e;5D&#xff0e;6(35)A&#xff0e;2B&#xff0e;3C&#xf…

【框架类】—Vue3的生命周期

一、生命周期的相关函数 onBeforeMount 页面渲染之前 和 onMounted渲染之后 示例 <template><div class"test"><div ref"el">组件初始化</div></div> </template> <script> //按需引入所需方法 import { ref,…

sudo root命令不在sudoers文件中。此事将被报告。全网比较详细版本,解决报错问题步骤较多

我在使用个人用户zhang&#xff08;非root用户&#xff09;时&#xff0c;在执行其他命令时&#xff0c;使用sudo命令来执行的时候&#xff0c;需要验证当前用户的密码&#xff0c; 输入了之后&#xff0c;提示“zhang‘ 不在sudoers文件中&#xff0c;此事将被报告” 分析原…

JAVA设计模式----原型设计模式

文章目录 一、简介二、实现方式三、原型模式的注意事项浅拷贝与深拷贝浅拷贝深拷贝一、简介 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 类型:创建类模式 类图: 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Protot…

eNSP:ibgp的破水平切割练习

实验要求&#xff1a; 拓扑展示&#xff1a; 命令操作&#xff1a; R1&#xff1a; <Huawei>sys [Huawei]sys r1 [r1]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 12.1.1.1 24 [r1-GigabitEthernet0/0/1]int lo0 [r1-LoopBack0]ip add 1.1.1.1 24 [r1-LoopBack0]osp…

dingding机器人

“自定义机器人”只支持消息发送&#xff0c;自动回复需要“企业内部机器人” 消息发送 import requests import jsonres requests.post(https://oapi.dingtalk.com/robot/send?access_token036a339axxx,data json.dumps({"text": {"content":"h…

React UI组件库

1 流行的开源React UI组件库 1 material-ui(国外) 官网: Material UI: React components based on Material Design github: GitHub - mui/material-ui: MUI Core: Ready-to-use foundational React components, free forever. It includes Material UI, which implements Go…

【Hilog】鸿蒙系统日志源码分析

【Hilog】鸿蒙系统日志源码分析 Hilog采用C/S结构&#xff0c;Hilogd作为服务端提供日志功能。Client端通过API调用&#xff08;最终通过socket通讯&#xff09;与HiLogd打交道。简易Block图如下。 这里主要分析一下。Hilog的读、写、压缩落盘&#xff0c;以及higlog与android…

PIL报错:TypeError: Cannot handle this data type: (1, 1, 3), <f4

问题&#xff1a; mi_fgsm.py:101: DeprecationWarning: Starting with ImageIO v3 the behavior of this function will switch to that of iio.v3.imread. To keep the current behavior (and make this warning disappear) use import imageio.v2 as imageio or call image…

django boostrap html实现可拖拽的左右布局,鼠标拖动调整左右布局的大小或占比

一、实现的效果 最近需要在Django项目中,实现一个左右布局的html页面,页面框架使用的是boostrap。但这个布局不是简单的左右分栏布局,而是需要实现可以通过鼠标拖拽的方式动态调整左右两侧布局的大小和占比。效果大致如下: 一开始,页面分为左右两块布局: 鼠标放到中间的…

Stable Diffusion AI绘图教学

课程介绍下载 这门课程将教授学生使用Stable Diffusion AI绘图工具进行数据可视化和图形设计。学生将学习基本的绘图原理、数据分析技巧&#xff0c;以及如何使用Stable Diffusion AI创建高质量的图表和可视化作品。通过实践项目和案例研究&#xff0c;学生将提升绘图技能&…