当前位置: 首页 > news >正文

Java学习教程,从入门到精通,Java修饰符语法知识点及案例代码(23)

1.Java修饰符语法知识点及案例代码

Java修饰符用于改变类、方法、变量、接口等元素的行为和可见性。主要分为两大类:访问修饰符和非访问修饰符。

访问修饰符(Access Modifiers)
  1. public

    • 提供最大的访问权限,任何类都可以访问。
    • 使用对象:类、方法、变量、接口、构造方法。
  2. protected

    • 对同一包内的类和所有子类可见。
    • 使用对象:变量、方法、构造方法(不能修饰类)。
  3. default(无修饰符)

    • 在同一包内可见。
    • 使用对象:类、接口、变量、方法、构造方法。
  4. private

    • 在同一类内可见。
    • 使用对象:变量、方法、构造方法(不能修饰类)。
非访问修饰符(Non-Access Modifiers)
  1. static

    • 修饰类变量和方法,表示属于类本身,而不是某个实例。
    • 类变量:在方法区存储,所有对象共享。
    • 静态方法:不能访问非静态成员。
  2. final

    • 修饰类、方法和变量,表示不可更改。
    • 类:不能被继承。
    • 方法:不能被重写。
    • 变量:常量,不可修改。
  3. abstract

    • 修饰类和方法,表示抽象,没有具体实现。
    • 抽象类:不能被实例化。
    • 抽象方法:必须由子类实现。
  4. synchronized

    • 修饰方法或代码块,用于处理多线程并发访问资源时的同步控制。
  5. volatile

    • 修饰变量,确保线程间的可见性和防止指令重排序。
  6. transient

    • 修饰变量,表示该变量不会被序列化机制处理。
  7. native

    • 修饰方法,表示该方法由非Java代码实现,通过JNI调用。
  8. strictfp

    • 修饰类或方法,表示浮点数运算遵循严格的IEEE 754标准。
