- 浏览: 81119 次
- 性别:
- 来自: 北京
最近待业在家,遂有空重新读了thinking in Java这本书,发现工作了几年,对访问控制有了更深的理解,这里专谈private关键字,想了一个例子,以记录自己的理解。
访问控制的原因有二:
1.避免客户端程序员触及他们不应该触及的部分
2.允许库设计者改变类内部工作方式而不担心影响到客户端程序员
下面分别对这两点进行解释,请看下面的代码。
在上面这个类,有连个地方解释,一是age属性,二是validateAge方法。
先说age属性,如它是public,则会导致客户端程序员随意修改age的值,如果是多线程访问这个对象,还无法线程同步这个对象,这样是非常危险的,这个时候再想修改访问权限就是一个灾难。
再说validateAge方法,首先这个方法是对象内部的细节,不应该暴露给客户端程序员。
其次如果它是public,并且不在setAge方法里调用,而是让客户端程序员选择调用,这样不管注释文档写的多好,都把决定权留给客户端程序员。当想做一些改变比如去掉这个验证或者改变这个验证的接口,就会同样影响遍布整个系统。
所以设计一个类一定要想好它的对外接口是非常重要的。
访问控制的原因有二:
1.避免客户端程序员触及他们不应该触及的部分
2.允许库设计者改变类内部工作方式而不担心影响到客户端程序员
下面分别对这两点进行解释,请看下面的代码。
public class Person { private int age; public void setAge(int age) throws Exception { if(!validateAge(age)) throw new IllegalArgumentException("Illegal age!"); this.age=age; } private boolean validateAge(int age) { if(age<0||age>200) return false; return true; } }
在上面这个类,有连个地方解释,一是age属性,二是validateAge方法。
先说age属性,如它是public,则会导致客户端程序员随意修改age的值,如果是多线程访问这个对象,还无法线程同步这个对象,这样是非常危险的,这个时候再想修改访问权限就是一个灾难。
再说validateAge方法,首先这个方法是对象内部的细节,不应该暴露给客户端程序员。
其次如果它是public,并且不在setAge方法里调用,而是让客户端程序员选择调用,这样不管注释文档写的多好,都把决定权留给客户端程序员。当想做一些改变比如去掉这个验证或者改变这个验证的接口,就会同样影响遍布整个系统。
所以设计一个类一定要想好它的对外接口是非常重要的。
发表评论
-
组合or继承
2013-05-27 11:54 827到底使用组合还是继承是每本讲设计的资料里都要讨论一番的话题 ... -
XML 系列教程
2012-05-06 12:50 588http://www.w3school.com.cn/x.as ... -
面向接口编程详解
2012-04-19 21:42 1108面向接口编程详解 2009-04-23 作者:张洋 来源: ... -
浅析java回调机制与观察者模式
2012-04-10 17:23 18001 java回调机制: 首先解 ... -
Java程序设计之-复合优先于继承
2012-04-03 10:33 1445组合 通过创建一个由其他对象组合的对象来获得新功能的重用方法 ... -
java学习之路(转)
2012-03-30 15:01 765(一) 从事软件 ... -
java内部类
2012-03-28 16:26 858一、 定义 放在一个类的内部的类我们就叫内部类。 二、 作用 ... -
为什么匿名内部类只能访问其所在方法中的final变量(转)
2012-03-28 15:45 1035(1).所谓“局部内部类”就是在对象的方法成员内部定义的类。而 ... -
Java访问权限修饰符(转)
2012-03-28 11:20 10621、Class类的访问权限: ... -
【java】好书推荐
2012-03-26 15:31 1440Java软件架构师所要需的东西 作为Java程序员来说,最痛 ... -
Java绝对好文,转载的!(转载)
2012-03-25 14:45 793想来学习Java也有两个年头了,永远不敢说多么精通,但也想谈谈 ... -
理解java动态加载机制
2012-03-20 00:01 10081.java动态性 java是一种 ... -
热部署、热加载
2012-03-19 14:14 3660不重启Tomcat有两种方式:热部署、热加载 热部署:容 ... -
Registry of Singleton 模式(转)
2012-03-06 10:01 767考虑使用 Singleton 模式 时拥有子类别的问题,在Si ... -
单例模式(Singleton Pattern)
2012-03-05 20:40 6806.单例模式(Singleton Pattern) 前面说提到 ... -
java.util.concurrent 多线程框架
2012-02-26 16:15 760http://daoger.iteye.com/blog/14 ... -
线程----BlockingQueue (转),java
2012-02-26 13:50 794/** 本例介绍一个 ... -
关于多个线程同时调用单例模式的对象,该对象中方法的局部变量是否会受多个线程的影响
2012-02-12 12:16 2907对于那些会以多线程运行的单例类,例如Web应用中的Servle ... -
Java线程同步机制synchronized关键字的理解
2011-12-25 14:34 736由于同一进程的多个线 ... -
synchronized与static synchronized 的区别
2011-12-24 22:48 6491.synchronized与static synchroni ...
相关推荐
java的访问控制符分为两类:类的访问控制符,属性和方法的访问控制符。 1. 类的访问控制符有两种:public, default(默认的,什么都不用写) default是包内访问控制符。 当然对于内部类还可以有static修饰,...
本文档介绍了Java中的访问控制权限修饰符。它解释了public、private、protected和默认访问级别的含义和用法,以及它们在类、接口、成员变量和方法中的应用。 能学到什么 通过阅读本文档,您将学习以下内容: 不同...
java的控制符可分为两大类,一种是访问控制符,另一种是非访问控制符。我们上文提到的public,private便是访问控制符了。 访问控制符:访问控制符的作用是说明被声明的内容(类、属性、方法和构造方法)的访问权限 ...
获得需要的访问控制。 A .public B .no modifier C .protected D .private 【试题分析】Java 有4 种访问类型,分别为public 、protected 、default 和private 。其中public 变量 可以被所有的外部类访问,而...
文章目录前言特性中的继承访问控制符成员访问控制符private默认protectedpublic类的访问控制符非访问控制符static静态域静态方法finalfinal类final方法final字段和局部变量main()方法 你好,我是goldsun。 你有想法...
主要介绍了浅析Java中的访问控制权限,在Java中,提供了四种访问权限控制,分别是默认访问权限、public、private以及protected,感兴趣的小伙伴们可以参考一下
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
编写四个类A、B、C、D,其中类A、B在同一个包中,类C、D在另一个包中,且类C为类A的子类,通过这四个类来测试private,protected,public和friendly四个访问权限的区别。实现栈的基本操作。实现计算器。
private 关键字是访问控制修饰符,可以应用于类、方法或字段(在类中声明的变量)。 只能在声明private(内部)类、方法或字段的类中引用这些类、方法或字段。在类的外部或者对于子类而言,它们是不可见的。 所有类...
)封装的特点: 主要讲述封装与暴露 2)访问控制符 主要讲述private、不写、protected、public 3)指定原则:
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...
5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...
10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...
5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...
5.2 Java访问指示符 5.2.1 “友好的” 5.2.2 public:接口访问 5.2.3 private:不能接触 5.2.4 protected:“友好的一种” 5.3 接口与实现 5.4 类访问 5.5 总结 5.6 练习 第6章 类再生 6.1 合成的语法 6.2 继承的...
Java常见的访问控制修饰符: Public :到处都可以访问,不受包和父子类关系的限制 默认: 只在同包内可以访问,不受父子类关系限制 Protected: 不同包的子类和同包的类中访问,这是一种继承访问。 Private...