java 方法权限_Java控制访问权限的方法

这篇博客主要用来介绍Java中的访问权限.

引入访问控制权限

我们都知道,一个通用类库(如:JDK)开发出来的目的是让普通开发者重用以节省开发时间与精力,但是类库的设计不可能在刚开始就尽善尽美,普通开发者在对类库的使用过程中,总能发现很多由于设计不当所出现的问题,这时,类库开发者就需要对类库进行重构。

而类库的更新不能影响到消费者程序的执行,这就引出了面向对象设计的一个基本问题:类库开发者如何区分可以变动的部分和不可以变动的部分?

Java这门语言在设计的时候吸收了很多前人的经验,所以这个问题也被抛了出来,而它解决这个问题的方法是通过访问修饰符,即限制普通开发者访问的部分。

对于访问权限成型的一些思考

在设计时很容易想到使用二分,即将访问权限分为可以访问与不能访问两种,也就是引入public与private。如果域被public修饰,说明这个部分可以被任何人访问到;如果域被private修饰,则除了当前类其他人都不能访问。但这样又会出现一些问题,即使用绝对的二分产生的副作用太大,被private修饰的域连类库开发者本身都无法访问了。

Java在引入包进行命名空间的管理之后,就有了一种较为优秀的解决方法,即引入friendly与protected,对于具有friendly访问权限的域,只有同一个包内的类可以访问;对于具有protected访问权限的域,只有此域所在类的子类或与此类在同一个包内的类可以访问,这样就划分了较为清楚的界限。

一般来说,用户自己写的类会被划分到自己特有的包中,这种情况下,这种访问权限控制的方式对于类库开发者与用户来说是正确的。但是,并不是所有的用户都会遵守规则,如果用户恶意使用类库开发者使用的包,还是会产生权限泄露,即用户访问到了类库开发者隐藏的东西。对于这种情况有什么解决方法么?

