当前位置: 首页 > 面试题库 >

私人关键字的使用

麻昌翰
2023-03-14
问题内容

我是编程新手。我现在正在学习Java,有一点我不确定,是否使用私有。为什么程序员将变量设置为私有,然后通过write,getter和setter进行访问。为什么不将所有内容公开,因为我们还是要使用它。

public class BadOO {
    public int size;

    public int weight;
    ...
}

public class ExploitBadOO {
    public static void main (String [] args) {
        BadOO b = new BadOO();
        b.size = -5; // Legal but bad!!
    }
}

我发现了这样的代码,并且看到注释合法但不好。我不明白为什么,请向我解释。


问题答案:

首先不仅仅将变量设为公共的主要原因是,如果您确实将其设为公共,那么以后您会更加头疼。

例如,一个程序员围绕私有成员变量编写公共获取器和设置器。三个月后,他需要验证该变量永远不会“设置”为空。他在“
setFoo(…)”方法中添加了一个检查,然后将检查所有尝试设置变量的“将其设置为null”。案件结案,并毫不费力。

另一位程序员意识到,将公共获取器和设置器放在私有成员变量周围违反了封装的精神,他看到了这些方法的徒劳性,并决定将成员变量公开。也许这可以提高性能,或者程序员只想“在使用时编写它”。三个月后,他需要验证该变量永远不会“设置”为空。他扫描对变量的每次访问,有效地搜索整个代码库,包括可能通过反射访问变量的所有代码。这包括所有扩展了他的代码的第三方库,以及所有新的在编写代码后使用他的代码的模块。然后,他要么修改所有调用,以确保变量永远不会设置为null。案件永远不会结案,因为他无法有效地找到对暴露成员的所有访问权限,也无法访问所有第三方的源代码。由于对新编写的模块的知识不完善,因此可以保证调查不完整。最后,他无法控制将来可能访问公共成员的代码,并且该代码可能包含将member变量设置为null的行。

当然,第二个程序员然后可以通过在变量周围放置“ get”和“
set”方法并将其设置为私有来破坏所有现有代码,但是,嘿,他可以在三个月前完成该工作,并省去了为什么需要这样做的解释。破坏其他人的代码。

随便怎么说,但是将公共“获取”和“设置”方法放在私有成员变量周围是防御性编程,它是由多年(即数十年)的经验带来的。



 类似资料:
  • 在github文档中找不到任何东西,在这里也找不到。但是我想知道是否可以有一个用于名为的私有存储库,该存储库可以访问,只有一个人可以访问存储库本身。 我记得曾经读过一些关于github页面总是公开的东西,但似乎再也找不到了。

  • 问题内容: 我要声明一个字段: 首先,问题的顺序吗?如果没有,是否存在标准的可接受序列或约定? 其次,我的应用程序中的是固定的。这是最好的方式来存储其价值吗? 问题答案: 我将Checkstyle与Eclipse结合使用,如果声明的顺序与您指定的顺序不同,则会导致警告,引用Java语言规范(JLS)。例如, 结果是 他们的页面列出了他们期望的顺序,尽管通过该页面上的链接到JLS,我看不到任何东西可

  • 本文向大家介绍详解Java编程中static关键字和final关键字的使用,包括了详解Java编程中static关键字和final关键字的使用的使用技巧和注意事项,需要的朋友参考一下 Java static关键字以及Java静态变量和静态方法 static 修饰符能够与变量、方法一起使用,表示是“静态”的。 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以st

  • 本文向大家介绍C#私人的,包括了C#私人的的使用技巧和注意事项,需要的朋友参考一下 示例 的private关键字标记属性,方法,字段和嵌套类为仅在类中使用:            

  • 下面是 Java 里面的关键字。不能使用以下任一作为您的程序标识符。关键字 const 和 goto 语句被保留,即使他们目前尚未使用。true, false, 和 null 似乎是关键字,但它们实际上是字面值;你不能使用它们作为你的程序标识符。 abstract continue for new switch assert*** default goto*

  • 关键字是不能做为变量的。Lua 的关键字不多,就以下几个: and break do else elseif end false for function if in local nil not or repeat return then true until while