活动介绍

Java编程中的作用域、遮蔽与访问控制

立即解锁
发布时间: 2025-08-18 02:21:28 阅读量: 2 订阅数: 16
### Java 编程中的作用域、遮蔽与访问控制 #### 1. 遮蔽(Obscuring) 在 Java 编程里,声明可能会被隐藏、遮蔽或模糊化。模糊化与隐藏和遮蔽不同,它涉及不同类型的实体,主要是包名和类型名可能被模糊。具体有以下三种情况: - 变量名模糊包名 - 类型名模糊包名 - 变量名模糊类型名 由于 Java 命名约定,后两种情况比较少见,所以这里主要讨论变量名模糊包名的情况。 模糊化基于 JLS 中对上下文歧义名称的重新分类。有时候,名称的语法分类并不完美,在某些上下文中,名称可能指代不同类型的实体,造成歧义。例如下面的代码: ```java package test; //test 是一个包 class x { static final String length = "test is a package name"; static Widget test = new Widget(); //test 是一个变量 public static void main(String[] args) { int[] x = new int[10]; int length = 0; System.out.println(test.x.length); //What is test? } static class test { //test 是一个类型 static String[] x = { "test is a", " type name" }; } } class Widget { String[] x = { "test is a variable name" }; } ``` 在这个例子中,`test` 可能是变量、类型或包名。执行这个程序,最初会打印 `1`,这是 `Widget` 类中 `x` 数组的长度。如果删除 `Widget` 类型的 `test` 变量声明,程序会打印 `2`,即嵌套顶级 `test` 类中 `x` 数组的长度。若再删除该类的声明,程序会打印 `test is a package name`。 还有一个涉及方法调用表达式的例子: ```java class Test { public static void main(String[] args) { String Widget = "Test is a variable name"; System.out.println(Widget.length()); } } class Widget { static int length() { return 0; } } ``` 执行这个程序会打印 `23`,即 `Widget` 字符串的长度。在这两个例子中,编译器会优先将歧义名称解析为变量,而不是类型或包名。 当包名被模糊时,JLS 给出了两条建议: - 如果包名被字段声明模糊,可以使用导入声明来引入该包中声明的类型名。 - 如果包名被参数或局部变量声明模糊,可以更改参数或局部变量的名称,而不影响其他代码。 同时,JLS 还警告,由两到三个小写字母组成的局部变量或参数名不应与唯一包名的第一个组件(如常见的顶级域名)冲突,像 `com`、`net`、`org` 等,应避免将这些作为局部变量或参数名。 #### 2. 可观察的编译单元和包 一个存储在德国或日本软盘上名为 `fubar` 的包,显然不能被美国的开发者使用。最初的 JLS 从作用域和可访问性方面解决这个问题: - 顶级包名的作用域由主机系统的约定决定,包名不会隐藏其他名称。 - 对包成员的访问是否允许由主机系统决定,`java` 包及其标准子包 `lang`、`io` 和 `util` 应始终可访问。 在第二版 JLS 中,包(和编译单元)现在分为可观察和不可观察。一个包可观察的条件如下: - 包含该包声明的编译单元是可观察的。 - 该包的子包是可观察的。 由此可以得出,`java`、`java.lang` 和 `java.io` 包始终是可观察的。可观察顶级包声明的作用域是所有可观察的编译单元,不可观察的包声明不在作用域内,子包声明也不在作用域内。 #### 3. 限定访问(Qualified Access) JLS 中访问的定义存在两个问题。首先,该定义没有考虑构造函数。访问与作用域是不同的概念,访问指定了程序文本中可以通过限定名称、字段访问表达式或方法调用表达式(方法不是由简单名称指定)引用已声明实体的部分。 合格访问的定义与访问的定义相似,限定名称是访问包和引用类型成员的一种方式,相关的访问方式还包括字段访问表达式和方法调用表达式。这三种访问方式在语法上相似,都有一个 “.” 符号,前面是包、类型或具有类型的表达式的指示,后面是命名包或类型成员的标识符,它们统称为限定访问构造。 实际上,构造函数是第四种访问方式,但 JLS 在访问定义中遗漏了这一点。访问控制适用于限定访问以及通过类实例创建表达式和显式构造函数调用对构造函数的调用,具体包括以下方面: 1. 任何类型名的使用(类型特权) 2. 构造函数调用(实例化),包括: - 类实例创建表达式 - 使用 `super` 关键字的显式构造函数调用 - `java.lang.Class` 中的 `newInstance()` 方法 3. 字段访问和方法调用表达式(访问对象的实现) 在导入类型时,通常使用简单类型名,而 JLS 中限定访问的定义没有涵盖这种最常见的访问方式。为了解决这个问题,引入了 “类型特权” 这个术语,它定义为任何类型名的使用,不区分简单名称和限定名称。类型特权进一步分为类类型特权和接口类型特权,由于接口类型不能实例化且其所有成员都是隐式公共的,所以接口类型特权与访问控制讨论无关。只有完全限定的类型名包含包名,才能 “访问” 包的成员。 #### 4. 访问控制 Java 中有三种访问修饰符:
corwn 最低0.47元/天 解锁专栏
赠100次下载
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

