黑马程序员技术交流社区

标题: javaBean的一个疑问 [打印本页]

作者: 涂金哲    时间: 2012-7-31 15:25
标题: javaBean的一个疑问
JavaBean是一种组件,可被复用。如果T为类型 N为属性名称
Public T getN()
Public void setNT arg
这是javaBean的书写格式。在javaBeanAPI中提供了一些类和方法  如:PropertyDescription类的实例可以描述Bean的属性。假设我们知道了某个javaBean的成员属性的名称,运用反射机制那么我们就可以通过该类提供的getReadMethod()方法读取到这个属性名称对应的值,还可以通过getWriteMethod()方法修改该属性的值。JavaBean中的成员属性一般都是私有的。也是一种封装,而它对外提供的这些方法却能访和修改,这样对javaBean的封装是一种破坏吗?


作者: 陈红建    时间: 2012-7-31 16:03
本帖最后由 陈红建 于 2012-7-31 16:22 编辑
  1. javaBean只是书写规范 但是有了javaBean就可以灵活的运用反射来修改某些java类
  2. 对于封装性来说 可以用 final来 保证 类的封装性。即使你在封装 他也还是要对外提供访问的
  3. 即使你的 成员变量是私有的 也可以用反射来修改的
  4. //标准的javabean编写规范
  5. public class Person //javabean类必须是共有的
  6. {
  7.         private String name;//成员必须是私有的
  8.         private int     age;
  9.         public Person(){}//必须有一个公共的无参数的构造函数

  10.         //具有get 和set方法
  11.         public int getAge()
  12.         {
  13.                 return age;
  14.         }
  15.         public String getName()
  16.         {
  17.                 return name;
  18.         }
  19.         public void setAge(int age)
  20.         {
  21.                  this.age=age;
  22.         }
  23.         public void setName(String name)
  24.         {
  25.                  this.name=name;
  26.         }

  27. }
复制代码

作者: 侯宪博    时间: 2012-8-1 13:06
这个问题很多人都思考过,很多人感觉这是个矛盾
以下是我自己的总结
首先要想我们为什么封装
是为了程序的安全、健壮性、方便等
一是某些功能我们没必要暴露出去
就拿电脑主机来举例子
你想想要是电脑上直接暴露出来cpu有必要吗
没这个必要,因为我们不需要知道这个cpu我们照样能用
cpu就相当于私有的属性或者方法
不暴露出来一是没必要
二是有可能出现安全问题
但是不暴露出来不代表我们就不能访问了
假如cpu坏了,我们一样可以给他换一块
封装就相当于是为了使用起来方便和安全
反射就相当于是为了维修起来方便和灵活
封装就相当于主机上的螺丝钉
反射就相当于一把螺丝刀
用螺丝刀可以搞维修也可以搞破坏
但是不能因为螺丝刀具有破坏性就不用他了吧
纯属自己理解,有什么不当之处欢迎多多指教。
希望对你有所帮助。
作者: 涂金哲    时间: 2012-8-2 09:31
侯宪博 发表于 2012-8-1 13:06
这个问题很多人都思考过,很多人感觉这是个矛盾
以下是我自己的总结
首先要想我们为什么封装

非常感谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2