案例代码
// 访问修饰符示例
public class AccessModifiersDemo {// 默认访问修饰符(包访问权限)int defaultVar = 10;// 私有访问修饰符private int privateVar = 20;// 受保护访问修饰符protected int protectedVar = 30;// 公共访问修饰符public int publicVar = 40;// 公共方法public void printVars() {System.out.println("Default Var: " + defaultVar);System.out.println("Private Var: " + privateVar);System.out.println("Protected Var: " + protectedVar);System.out.println("Public Var: " + publicVar);}// 私有方法(外部类不能直接访问)private void privateMethod() {System.out.println("This is a private method.");}// 公共静态方法public static void staticMethod() {System.out.println("This is a static method.");}// 主方法public static void main(String[] args) {// 创建对象AccessModifiersDemo demo = new AccessModifiersDemo();// 访问公共和默认变量System.out.println("Accessing publicVar: " + demo.publicVar);// System.out.println("Accessing defaultVar: " + demo.defaultVar); // 错误:不能在外部类中直接访问默认访问修饰符的变量// 调用公共方法demo.printVars();// 调用静态方法staticMethod();// 由于privateMethod是私有的,因此不能直接调用// demo.privateMethod(); // 错误:privateMethod() 不能被访问}
}// 非访问修饰符示例
abstract class Shape {// 抽象方法abstract void draw();
}class Circle extends Shape {// 实现抽象方法@Overridevoid draw() {System.out.println("Drawing a Circle.");}
}class Rectangle extends Shape {// 实现抽象方法@Overridevoid draw() {System.out.println("Drawing a Rectangle.");}
}class FinalDemo {// final变量final int CONSTANT = 100;// final方法final void finalMethod() {System.out.println("This is a final method.");}
}class StaticDemo {// 静态变量static int staticVar = 5;// 静态方法static void staticMethod() {System.out.println("This is a static method. Static Var: " + staticVar);}
}public class NonAccessModifiersDemo {public static void main(String[] args) {// 创建Circle和Rectangle对象Shape circle = new Circle();Shape rectangle = new Rectangle();// 调用draw方法circle.draw();rectangle.draw();// FinalDemo示例FinalDemo finalDemo = new FinalDemo();System.out.println("Final Constant: " + finalDemo.CONSTANT);finalDemo.finalMethod();// StaticDemo示例System.out.println("Accessing static variable: " + StaticDemo.staticVar);StaticDemo.staticMethod();}
}

在以上代码中,AccessModifiersDemo 类展示了不同访问修饰符的用法,NonAccessModifiersDemo 类展示了非访问修饰符的用法。

以下是一些具体的Java修饰符使用案例,包括访问修饰符和非访问修饰符的示例。

访问修饰符案例

1. 公共类与公共方法
// 公共类
public class PublicClassDemo {// 公共变量public int publicVar = 10;// 公共方法public void publicMethod() {System.out.println("This is a public method. Public Var: " + publicVar);}// 主方法public static void main(String[] args) {// 创建对象并访问公共成员PublicClassDemo demo = new PublicClassDemo();demo.publicMethod();System.out.println("Accessing publicVar: " + demo.publicVar);}
}
2. 私有成员与公共方法访问
// 公共类
public class PrivateMemberDemo {// 私有变量private int privateVar = 20;// 公共方法访问私有变量public void accessPrivateVar() {System.out.println("Private Var: " + privateVar);}// 主方法public static void main(String[] args) {// 创建对象并调用公共方法访问私有变量PrivateMemberDemo demo = new PrivateMemberDemo();demo.accessPrivateVar();// demo.privateVar; // 错误:无法从外部访问私有变量}
}
3. 受保护成员与继承
// 基类
public class ProtectedMemberBase {// 受保护变量protected int protectedVar = 30;// 受保护方法protected void protectedMethod() {System.out.println("Protected Var: " + protectedVar);}
}// 子类
public class ProtectedMemberDerived extends ProtectedMemberBase {// 主方法public static void main(String[] args) {// 创建子类对象并访问受保护成员ProtectedMemberDerived derived = new ProtectedMemberDerived();derived.protectedMethod();System.out.println("Accessing protectedVar: " + derived.protectedVar);}
}

非访问修饰符案例

1. 静态成员与静态方法
// 公共类
public class StaticMemberDemo {// 静态变量static int staticVar = 40;// 静态方法static void staticMethod() {System.out.println("Static Var: " + staticVar);}// 主方法public static void main(String[] args) {// 直接访问静态成员,无需创建对象System.out.println("Accessing static variable: " + StaticMemberDemo.staticVar);StaticMemberDemo.staticMethod();// 也可以通过对象访问静态成员(不推荐)StaticMemberDemo demo = new StaticMemberDemo();System.out.println("Accessing static variable through object: " + demo.staticVar);demo.staticMethod();}
}
2. 最终变量与方法
// 公共类
public class FinalMemberDemo {// 最终变量(常量)final int FINAL_CONSTANT = 50;// 最终方法(不能被重写)public final void finalMethod() {System.out.println("This is a final method. Final Constant: " + FINAL_CONSTANT);}// 主方法public static void main(String[] args) {// 创建对象并访问最终成员FinalMemberDemo demo = new FinalMemberDemo();demo.finalMethod();// demo.FINAL_CONSTANT = 100; // 错误:不能修改最终变量}
}
3. 抽象类与抽象方法
// 抽象基类
public abstract class AbstractClassDemo {// 抽象方法(无实现)public abstract void abstractMethod();// 具体方法(有实现)public void concreteMethod() {System.out.println("This is a concrete method.");}
}// 具体子类
public class AbstractClassDerived extends AbstractClassDemo {// 实现抽象方法@Overridepublic void abstractMethod() {System.out.println("Implementing abstract method.");}// 主方法public static void main(String[] args) {// 创建子类对象并调用方法AbstractClassDerived derived = new AbstractClassDerived();derived.abstractMethod();derived.concreteMethod();}
}

这些案例涵盖了Java中常见的修饰符使用场景,包括访问修饰符(public、private、protected、默认)和非访问修饰符(static、final、abstract)的示例。通过运行这些代码,你可以更好地理解修饰符在Java中的作用和用法。
在Java中,私有成员(使用private修饰符)和非访问修饰符(如staticfinalabstract等)是两种不同的概念,但它们可以组合使用。以下是一些示例,展示了私有成员与非访问修饰符的结合使用。

私有成员与static修饰符

public class PrivateStaticExample {// 私有静态变量private static int privateStaticVar = 100;// 私有静态方法private static void privateStaticMethod() {System.out.println("Private static method called. Private static variable: " + privateStaticVar);}// 公共静态方法,用于访问私有静态成员public static void accessPrivateStatic() {privateStaticMethod();System.out.println("Accessing private static variable: " + privateStaticVar);}// 主方法public static void main(String[] args) {// 通过公共静态方法访问私有静态成员PrivateStaticExample.accessPrivateStatic();// 不能直接从类外部访问私有静态成员// System.out.println(PrivateStaticExample.privateStaticVar); // 错误:无法从外部访问私有静态变量// PrivateStaticExample.privateStaticMethod(); // 错误:无法从外部访问私有静态方法}
}

私有成员与final修饰符

public class PrivateFinalExample {// 私有最终变量(常量)private final int PRIVATE_FINAL_CONSTANT = 200;// 构造函数public PrivateFinalExample() {// 注意:不能在构造函数中重新赋值给final变量(除非是在初始化块中,但这里已经初始化了)// this.PRIVATE_FINAL_CONSTANT = 300; // 错误:不能重新赋值给final变量}// 公共方法,用于展示私有最终变量的值public void showPrivateFinalConstant() {System.out.println("Private final constant: " + PRIVATE_FINAL_CONSTANT);}// 主方法public static void main(String[] args) {// 创建对象并调用方法PrivateFinalExample example = new PrivateFinalExample();example.showPrivateFinalConstant();// 不能从类外部直接访问私有最终变量// System.out.println(example.PRIVATE_FINAL_CONSTANT); // 错误:无法从外部访问私有最终变量}
}

注意:abstract修饰符不能用于成员变量

abstract修饰符只能用于类和方法,不能用于成员变量。因此,你不能有一个“私有抽象成员变量”。但是,你可以有一个抽象类,其中包含私有成员变量和抽象方法。

抽象类中的私有成员

public abstract class AbstractClassWithPrivateMembers {// 私有成员变量private int privateMemberVar = 300;// 抽象方法(无实现)public abstract void abstractMethod();// 具体方法,可以访问私有成员变量public void showPrivateMemberVar() {System.out.println("Private member variable: " + privateMemberVar);}
}// 具体子类
public class ConcreteClassDerivedFromAbstract extends AbstractClassWithPrivateMembers {// 实现抽象方法@Overridepublic void abstractMethod() {System.out.println("Abstract method implemented.");}// 主方法public static void main(String[] args) {// 创建子类对象ConcreteClassDerivedFromAbstract concrete = new ConcreteClassDerivedFromAbstract();// 调用具体方法访问私有成员变量(通过继承关系)concrete.showPrivateMemberVar();// 调用实现的抽象方法concrete.abstractMethod();// 不能从子类外部直接访问父类的私有成员变量// System.out.println(concrete.privateMemberVar); // 错误:无法从外部访问私有成员变量(即使是通过子类对象)}
}

这些示例展示了如何在Java中结合使用私有成员和非访问修饰符。私有成员保证了封装性,而非访问修饰符则提供了额外的功能或限制。

相关文章:

Java学习教程,从入门到精通,Java修饰符语法知识点及案例代码(23)

1.Java修饰符语法知识点及案例代码 Java修饰符用于改变类、方法、变量、接口等元素的行为和可见性。主要分为两大类:访问修饰符和非访问修饰符。 访问修饰符(Access Modifiers) public 提供最大的访问权限,任何类都可以访问。使…...

钉钉小程序使用getApp实现类型provide inject的功能 应用场景:解决页面同步子组件弹窗的滚动问题

前言:在开发钉钉小程序的时候 组件内部的弹窗滚动会带着视图同步滚动 所以需要在组件内部弹窗显示的时候禁用视图的scroll滚动 由于我组件封装的比较深 不可能逐级传递 dd也么有provide的语法 所以我使用的getApp 完成控制的效果 最终完美运行 觉得有帮助相互关注一下 后续会持…...

标准化 Git 提交信息的约定

在使用 Git 进行版本控制时,良好的提交信息可以帮助团队成员更好地理解每次提交的目的和影响。为了规范化提交信息,一些团队采用了特定的格式或约定,比如 Angular 团队提出的 Commit Message Conventions。这种规范有助于自动化工具的使用&am…...

React教程(详细版)

React教程(详细版) 1,简介 1.1 概念 react是一个渲染html界面的一个js库,类似于vue,但是更加灵活,写法也比较像原生js,之前我们写出一个完成的是分为html,js,css&…...

Perfect Forwarding(完美转发)

文章目录 1. 引用折叠2. 万能引用3. 完美转发3.1对比:std::move and std::forward比较 3.2使用时机3.3 返回值优化(RVO)两个前提条件注意事项 4. 完美转发失败情况完美转发失败五种情况 完美转发的实现要依赖于模版类型推导和引用折叠和万能引用。 1. 引…...

PHP露营地管理平台小程序系统源码

⛺️【露营新风尚】露营地管理平台系统全攻略⛺️ 🏕️一、露营热潮下的管理难题:如何高效运营露营地?🤔 随着露营文化的兴起,越来越多的人选择在大自然中享受宁静与自由。然而,露营地的管理却面临着诸多…...

速盾:vue的cdn是干嘛的?

CDN,即内容分发网络(Content Delivery Network),是一种将网站的静态资源分发到全球各个节点并缓存起来的技术。它可以帮助网站提供更快的加载速度,更好的用户体验,并且可以减轻源服务器的负载压力。 Vue.j…...

线性代数:Matrix2x2和Matrix3x3

今天整理自己的框架代码,将Matrix2x2和Matrix3x3给扩展了一下,发现网上unity数学计算相关挺少的,所以记录一下。 首先扩展Matrix2x2: using System.Collections; using System.Collections.Generic; using Unity.Mathemati…...

Windows 中 Electron 项目实现运行时权限提升以杀掉特定进程

#Windows 中 Electron 项目实现运行时权限提升以杀掉特定进程 一、引言 在 Windows 操作系统中,有时我们需要以管理员权限来执行某些操作,特别是当需要杀掉由管理员启动的进程时。Electron 是一个开源的框架,用于使用 JavaScript、HTML 和 C…...

赠你一只金色的眼 - 富集分析和表达数据可视化

GOplot包介绍 GOplot包用于生物数据的可视化。更确切地说,该包将表达数据与功能分析的结果整合并进行可视化。但是要注意该包不能用于执行这些分析,只能把分析结果进行可视化。在所有科学领域,由于空间限制和结果所需的简洁性,切…...

鸿蒙的进击之路

1. 题记: 为什么要写鸿蒙,因为她是华为的,为什么是华为就要写,因为华为背负了国人太多太多的包袱,或点赞或抨击。 我是强烈支持华为的,但我会客观公正地去评价华为的产品,就比如这篇博文&#…...

c语言中的线程管理pthread详解

在C语言中,多线程编程常用的POSIX线程(POSIX Threads, pthreads)库主要由pthread.h头文件提供。pthread.h定义了许多用于线程创建、管理、同步的函数和数据结构。下面是pthread.h中的核心概念和主要函数的详细介绍。 1. 基本概念 线程:线程是一个轻量级的进程,可以并发执…...

关于qiskit版本>1.0.0,execute函数被替换

关于下列代码,当qiskit版本大于1时,无法使用execute函数,定义transpiled_circuit和run函数来替换。 import numpy as np from qiskit import QuantumCircuit, Aer, executedef calculate_hydrogen_energy():# Definir el circuito cunticoci…...

给 Docker 配置网络代理

参考 https://www.cnblogs.com/Chary/p/18096678如何优雅的给 Docker 配置网络代理 有时因为网络原因,比如公司 NAT,或其它啥的,需要使用代理。Docker 的代理配置,略显复杂,因为有三种场景。但基本原理都是一致的,都是利用 Linux 的 http_proxy 等环境变量。 Dockerd 代…...

软件测试基础十七(python Unittest)

Unittest 一、Unittest 简介 unittest是 Python 内置的标准测试框架,用于编写和运行单元测试。它提供了一组工具和类,帮助开发者组织、编写和执行测试用例,以验证代码的正确性。 二、Unittest 核心要素 1. TestCase(测试用例类…...

技术领导者的道与术:从领导者到领导力

目录标题 领导者现实看起来是这样技术领导者不应该和个人坐在一起技术领导力仍然是必须的从技术领导到技术领导力小结领导者 你可能想成为或者已经是一位技术领导者,估计你现在心里想成为超级英雄的想法正在爆棚。 你是Java、JavaScript、Angular等技术的专家,公司的项目代…...

Starrocks Compaction的分析

背景 本文基于 Starrocks 3.1.7 结论 Starrocks 会启动一个线程周期性的去进行Compaction,该周期间隔为 200 MS, 该Compaction以table的partition为切入点,tablet(也就是bucket)为粒度进行task的创建。 分析 CompactionMgr start 方法会启动一个Com…...

淘淘商城实战高并发分布式项目(有源码)

通过百度网盘分享的文件:淘淘商城实战高并发分布式项目(有源码) 链接:https://pan.baidu.com/s/1V94gRALxHgMVwpcXoE-miA?pwdglu7 提取码:glu7 在互联网技术飞速发展的当下,高并发分布式项目成为了众多电商平台等大型应用的核心…...

内网部署web项目,外网访问不了?只有局域网能访问!怎样解决?

相关技术 要实现“内网部署,外网访问”,可以使用内网穿透、VPN技术、DMZ主机、端口映射等方法。以下是对这些方法的详细解释: 一、内网穿透 内网穿透是一种技术,它通过将内网设备映射到公网上的方式,实现外网访问内…...

Jenkins系列

jenkins 1、搭建Jenkins 搭建Jenkins 2、这是什么 3、这是什么 4、 这是什么 5、这是什么 文章目录 jenkins1、搭建Jenkins2、这是什么3、这是什么4、 这是什么5、这是什么 前言 前言 提示:这里可以添加本文要记录的大概内容: 例如:随…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...