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中结合使用私有成员和非访问修饰符。私有成员保证了封装性,而非访问修饰符则提供了额外的功能或限制。

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

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

相关文章

手把手教你搭建OpenScenario交通场景(上)

OpenScenario是一种专为自动驾驶系统仿真测试设计的场景描述语言,它基于XML格式,旨在提供一个标准化、模块化的框架,用于定义和重现复杂的道路交通场景。该语言不仅能够详细描绘车辆、行人、交通信号及其他动态交通参与者的行为模式&#xff…

专业140+总分430+复旦大学875信号与系统考研经验原957电子信息通信考研,真题,大纲,参考书。

专业140,总430,复旦大学875信号与系统(电子信息)原957经验贴分享,希望大家复习有帮助。 专业课(875信号与系统含随机过程-原957) 专业课这方面我是从7月开始,刚好数学第一遍搞好了大…

NVR小程序接入平台EasyNVR多品牌NVR管理工具/设备介绍

随着数字化浪潮的迅猛推进,视频监控技术在维护公共安全、提升管理效能方面发挥着越来越重要的作用。在众多视频监控平台中,NVR小程序接入平台EasyNVR是一款拓展性强、视频能力灵活且部署轻便的安防视频监控平台。它支持多种主流标准协议,并能…

C语言 | Leetcode 题解之第535题TinyURL的加密与解密

题目: 题解: typedef struct {int key;char *val;UT_hash_handle hh; } HashItem;HashItem *dataBase NULL;char* encode(char* longUrl) {srand(time(0));int key;HashItem * pEntry NULL;while (true) {key rand();pEntry NULL;HASH_FIND_INT(dat…

磁盘分区并挂载

https://blog.csdn.net/qq_45664055/article/details/107516419

投机采样的显性化——OpenAI新feature:Predicted Outputs

关于投机采样speculative decoding我就不特别详细解释了 我在这里简单描述一下 小模型生成了接下来的n个标记,然后在大模型上进行n个并行推理,具体为:Prompt,Prompt ST1,Prompt ST1 ST2 … Prompt ST1 ST2 … …

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

有趣的Midjourney作品赏析(附提示词)

中文提示词:国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词:National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词:粘土模型,男性穿着中世纪欧洲蓝色盔甲&#x…

【保姆级教程】实操 Linux 磁盘管理:硬盘选型 分区挂载

最近,Linux 服务器自带的固态硬盘,空间告警,急需加上一块新的硬盘来救急。 今日分享,系统梳理下 Linux 下挂载磁盘的详细步骤和注意事项,方便日后翻阅,也给有类似需求的小伙伴一点帮助。 1. SSD&#xff…

离线安装nvidia docker2插件

由于网络问题,各位下载nvidia docker插件存在各种各样的问题,往往需要换源,或者其他途径外网解决,为了避免这么麻烦,可选择直接将包下载到本地,使用dpkg本地安装。 离线包下载地址,总共需要下载…

MySQL多表查询

扩展 upsert语法 原始数据 create table stu(id int primary key auto_increment,name varchar(20), #学生姓名gender varchar(10), #学生性别age int #学生姓名 ) default charsetutf8;insert into stu values(null,乔峰, 男 ,28),(null,虚竹, 男 ,25),(n…

让智能体—“正念365”陪你一起“养心”

佛学的“八正道”中,笔者个人观点,“正念”是最适合当代人低门槛练习的一个,因为不需要阅读大量的知识来理解概念,只需要保持对当下的觉察,发现分心了,就不带评价的把注意力拉回到当前的事情上就好。就是佛…

uni-app小程序开发(1)

下载软件就不多赘述了。 直接上代码,写过wep端的vue看这个小程序就简单很多,不需要搞那么多麻烦事情,直接编译器就创建好了基础模版。 1、项目结构 暂时知道这么多,后续再补充 2、页面创建、导航栏设置、基础属性设置 在pages中…

Mac上无法访问usr/local的文件

sudo chmod 755 /usr/loca 最后用百度提供的方法解决了

Python Matplotlib 子图绘制

Python 中的子图绘制 在数据可视化中,展示多个图表在同一个画布上是常见的需求,这样可以更直观地比较不同数据集之间的关系。Python 中的 Matplotlib 库为我们提供了强大的功能来实现这一点。在本篇文章中,我们将详细介绍如何使用 Matplotli…

编写一个基于React的聊天室

前言 此前已经编写了一版后端的im,此次就用其作为服务端,可查看参考资料1 代码 使用WebStorm创建React项目 安装依赖包 PS C:\learn-demo\front\chatroom> npm installadded 183 packages, and audited 184 packages in 16s43 packages are looki…

Python-利用os,tkinter库编写一个伪恶意程序文件(Pro版)

前言:上一期我们简单学习了如何编写一个多次弹窗警告用户的exe伪恶意文件。我们知道了把Python初始文件编译为exe文件后,程序在没有Python环境的情况下也能正常运行。我们上次编写的程序仅仅只是伪造系统正在执行关机命令前的倒计时的假象,实…

低压线路保护器在生产型企业配电系统中的应用

摘要 随着现代电力系统的发展,配电系统的可靠性和安全性要求日益提高。低压线路保护器在其中扮演着关键角色。本文将探讨低压线路保护器的工作原理及其在现代配电系统中的作用,重点介绍ALP系列低压线路保护器的功能与应用。 引言 低压线路保护器用于保…

像狗一样的男人 --- 社保 篇

如果你不想像狗一样的活着,请抛弃幻想,保持学习 一些概念城镇职工社会保险(五险一金)城居保(新农合) 一些概念 社保有两个系统: 城镇职工社会保险 也就是 五险一金。新农合 14年新农合改名叫城…

腾讯云轻量应用服务器最佳实践

引言 轻量应用服务器是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的使用,相比普通云服务器更加简单易用且更贴近应用,提供极简上云体验。那么如何正确地购买、配置、管理轻量应用服务器,以确…