公共或私有,Android变量真的很重要吗

Posted

技术标签:

【中文标题】公共或私有,Android变量真的很重要吗【英文标题】:public or private, does it really matter with Android variables 【发布时间】:2012-09-12 03:04:24 【问题描述】:

在单个活动中,当定义仅在该活动中使用的组件时,以下定义之间的真正区别是什么:

Button  btnPower = null;
//or
private Button btnPower = null;
//or
public Button btnPower = null;

public void somethingUsingTheButton()
  btnPower = (Button)findViewById(R.id.btnpower_id);

是否应该考虑一些“幕后”约定(垃圾清理、内存等),如果实体本身只在类内部使用,则建议始终使用私有而不是公共写的?

【问题讨论】:

在大多数情况下,尤其是在您描述所有内容都在一个类/活动中的场景中,它只是被认为是限制您使用的任何变量范围的好形式。 【参考方案1】:

私人领域推广encapsulation

除非您需要向其他类公开字段或方法,否则使用private 是普遍接受的约定。从长远来看,养成这种习惯可以为您节省很多痛苦。

但是,public 字段或方法本身并没有任何问题。它对垃圾回收没有影响。

在某些情况下,某些类型的访问会影响性能,但它们可能比本问题的主题更高级。

这样一种情况与内部类访问外部类字段有关。

class MyOuterClass

    private String h = "hello";

    // because no access modifier is specified here 
    // the default level of "package" is used
    String w = "world"; 

    class MyInnerClass
    
        MyInnerClass()
        
            // this works and is legal but the compiler creates a hidden method, 
            // those $access200() methods you sometimes see in a stack trace
            System.out.println( h ); 

            // this needs no extra method to access the parent class "w" field
            // because "w" is accessible from any class in the package
            // this results in cleaner code and improved performance
            // but opens the "w" field up to accidental modification
            System.out.println( w ); 
        
    

【讨论】:

【参考方案2】:

嗯, 重要的一点是,将变量定义为私有是 Java 编程的标准。 因此,直接在对象上调用变量至少对于可能阅读您的代码的其他人来说会显得很奇怪。

我要说的另一件事是,如果您不是一个人在项目上编码,那么限制对类实现至关重要的属性的可见性始终是一种好习惯,以避免其他开发人员可能会出现的奇怪工作跟上。

我个人不知道这些修饰符是否用于编译和优化目的。

总结一下,我认为每个有经验的 java 编码员我都强烈建议在属性定义中使用这种模式。

【讨论】:

【参考方案3】:

可见性范围与垃圾收集器或内存管理无关

您将希望尽可能减少可见性范围,以便您的代码更易于维护。

【讨论】:

谢谢伙计,再挖一些,看起来这是惯例:垃圾收集或内存管理没有区别。它是私人的。【参考方案4】:

privatepublic 都是 Java 的关键字,具有面向对象设计的目的。我建议你阅读一下:http://docs.oracle.com/javase/tutorial/java/concepts/

如果您只想在活动中使用这些变量(对象),那么我建议您将这些变量设为私有。

我希望这会有所帮助。

编辑:

我不确定使用 private、public 或 no 关键字是否会从记忆的角度优化您的应用程序。据我所知,我认为它没有,您应该使用使您的代码最易读、最直观和可维护的东西。

【讨论】:

谢谢,我知道他们在做什么,而且我知道他们在我的情况下不需要公开,但我想知道是否有任何类型的 voodoo 内存管理或垃圾收集受到影响无论某些东西是默认的、公共的还是私有的。【参考方案5】:

如果你的变量声明在 Activity 的作用域内,它通常会像作用域变量一样正常工作。

但是,当变量不是参数时,在另一种方法中使用来自一种方法的变量是一种不好的编程习惯。

例子:

不好:

void Foo()

    int foo = 5;
    System.out.println(Bar());


int Bar()

    return foo + 5;

这实际上会引发语法错误,因为 foo 声明在 Bar() 的范围之外

好:

int foo;

void Foo()

    foo = 5;
    System.out.println(Bar(foo)); //prints 10


int Bar(int foo)

    return foo + 5;

【讨论】:

@Alex 因为您想避免(作为设计原则)不必要的副作用。副作用的定义是影响当前上下文之外的信息。 您的“坏”无法编译,因此它还不错,而是不存在。因此好不能与任何东西相比,所以我想知道为什么它是好的。

以上是关于公共或私有,Android变量真的很重要吗的主要内容,如果未能解决你的问题,请参考以下文章

标识符大小写真的很重要吗?

不是公共或私有的变量-Java

我可以在公共方法中声明私有变量吗?

继承是真的吗?

我应该测试私有方法还是仅测试公共方法? [关闭]

PHP5 保护变量背后的推理