李_涛

知名公司架构师
拥有多年在大型科技公司的工作经验,曾在多个大厂担任技术主管和架构师一职。擅长设计和开发高效稳定的后端系统,熟练掌握多种后端开发语言和框架,包括Java、Python、Spring、Django等。精通关系型数据库和NoSQL数据库的设计和优化,能够有效地处理海量数据和复杂查询。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

【飞机缺陷检测模型压缩加速】:减小模型尺寸,加速推理过程

![【飞机缺陷检测模型压缩加速】:减小模型尺寸,加速推理过程](https://static.mianbaoban-assets.eet-china.com/xinyu-images/MBXY-CR-c3b4ad4ba4139993bf9baedd09c1c762.png) # 摘要 随着深度学习在飞机缺陷检测领域应用的增多,模型压缩和加速技术成为提升检测效率的关键。本文首先介绍了深度学习模型压缩的理论基础,包括其重要性和技术分类,随后探讨了模型加速技术实践,如深度学习框架的选择和模型剪枝、量化实践。通过应用案例分析,展示了模型压缩加速技术在实际飞机缺陷检测中的应用及其带来的性能改善。最后,

【多源数据整合王】:DayDreamInGIS_Geometry在不同GIS格式中的转换技巧,轻松转换

![【多源数据整合王】:DayDreamInGIS_Geometry在不同GIS格式中的转换技巧,轻松转换](https://community.esri.com/t5/image/serverpage/image-id/26124i748BE03C6A81111E?v=v2) # 摘要 本论文详细介绍了DayDreamInGIS_Geometry这一GIS数据处理工具,阐述了其核心功能以及与GIS数据格式转换相关的理论基础。通过分析不同的GIS数据格式,并提供详尽的转换技巧和实践应用案例,本文旨在指导用户高效地进行数据格式转换,并解决转换过程中遇到的问题。文中还探讨了转换过程中的高级技巧、

【心电信号情绪识别在虚拟现实中的应用研究】:探索虚拟世界中的情绪分析

![【心电信号情绪识别在虚拟现实中的应用研究】:探索虚拟世界中的情绪分析](https://www.radsport-rennrad.de/wp-content/uploads/2018/10/leistungstest-radsport.jpg) # 摘要 情绪识别技术与虚拟现实的结合为沉浸式体验带来了新的可能性。本文首先概述了情绪识别与虚拟现实的基本概念,接着深入探讨了心电信号(ECG)的理论基础,包括其产生原理、采集方法和数据处理技术。文中详细分析了心电信号情绪识别算法,并研究了机器学习和深度学习在情绪识别中的应用。此外,本文还探讨了心电信号情绪识别技术在虚拟现实中的实际应用,并通过具

【C#数据绑定高级教程】:深入ListView数据源绑定,解锁数据处理新技能

![技术专有名词:ListView](https://androidknowledge.com/wp-content/uploads/2023/01/customlistthumb-1024x576.png) # 摘要 随着应用程序开发的复杂性增加,数据绑定技术在C#开发中扮演了关键角色,尤其在UI组件如ListView控件中。本文从基础到高级技巧,全面介绍了C#数据绑定的概念、原理及应用。首先概述了C#中数据绑定的基本概念和ListView控件的基础结构,然后深入探讨了数据源绑定的实战技巧,包括绑定简单和复杂数据源、数据源更新同步等。此外,文章还涉及了高级技巧,如数据模板自定义渲染、选中项

地震正演中的边界效应分析:科学设置边界条件的深度解析

# 摘要 地震正演模拟是研究地震波在地下介质中传播规律的一种重要方法,而边界效应是影响其精度的关键因素之一。本文系统分析了边界效应的理论基础,包括边界条件的数学描述及其物理意义,并探讨了边界效应的数值模拟方法。第二章详细讨论了不同边界条件类型对模拟精度的影响,以及如何进行科学设置和优化以提高模拟精度。第四章通过案例分析,比较了不同边界条件的应用效果,并展示了边界条件优化的实际应用情况。第五章讨论了边界效应在地震工程中的应用,并提供了针对性的工程解决方案。最后,第六章对未来研究方向与展望进行了深入的探讨,提出理论深化和技术创新的建议。本文为地震正演模拟提供了全面的边界效应分析框架,并为实际应用提

【OpenCvSharp入门指南】:5天掌握计算机视觉核心基础

![【OpenCvSharp入门指南】:5天掌握计算机视觉核心基础](https://dezyre.gumlet.io/images/blog/opencv-python/Code_for_face_detection_using_the_OpenCV_Python_Library.png?w=376&dpr=2.6) # 摘要 本文系统地介绍了OpenCvSharp库在图像和视频处理领域的应用,包括基本的图像加载、显示、像素操作、几何变换,以及进阶的边缘检测、图像分割、特征检测和匹配、滤波和去噪技术。文章还探讨了视频处理技术,如视频读取、写入、运动检测与跟踪,以及人体姿态估计和行为分析。通

物联网技术:共享电动车连接与控制的未来趋势

![物联网技术:共享电动车连接与控制的未来趋势](https://read.nxtbook.com/ieee/potentials/january_february_2020/assets/4cf66356268e356a72e7e1d0d1ae0d88.jpg) # 摘要 本文综述了物联网技术在共享电动车领域的应用,探讨了核心的物联网连接技术、控制技术、安全机制、网络架构设计以及实践案例。文章首先介绍了物联网技术及其在共享电动车中的应用概况,接着深入分析了物联网通信协议的选择、安全机制、网络架构设计。第三章围绕共享电动车的控制技术,讨论了智能控制系统原理、远程控制技术以及自动调度与充电管理

手机Modem协议在网络环境下的表现:分析与优化之道

![手机Modem协议开发快速上手.docx](https://img-blog.csdnimg.cn/0b64ecd8ef6b4f50a190aadb6e17f838.JPG?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATlVBQeiInOWTpQ==,size_20,color_FFFFFF,t_70,g_se,x_16) # 摘要 Modem协议在网络通信中扮演着至关重要的角色,它不仅定义了数据传输的基础结构,还涉及到信号调制、通信流程及错误检测与纠正机制。本文首先介

【仿真模型数字化转换】:从模拟到数字的精准与效率提升

![【仿真模型数字化转换】:从模拟到数字的精准与效率提升](https://img-blog.csdnimg.cn/42826d38e43b44bc906b69e92fa19d1b.png) # 摘要 本文全面介绍了仿真模型数字化转换的关键概念、理论基础、技术框架及其在实践中的应用流程。通过对数字化转换过程中的基本理论、关键技术、工具和平台的深入探讨,文章进一步阐述了在工程和科学研究领域中仿真模型的应用案例。此外,文中还提出了数字化转换过程中的性能优化策略,包括性能评估方法和优化策略与方法,并讨论了数字化转换面临的挑战、未来发展趋势和对行业的长远意义。本文旨在为专业人士提供一份关于仿真模型数