目录

什么是封装?

什么是访问限定符?

static静态修饰符

用static修饰的类变量或类方法的注意事项:


什么是封装?

封装是面向对象的三大特性之一,指的是将一个类中的实现细节进行隐藏,对外只提供一些开放的接口而看不见内部的字段,通过访问限定符来控制对数据的访问,以此来提高程序的安全性。那么怎么实现封装呢?通常使用private关键字对类中的成员变量进行封装起来,通过用public方法提供对属性的访问和修改:

class Student{//在Student类外面直接访问是访问不到private修饰的成员变量的;private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}//不能够直接访问字段,而我们可以写一些方法间接访问public void setName(String name) {this.name = name;}//获取name的方法public String getName() {return name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void write(){System.out.println(this.name+"正在写作业");}
}
public class Test {public static void main(String[] args) {Student student = new Student("张三",10);//写完setName就可以修改字段了student.setName("小张");//通过getName方法去获取姓名System.out.println(student.getName());student.write();}
}

运行结果:

什么是访问限定符?

Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,而访问权限用来控制方法或者字段能否直接在类外使用。Java中提供了以下访问限定符:

范围

private

protectedpublic
同一包中的同一类
同一包中的不同类
不同包中的子类
不同包中的非子类
  • 访问权限除了可以限定类中成员的可见性,也可以控制类的可见性 
  • 一般情况下成员变量设置为private,成员方法设置为public。

static静态修饰符

static修饰成员变量:被static修饰的成员变量,它属于类本身,而不是类的某个对象,称为类对象;在计算机中只有一份,能被类中的所有对象共享。没有被static修饰成员变量,它属于类的每个对象。每个对象在创建时都会拥有自己的一份实例变量。实例变量的内存空间在对象创建时分配,在对象销毁时释放。

public class Student {//实例变量,属于对象,每个对象都有自己的实例变量public String name;public int age;//类变量(静态变量),属于类,所有对象共享//当每个Student的教室都是相同的时候需要用到类变量会更加方便一些public static String classRoom = "2-412";public Student(String name, int age) {this.name = name;this.age = age;}public static void main(String[] args) {// 创建两个Student对象Student s1 = new Student("张三", 18);Student s2 = new Student("李四", 19);//实例化成员变量只能通过先实例对象,对象.成员变量来访问。System.out.println(s1.name);//静态成员变量可以直接通过类名访问System.out.println(Student.classRoom);//也可以通过对象访问System.out.println(s1.classRoom);}
}

 通过以上的例子可以知道: 类变量可以通过类名.成员变量的方法来直接访问;当然可以通过实例化个对象,通过对象.成员变量方法来访问。而只能通过通过实例化个对象,通过对象.成员变量方法来访问。

被static修饰成员方法:也是一样的规则类方法通过类名.成员的方法来直接访问,也可以通过实例化个对象,通过对象.成员方法来访问。而只能通过通过实例化个对象,通过对象.成员方法来访问。

public class Student {// 类变量(静态变量),属于类,所有对象共享private static int studentCount = 0;// 实例变量,属于对象,每个对象都有自己的实例变量private String name;private int age;// 构造方法public Student(String name, int age) {this.name = name;this.age = age;studentCount++; // 每次创建对象时,类变量studentCount自增}// 静态方法,可以访问类变量,但不能直接访问实例变量public static int getStudentCount() {return studentCount;}// 实例方法,可以访问实例变量和类变量public void displayInfo() {System.out.println("Name: " + name + ", Age: " + age);System.out.println("Total students: " + studentCount);}public static void main(String[] args) {// 创建两个Student对象Student student1 = new Student("Alice", 20);Student student2 = new Student("Bob", 22);// 通过类名访问类变量 System.out.println("Total students: " + Student.getStudentCount());// 调用实例方法student1.displayInfo();student2.displayInfo();}
}

用static修饰的类变量或类方法的注意事项:

