- 浏览: 83826 次
- 性别:
- 来自: 北京
最近待业在家,遂有空重新读了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 864到底使用组合还是继承是每本讲设计的资料里都要讨论一番的话题 ... -
XML 系列教程
2012-05-06 12:50 612http://www.w3school.com.cn/x.as ... -
面向接口编程详解
2012-04-19 21:42 1140面向接口编程详解 2009-04-23 作者:张洋 来源: ... -
浅析java回调机制与观察者模式
2012-04-10 17:23 18621 java回调机制: 首先解 ... -
Java程序设计之-复合优先于继承
2012-04-03 10:33 1489组合 通过创建一个由其他对象组合的对象来获得新功能的重用方法 ... -
java学习之路(转)
2012-03-30 15:01 816(一) 从事软件 ... -
java内部类
2012-03-28 16:26 902一、 定义 放在一个类的内部的类我们就叫内部类。 二、 作用 ... -
为什么匿名内部类只能访问其所在方法中的final变量(转)
2012-03-28 15:45 1094(1).所谓“局部内部类”就是在对象的方法成员内部定义的类。而 ... -
Java访问权限修饰符(转)
2012-03-28 11:20 11071、Class类的访问权限: ... -
【java】好书推荐
2012-03-26 15:31 1465Java软件架构师所要需的东西 作为Java程序员来说,最痛 ... -
Java绝对好文,转载的!(转载)
2012-03-25 14:45 822想来学习Java也有两个年头了,永远不敢说多么精通,但也想谈谈 ... -
理解java动态加载机制
2012-03-20 00:01 10371.java动态性 java是一种 ... -
热部署、热加载
2012-03-19 14:14 3694不重启Tomcat有两种方式:热部署、热加载 热部署:容 ... -
Registry of Singleton 模式(转)
2012-03-06 10:01 796考虑使用 Singleton 模式 时拥有子类别的问题,在Si ... -
单例模式(Singleton Pattern)
2012-03-05 20:40 7026.单例模式(Singleton Pattern) 前面说提到 ... -
java.util.concurrent 多线程框架
2012-02-26 16:15 804http://daoger.iteye.com/blog/14 ... -
线程----BlockingQueue (转),java
2012-02-26 13:50 818/** 本例介绍一个 ... -
关于多个线程同时调用单例模式的对象,该对象中方法的局部变量是否会受多个线程的影响
2012-02-12 12:16 2956对于那些会以多线程运行的单例类,例如Web应用中的Servle ... -
Java线程同步机制synchronized关键字的理解
2011-12-25 14:34 785由于同一进程的多个线 ... -
synchronized与static synchronized 的区别
2011-12-24 22:48 6781.synchronized与static synchroni ...
相关推荐
在提供的"Java访问权限控制源代码"中,可能包含示例类,这些类展示了如何使用不同的访问修饰符来控制类、变量和方法的可见性。`readme.md`文件可能包含了代码的介绍和使用指南。 通过学习和理解Java的访问权限控制...
总之,Java的JVM通过访问控制器的栈校验机制确保了代码的类型安全和访问控制,这是Java平台可靠性的重要基石。理解这一机制对于深入掌握JVM的工作原理和优化Java代码具有重要意义。通过学习和实践,开发者能够编写出...
Java 访问修饰符是 Java 编程语言中的一种重要机制,它控制着类、方法和变量的访问权限。访问修饰符可以分为四种:public、protected、private 和缺省(无访问修饰符)。 public 访问修饰符 public 访问修饰符是最...
总结,"实例8访问控制"是一个关于Java访问控制的关键实践案例,通过实际编程加深了对访问控制的理解,帮助开发者掌握如何有效地控制代码的可见性和访问权限,以实现良好的封装性和模块化设计。通过这个实例,我们...
Java提供了四种访问控制修饰符,它们分别是:public、private、protected和默认(无修饰符)。 1. **public**:公共访问控制修饰符,表示任何地方的任何类都可以访问被其修饰的成员。如果一个类声明为public,那么...
这个"Java访问权限控制源代码.zip"压缩包可能包含了示例代码,用于演示Java中的不同访问修饰符如何工作以及如何实施访问控制。现在,我们将深入探讨Java中的访问权限控制机制。 首先,Java提供了四种访问级别: 1....
在Java编程语言中,访问权限控制是至关重要的概念,它决定了类、接口、字段和方法的可见性。这种控制机制确保了代码的封装性和安全性,防止未经授权的访问和操作。以下是对这一主题的详细探讨: 1. 访问修饰符: ...
在Java编程语言中,访问权限控制是至关重要的一个部分,它确保了代码的封装性和安全性。本文将深入探讨Java中的访问权限验证,包括其概念、种类以及如何在实践中应用。 **一、访问权限概述** Java提供了四种不同的...
本资源"Java访问权限控制源代码.rar"可能包含了一系列示例,用于展示如何在Java中应用不同的访问修饰符,以及它们如何影响类、方法和变量的可见性。现在,我们将深入探讨Java的访问权限控制。 1. 访问修饰符概述: ...
JAVA 访问修饰符是 JAVA 语言中的一种基本概念,它控制着类、方法、变量的访问权限,帮助开发者更好地组织和管理代码。根据 JAVA 访问修饰符的特性和使用范围,我们可以将其分为三类:修饰符类的访问修饰符、属性的...
java的访问控制符分为两类:类的访问控制符,属性和方法的访问控制符。 1. 类的访问控制符有两种:public, default(默认的,什么都不用写) default是包内访问控制符。 当然对于内部类还可以有static修饰,...
Java 访问修饰符(public、protected、默认、private) Java 中的访问修饰符是 Java 语言中一种基本概念,用于控制类、方法、变量、构造方法等成员的访问权限。 Java 中有四种访问修饰符:public、protected、默认...
通过运行和分析这个案例,你可以更好地理解Java访问控制的实际应用。 通过深入学习和实践这个Java开发小案例,你将掌握如何在实际项目中运用访问权限控制,提升代码的安全性和可维护性。对于初学者来说,这是一个...
java 访问权限修饰符详解 在 Java 语言中,访问权限修饰符是指用来限定类、成员变量和方法的可访问范围的关键字。访问权限修饰符分为四种:public、protected、friendly 和 private。每种修饰符都有其特定的访问...
例如,Python和C++等其他语言也有类似的访问控制机制,但具体规则和实现有所不同,这也反映了不同语言的设计哲学。 总结来说,Java中的访问权限控制是实现面向对象编程的重要组成部分,它在保护数据、支持封装、...
- private字段和方法只在定义它们的类内部可用,防止外部直接访问,强制使用getters和setters进行访问控制。 - protected字段和方法适用于子类,允许子类继承并访问。 4. 包访问: 同一包内的类可以互相访问未...
这个"基于Java的源码-访问权限控制源代码.zip"文件很可能包含了一些示例,用于演示Java中的访问修饰符如何工作以及如何实现有效的访问控制。让我们深入探讨一下Java中的访问权限控制。 1. 访问修饰符: - **public...
这个压缩包“基于java的访问权限控制源代码.zip”很可能包含了一系列示例,用于演示如何在Java中实现不同级别的访问控制,以便管理类、方法和变量的可见性和可访问性。 在Java中,访问修饰符主要有四种:`public`、...