公共或私人,Androidvariables真的很重要

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

Button btnPower = null; //or private Button btnPower = null; //or public Button btnPower = null; public void somethingUsingTheButton(){ btnPower = (Button)findViewById(R.id.btnpower_id); } 

是否有一些“引擎盖下”的约定应该被考虑(垃圾清理,内存等),这些约定会建议总是使用私有公共,如果实体本身只会在它所写的类中使用?

    私有领域促进封装

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

    但是, public领域或方法没有任何内在错误。 它对垃圾收集没有影响。

    在某些情况下,某些types的访问会影响性能,但它们可能比此问题的主题更先进。

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

     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 ); } } } 

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

    我要说的另一件事是,如果你并不是唯一一个编写项目的代码,那么限制属性的可见性总是一个很好的做法,这些属性是类实现的关键,以避免其他开发人员可能提出的奇怪工作。

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

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

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

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

    privatepublic都是Java的关键字,其目的是面向对象设计。 我建议你阅读这篇文章: http : //docs.oracle.com/javase/tutorial/java/concepts/

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

    我希望这有帮助。

    编辑:

    我不确定使用private,public或no关键字是否会从内存角度优化您的app。 据我所知,我认为它没有,你应该使用什么使你的代码最可读,直观和可维护。

    如果你的variables声明在Activity的作用域内,它通常会作为一个作用域variables。

    然而,当它们不是参数时,在另一种方法中使用来自一种方法的variables是不好的编程习惯。

    例:

    坏:

     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; }