[Java 基础] Java修饰符

Java修饰符详解

Java修饰符用于定义类、方法或者变量,修改其行为的关键字。Java语言主要提供了两类修饰符:

  • 访问权限修饰符: default, public , protected, private
  • 非访问权限修饰符: final, abstract, static, synchronized volatile

下面分别来详细介绍。

一、访问权限修饰符

Java定义了四种访问权限,分别是:默认(缺省)、公共(public)、保护(protected)和私有(private)。

1、default (缺省)

在同一包内可被访问,超出该包范围就不可访问。

class MyClass {String name;  // 缺省的访问权限
}

2、public

被修饰的类、方法、属性可以在任何地方被访问。

public class MyPublicClass {public String name;  // 公共的访问权限
}

3、protected

被其修饰的类、方法、属性可以被同一个包内的其他类、该类的子类以及其他包中的子类访问。

public class MyProtectedClass {protected String name;  // 保护的访问权限
}

4、private

被其修饰的类、方法、属性只能被自己访问和修改。

public class MyPrivateClass {private String name;  // 私有的访问权限
}

二、非访问权限修饰符

1、final

用于修饰类、方法和变量,final修饰的类不能被继承,修饰的方法不能被覆盖,修饰的变量为常量,必须初始化且不能改变。

public final class MyFinalClass {public final void myMethod() {final int num = 10;}
}

2、abstract

用于创建抽象类和抽象方法。抽象类不能实例化,抽象方法只有方法名,没有方法体,由子类提供方法实现。

public abstract class MyAbstractClass {public abstract void myMethod();
}

3、static

主要用于修饰类属性和类方法,可直接通过类调用,无需创建类的实例。

public class MyStaticClass {public static int count; public static void myMethod(){}
}

4、synchronized

在多线程环境下,用synchronized修饰的方法或者代码块可以保证同一时间只有一个线程实例执行,保证了线程的安全性。

public synchronized void show() {for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " : " + i);}
}

volatile

volatile 修饰符用于修饰变量,主要用于保证多线程操作中变量的可见性,即一个线程修改了某个变量的值,新值对于其他线程来说是可以立即得知的。

public class MyVolatileClass {public volatile int count; 
}

关键字volatile的内存语义是:当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存;当读一个volatile变量时,JMM会把这个线程对应的本地内存中的共享变量置为无效,线程接下来将从主内存中读取共享变量。

在实际编程中,对于多线程,我们还应配合synchronized关键字,或者java.util.concurrent包下的类库进行使用。

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

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

相关文章

04 Opencv图像操作

文章目录 读写像素修改像素值Vec3b与Vec3F灰度图像增强获取图像通道bitwise_not 算子对图像非操作 读写像素 读一个GRAY像素点的像素值&#xff08;CV_8UC1&#xff09; Scalar intensity img.at(y, x); 或者 Scalar intensity img.at(Point(x, y)); 读一个RGB像素点的像素值…

js【详解】数据类型原理(含变量赋值详解-浅拷贝)

JavaScript 中的数据按存储方式的不同&#xff0c;分为值类型和引用类型。 值类型&#xff08;共 6 种&#xff09;&#xff1a;赋值的时候传值 —— 数字、字符串、布尔值、null 、undefined&#xff0c;Symbol引用类型&#xff08;仅 1 种&#xff09;&#xff1a;赋值的时候…

虚拟机看不到共享文件夹

johnjohn-virtual-machine:/mnt/hgfs$ cat /etc/issue Ubuntu 20.04.6 LTS \n \l 看下是否挂载 johnjohn-virtual-machine:/mnt/hgfs$ vmware-hgfsclient FPGAs_AdaptiveSoCs_Unified_2023.2_1013_2256 xilinx 取消挂载 johnjohn-virtual-machine:/mnt/hgfs$ sudo umount /mn…

kvm虚拟机修改网络模式

kvm修改网络模式可以直接使用virsh命令进行修改 一、查看主机 virsh list --all 二、查看需要修改主机的网络模式 virsh domiflist mysql 三、vim进行修改 cd /etc/libvirt/qemu/ vim mysql.xml 四、找到要修改的网卡部分 五、重新定义虚拟机 virsh define mysql_install.xml…

java工具类之解析地址