个人认为:这个问题根本不是问题….因为权限控制实际上是一种约定,这种约定的内涵是:在使用双方都遵守的情况下,双方都可以得到较满意的答案(即:类库开发者拥有重构的  对于类库开发者来说唯一的约束是那些自己公开的API。也就是说对于已经公开的API,也许会有用户使用,这种情况下一定不能更改API以避免影响用户已经开发过的Java应用程序(保证向下兼容),那么对于类库开发者认为用户一定无法访问的部分就可以随便改了,在用户自己违反了约定的情况下,他的权益就无法也无需得到保证。

Java访问权限关键字介绍

上面说到Java中分了四种访问权限,一表胜千言,下面是详细的介绍。关键字含义类内部本包子类外部包public公有的√√√√

protected受保护的√√√×

default缺省(包访问权限)√√××

private私有的√×××

一些需要注意的小问题Java的权限控制只停留在编译期间。它不会在编译生成的class文件中留下任何的痕迹,只在编译的时候进行访问控制的检查。因此,通过反射可以访问任何包下任何类中的成员,包括私有成员。

类的访问修饰符。对于一个非内部类来说,因为它直属于包而不属于任何一个类,所以只有包访问权限与公有权限对它来说才有意义。

也就是说,只能用public或者默认权限来修饰非内部类。

对于一个内部类来说,它直属于一个类,因此四种权限都可以对其起作用。

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

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

相关文章

java套接字客户端_使用Java从客户端套接字读取数据(Read data from a client socket in Java)...

使用Java从客户端套接字读取数据(Read data from a client socket in Java)我编写了从客户端套接字发送/接收数据的代码。 发送数据步骤已成功完成,但是当我想从套接字读取数据时, readLine()方法阻止程序,而没有要读取的数据。这是我的代码&…

xml动态生成java_从XML文档动态生成Java类

考虑这种情况:我有一个名为person.xml的XML文件,其中包含以下数据.MrFoo28如果我想将这个XML读入Java对象,我将创建一个名为PersonBean的Java bean(使用属性的getter / setter):class Person{String name;int age;}我可以使用任何API来读取XML并填充Java…

java lpad oracle_Oracal的Lpad函数

2007-09-21 17:13 | pinty回复楼上,根据LEVEL的数决定输出“-”的个数,看下面的例子SELECT LEVEL, LPAD( ,2*(LEVEL - 1)) || lname "EMPLOYEE",emp_id, manager_emp_idFROM employeeSTART WITH emp_id 7839CONNECT BY NOCYCLE PRIOR emp_id …

用java输入学生姓名查询成绩_编写一个Java程序,提示用户输入学生数量,学生姓名和他们的成绩,并按照成绩的降序打印学生姓名...

importjava.util.Scanner;publicclassmyclass{publicstaticvoidmain(String[]args){ScannerinputnewScanner(System.in);System.out.print("请输入学生个数,学生姓名以及学生成绩");...import java.util.Scanner;public class myclass{public static void…

java对xml解析_Java中对xml的解析

// 1.通过DocumentBuilderFactor创建解析工厂DocumentBuilderFactory builderFactory DocumentBuilderFactory.newInstance();// 2.通过工厂获得解析器DocumentBuilder builder builderFactory.newDocumentBuilder();// 3.通过parser方法获取DocumentDocument document buil…

刻画小狗状态java_JAVA面向接口编程

JAVA面向接口编程小狗在不同环境条件下可能呈现不同的状态,小狗通过调用 cry()方法体现自己的当前的状 态。要求用接口封装小狗的状态。具体要求如下。• 编写一个接口 DogState,该接口有一个名字为 void showState()的方法。• 编写 Dog 类,…

java jdbc(mysql)驱动源码分析_JAVA JDBC(MySQL)驱动源码分析(二)

本文系转载,地址:http://blog.csdn.net/brilliancezhou/article/details/5425687上一篇中分析了Class.forName(“com.mysql.jdbc.Driver”)幕后所做的事情,也就是在Driver实现类中的静态块和构造函数,本篇主要来分析一下静态块的一…

java %3c%=a%%3e_跪求帮忙解析,急!!!

xml 这个参数的值,是被 urlencode 两次的东西。 php 不懂, Python 的话是用 urllib.unquote 就可以了。>>> s %3C%3Fxmlversion%3D%221.0%22encoding%3D%22gbk%22%3F%3E%253Ctask%253E%253Cuser%253E%253Coper%253Emod%253C%252Foper%253E%253…

java环境变量一闪而过_Java环境变量配置和Tomcat启动时cmd界面一闪而过问题

Java环境变量配置计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量中配置Java环境变量。配置JAVA_HOME,属于必配项,如果不配置,直接指定path路径利用工具可以进行Java项目开发,但是后期使用Tomcat开发会出现问…

ubuntu启动php-fpm_ubuntu安装php-fpm+xdebug

一、安装程序包1、sudo apt-get install php5-dev2、sudo apt-get install php5-xdebug二、修改php.ini配置文件; 修改/etc/php5/fpm/php.ini或在增加文件/etc/init.d/php5/conf.d/xdebug.ini; configuration for php Xdebug module;extentionxdebug.so[xdebug]zend_extension/…

php 图片合成,PHP中多张图片合成一张图片例子

今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成,水印,九宫格等需求下使用到类似这样的图片合成效果,下面一起来看看例子吧。今天分享一段PHP中多张图片合成一张图片的代码实现,我们可以在图片合成&#xff…

php的cms是什么意思,phpcms是什么

phpcms是一款具备文章、下载、图片、分类信息、影视、商城、采集、财务等众多功能的强大、易用、可扩展的优秀网站管理软件;该软件采用模块化开发,支持多种分类方式,使其可方便实现个性化网站的设计、开发与维护。phpcms是一款具备文章、下载…

php5.4源码下载,WordPress v5.4.2官方正式版源码下载

源码说明WordPress 5.4.2 正式版发布了,此安全和维护版本具有23个修复和增强功能。此外,它还添加了许多安全修复程序-请参阅下面的列表。这些错误会影响WordPress 5.4.1和更早版本。5.4.2版修复了这些问题,因此您需要升级。如果尚未更新到5.4…

前端vue后端java,Vue调用后端java接口的实例代码_亦心_前端开发者

前段时间 做了个学校的春萌项目,其中用到先上后端接口代码:package controller;import net.sf.json.JSONObject;import util.DBUtil;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Http…

边缘检测滤波matlab,卷积滤波器与边缘检测

频率:对于声音,频率实际上是指声波振荡的速度高低频率高频图像是强度变化很大的图像。并且亮度级别从一个像素到下一个像素快速变化。低频图像可以是亮度相对均匀或变化非常慢的图像。这是一个例子中最容易看到的。大多数图像都有高频和低频成分。在上图…

php 读取 stl 文件,科学网—[转载]【源码】读取ASCII STL文件的STLReader - 刘春静的博文...

读取包含顶点和面的ASCII STL文件,并将其构造为矩阵“顶点”、“颜色”和“面”。之后,使用各小模块在Matlab上建立模型。Read ASCII STL file which contains vertexes and faces and structure it to matrixes "vertexes", "colors&quo…

1核1g服务器php,虚拟主机1核1g什么意思

虚拟主机由于用户数量庞大,因此每个虚拟主机需要足够高的配置才能支持这么多网站同时架设、运行,如上面所说的1核,完全没法带动。比如那么我们平常怎么知道自己的虚拟主机配置是怎样的呢?可以直接咨询下面我们来看下西部数码虚拟主…

matlab生成西门子plc源文件,西门子PLC如何把DB快做成源文件

打开db块后在菜单option下面有个customize,弹出的点选项sources那里就可以找到生成源文件的按钮。还原---源文件是保存在sources下面,你可以打开你的源文件并编译即可生成源文件可以导出成awl文件,可以在其他的环境下改写(比如记事本、excel等…

dsm php,docker dsm是什么?

docker dsm是什么?docker dsm是:从DSM6.0开始如果装了docker的话可以看到下面的图:上图可以看到创建了一个新的DSM,名字为DDSM1,经试验功能和正式DSM一模一样。同时白裙一样可以QuickConnect。然后用Putty登录上去&…

php 5.6 文档,文件存储 | 进阶系列 | Laravel 5.6 中文文档

文件存储由 学院君 创建于3年前, 最后更新于 1年前版本号 #231608 views3 likes0 collects简介Laravel 基于 Frank de Jonge 开发的 PHP 包 Flysystem 提供了强大的文件系统抽象层。Laravel 集成 Flysystem 以便使用不同驱动简化对文件系统的操作,这些驱动包括本地文…