  • 在静态方法的内部 不能使用非静态的数据成员
  • this 不能出现在静态方法当中

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

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

相关文章

DAY 51 复习日

作业:day43的时候我们安排大家对自己找的数据集用简单cnn训练,现在可以尝试下借助这几天的知识来实现精度的进一步提高import torch import torch.nn as nn import torch.nn.functional as F import torchvision import torchvision.transforms as trans…

针对网络爬虫的相关法律法规整理

在中国,网络爬虫的法律法规涉及多个层面,包括个人信息保护、数据安全、网络安全、知识产权、反不正当竞争等。以下是详细的法律法规分析及合规指南: 1. 核心法律法规及适用场景​ ​​(1)《民法典》——隐私权与个人信…

1.1_5_2 计算机网络的性能指标(下)

继续来看计算机网络的性能指标,接下来我们探讨时延,时延带宽积和往返时延,以及信道利用率这几个性能指标。 首先来看时延这个性能指标,英文叫delay,也有的教材,把它翻译为延迟。所谓的时延,就是…

PP-OCRv2:超轻OCR系统的万能包

PP-OCRv2:超轻OCR系统的万能包摘要光学字符识别(OCR)系统已广泛应用于多种场景,但设计兼顾精度与效率的OCR系统仍具挑战性。我们此前提出的超轻量OCR系统PP-OCR在平衡两者方面取得进展。本文进一步提出PP-OCRv2,通过五…

常见的软件版本开源协议

开源软件许可证核心指南 一、许可证基础分类 1. 宽松型许可证(Permissive) 核心特征:允许闭源衍生,仅保留版权声明适用场景:商业集成、快速开发代表协议: 📜 MIT 📜 Apache 2.0 &…

基于FPGA的一维序列三次样条插值算法verilog实现,包含testbench

目录 1.前言 2.算法运行效果图预览 3.算法运行软件版本 4.部分核心程序 5.算法仿真参数 6.算法理论概述 7.参考文献 8.算法完整程序工程 1.前言 三次样条插值是一种在数据拟合和信号处理中广泛应用的技术,它通过构造分段三次多项式来逼近给定的离散数据点&a…

RAG 之 Prompt 动态选择的三种方式

“如果我有5个prompt模板,我想只选择一个每次都自动五选一能做到吗怎么做?” 完全可以做到。这在复杂的RAG或Agentic工作流中是一个非常普遍且关键的需求,通常被称为“条件路由(Conditional Routing)”或“动态调度&am…

【ROS2 自动驾驶学习】02-安装ROS2及其配套工具

目录 一、设置语言环境 二、添加存储库 三、添加软件源 四、安装ROS2 五、配置环境 六、测试ROS2 七、安装一些工具 7.1 terminator 7.2 colcon工具 7.3 tf工具 7.4 joint-state-publisher工具 7.5 urdf 八、安装三方库 8.1 Eigen 8.2 yaml-cpp 8.3 matplotl…

系统学习Python——并发模型和异步编程:基础知识

分类目录:《系统学习Python》总目录 并行是并发的一种特殊情况。**所有并行系统都是并发的,但不是所有并发系统都是并行的。**在21世纪初,我们可以使用单核设备在GNU Linux上同时处理100个进程。一台拥有4个CPU核的现代笔记本计算机&#xff…

睿尔曼系列机器人——以创新驱动未来,重塑智能协作新生态(下)

在智能制造与人工智能深度融合的当下,机器人技术正经历从 “功能替代” 到 “价值共创” 的深刻跃迁。睿尔曼,作为全球超轻量仿人机械臂领域的先行者,始终秉持 “让机器人触手可及” 的使命,凭借底层技术的突破性进展,…

表征工程(Representation Engineering, RepE)

表征工程(Representation Engineering, RepE) 近年来,表征工程(Representation Engineering, RepE)在提升AI系统透明度和可控性方面取得了显著进展。 一、大模型可解释性与可控性的突破 核心论文:《Representation Engineering: A Top-Down Approach to AI Transparen…

国产ARM+FPGA工业开发平台——GM-3568JHF

一、引言 随着物联网和国产替代需求的快速发展,嵌入式系统面临计算性能与硬件灵活性的双重挑战。GM-3568JHF开发板基于国产“ARMFPGA”异构架构,结合瑞芯微RK3568J处理器与紫光同创Logos-2 FPGA芯片,支持国产自主操作系统,满足通…

RISCV Linux 虚拟内存精讲系列一 Sv39

笔者认为,Linux 操作系统(Operating System)最核心的机制是虚拟内存(Virtual Memory)。因为,操作系统主要作用是将硬件环境抽象起来,给在其中运行的应用(Applications)提…

【apply from: “$flutterRoot/packages/flutter_tools/gradle/flutter.gradle“作用】

这行代码的作用是将 Flutter 的 Gradle 构建脚本集成到 Android 项目中,具体细节如下:作用解析:引入 Flutter 构建逻辑 flutter.gradle 是 Flutter SDK 的核心构建脚本,它负责: 编译 Dart 代码为原生二进制文件&#x…

深入理解JavaScript设计模式之命令模式

深入理解JavaScript设计模式之命令模式 文章目录深入理解JavaScript设计模式之命令模式定义简单命令模式组合命令模式使用命令模式实现文本编辑器目标关键类说明实现的效果交互逻辑流程所有代码:总结定义 命令模式也是设计模式种相对于变焦简单容易理解的一种设计模…

CSS 网页布局:从基础到进阶

CSS 网页布局:从基础到进阶 引言 随着互联网的飞速发展,网页设计已经成为了一个不可或缺的领域。CSS(层叠样式表)作为网页设计中的关键工具,用于控制网页元素的样式和布局。本文将为您全面解析CSS网页布局,…

【人工智能】大语言模型(LLM) NLP

大语言模型(LLM)& NLP1.大语言模型(LLM)1.1 一句话解释1.2 更形象的比喻1.3 为什么叫 “大” 模型1.4 它能做什么1.5 现实中的例子2.对比 NLP2.1 用 “汽车进化” 比喻 NLP → LLM2.2 为什么说 LLM 属于 NLP2.3 LLM 的 “革命…

Unity HDRP + Azure IoT 的 Python 后端实现与集成方案

Unity HDRP Azure IoT 的 Python 后端实现与集成方案 虽然Unity HDRP本身使用C#开发,但我们可以构建Python后端服务支持物联网系统,并与Unity引擎深度集成。以下是完整的实现方案: 系统架构 #mermaid-svg-qCDb0g9Ik287Cg8X {font-family:&qu…

小黑黑日常积累大模型prompt句式2:【以段落的形式输出,不分点列举】【如果没有相关内容则不输出】【可读性强】【输出格式规范】

以段落的形式输出,不分点列举 每个标题下直接接续段落内容,不编号、不分点。......标题下直接接续段落内容,不继续进行分点列举。如果没有相关内容则不输出 若某一部分无法从原文中提取有效信息,则跳过该部分内容,不做…

React Native 基础组件详解<一>

一、Text组件 1)numberOfLines:显示行数 2)ellipsizeMode:超出隐藏的位置 clip->裁掉 head/middle/ tail->点的位置 3)selectable: 是否可以选中 4)selectionColor:选中后的颜色 5&#…