输出 代码实现 import java.util.regex.Matcher; import java.util.regex.Pattern;public class AddressResolutionUtil {/*** 解析地址* author ys* param address* return*/public static String addressResolution(String address){String regex"(?<province>…

Java的编程之旅32——继承与多态的联合使用

模拟USB设备接入电脑 1.首先建立一个名为“USB”的抽象类 public abstract class USB {public abstract void On();public abstract void Off(); }这是一个抽象类USB&#xff0c;表示一个USB设备。 该类有两个抽象方法On()和Off()&#xff0c;分别表示打开和关闭USB设备。 由…

javaee教程郑阿奇,一线互联网架构师筑基必备技能之Java篇

一、什么情况下会发生栈内存溢出&#xff1f; 1、栈是线程私有的&#xff0c;栈的生命周期和线程一样&#xff0c;每个方法在执行的时候就会创建一个栈帧&#xff0c;它包含局部变量表、操作数栈、动态链接、方法出口等信息&#xff0c;局部变量表又包括基本数据类型和对象的引…

【GameFramework框架内置模块】6、实体(Entity)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog.csdn.net/q7…

K 个一组翻转链表 力扣

【玩转校招算法面试】第三天&#xff1a;链表中的节点每k个一组翻转&#xff08;动画演示、手写 Java 代码、详细注释、LeetCode 高频算法题&#xff09;_哔哩哔哩_bilibili 初始状态&#xff1a;1 -> 2 -> 3&#xff0c;pre null, cur 1保存当前节点的下一个节点&…

并查集基础,死去的回忆突然攻击我

并查集普及【模板】并查集 - 洛谷 #include<iostream> #include<cstring> #include<queue> #include<vector> #include<algorithm> using namespace std; #define int long long typedef pair<int,int> PII; #define xx first #define y…

TypeScript 中类的理解及应用场景

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…

瑞_23种设计模式_组合模式

文章目录 1 组合模式&#xff08;Composite Pattern&#xff09;1.1 介绍1.2 概述1.3 组合模式的结构1.4 组合模式的分类1.5 组合模式的优点1.6 组合模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列…

C++11:atomic原子操作

文章目录 atomic概念atomic实例分析 atomic概念 std::atomic 是 C 中的一个类模板&#xff0c;用于提供原子操作的类型。它是为了在多线程环境下进行并发操作时保证数据的原子性而设计的。 原子操作是指不会被中断的操作&#xff0c;它们要么完全执行成功&#xff0c;要么完全…

TP6上传图片到OSS(记录贴)

1&#xff0c;先安装&#xff0c;我使用composer安装 在项目的根目录运行composer require aliyuncs/oss-sdk-php 2,安装成功以后vendor目录下可以看到如图&#xff1a; 3&#xff0c;上传图片代码如下&#xff1a; <?php namespace app\controller;use app\BaseControll…

React 模态框的设计(八)优化补充

在之前的弹窗的设计中&#xff0c;有两处地方现在做一点小小的优化&#xff0c;就是把_Draggable.jsx中的 onPointerEnter 事件 用 useLayoutEffect来规换&#xff0c;效果更佳&#xff0c;同样的&#xff0c;在_ModelContainer.jsx中也是一样。如下所示&#xff1a; _Draggabl…

1、docker入门

文章目录 1、tocker简介2、tocker的安装&环境配置2、配置阿里云镜像3、基本命令1、镜像命令2、docker基本命令3、镜像基本命令4、Docker 容器常用命令 1、tocker简介 新一代的虚拟化技术 2、tocker的安装&环境配置 uname -r1、首先查看liunx的内核 yum update -y2、更…

生成voc格式数据集

数据集存放格式&#xff1a;&#xff08;Annotations文件夹放标注的xml文件&#xff0c;JPEGImages文件夹放标注的图片&#xff09; 运行代码&#xff1a; import os import random import xml.etree.ElementTree as ETimport numpy as npdef get_classes(classes_path):with …

USACO 2024 Feb Bronze铜组题解

闲话:今天是4年一度的奇观——2月29日!(地球人都知道) 所以为了纪念这个特殊的日子&#xff0c;我决定倒着讲。这是什么奇怪的规矩&#xff1f;(雾 Maximizing Productivity: 二分即可。 #include <bits/stdc.h> using namespace std; const int maxn200005; int c[ma…

补一次buuctf_crypto的脚本

题目是&#xff1a;Buuctf_crypto_还原大师 本篇写作原因&#xff1a;嗯&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;我记得我这篇文章写过啊&#xff0c;怎么找不到了。在这传一下我改进的脚本&#xff1a; import hashlib k TASC?O3RJMV?WDJKX?ZM for…

深入理解Java中的优先级队列(堆)——PriorityQueue

引言&#xff1a; 在Java中&#xff0c;优先级队列&#xff08;PriorityQueue&#xff09;是一种基于堆结构实现的队列&#xff0c;其中每个元素都有一个优先级&#xff0c;优先级高的元素在队列中具有更高的优先级&#xff0c;排在前面。优先级队列常用于任务调度、事件处理等…