Android / Java试图找出放置变量声明的位置

我是Android开发的新手,到目前为止,我一直在搞清楚如何让教程代码在我正在构建的应用程序中工作。 我正在努力了解声明变量的位置以及为什么我复制并粘贴一些最终会出现错误的教程。

例如,我正在尝试学习如何使用ViewFlipper。 在本教程中,我遇到了Eclipse的问题,告诉我当我在OnClick中使用它时,vf不是变量。 所以当我移动线时:

ViewFlipper vf = (ViewFlipper)findViewById(R.id.viewFlipper1); 

在我的OnCreate方法之上,然后它工作。 为什么我在OnCreate中看到如此多的教程和变量声明,为什么它对我不起作用? 声明它们的适当位置在哪里? 我理解封装和inheritance的基础知识,OnCreate就像任何其他方法一样,并且在那里声明的任何变量都与其他方法隔离? 我的按钮怎么样,我应该在class级内但在OnCreate之外宣布这些按钮吗?

为什么我在OnCreate看到如此多的教程和变量声明,为什么它对我不起作用?

在方法中声明变量,或者在外部,实际上归结为您想要与变量关联的scope
在方法内部,您需要注意在打算使用变量之前声明变量。

声明它们的适当位置在哪里?

声明变量的位置的适当性完全取决于您想要使用它的位置。 在类级别声明变量,当您只打算在方法中使用它时是不明智的。 并且在方法中声明变量,当类中的许多其他方法想要访问它时,并且最终将变量传递给每个方法 – 也是不明智的。 所以现在,您可以考虑:

  1. 在类中声明变量 – 当类中的许多方法需要访问它时。
  2. 在方法中声明变量 – 只有方法用于变量时。

我想补充一点, 12 不是可以盲目应用的通用规则 – 但是要开始,你可以关注它们,直到你找出与变量范围,访问规范和生命周期相关的更深层次的细微差别。

我不是在谈论访问说明符,因为它们值得详细了解,你可以在这里找到 。 我也没有在这里讨论过实例与类变量的区别,因为你最好提到像这样的官方文档。

我理解封装和inheritance的基础知识, onCreate就像任何其他方法一样,并且在那里声明的任何变量都与其他方法隔离?

那是对的。

我的按钮怎么样,我应该在课堂上宣布那些但是在onCreate之外吗?

Android中的UI组件通常需要多种方法才能访问。 TextViewButton等 – 通常具有需要在不同时间根据不同方法进行更改的状态 – 因此您最好在类级别声明它们。

您希望在类级别声明UI变量的另一个重要原因是,您可以减少让Android框架为每个方法调用创建它们的开销。 只要您的Activity实例处于活动状态,框架就会保留UI组件/变量。

onCreate就像任何其他方法一样,所有关于封装和变量范围的java规则都适用于它。 在onCreate方法之外将ViewFlipper变量声明为类成员。 但是在onCreate方法中实例化它,就像教程所说的那样。

android中的所有内容都与java中的一样。 这里遵循java的所有编程规则。

这是因为在onCreate方法之外,变量对于您的类是全局的。 Aka,您class级中的任何方法都可以访问这些变量。 在onCreate中声明变量时,这些变量只能在oncreate方法的括号内访问。 您应该在onCreate方法之外声明您的变量,并在onCreate方法中初始化它们:

 ViewFlipper vf; onCreate(....) vf = (ViewFlipper) findViewById(R.id.viewFlipper1); 

然后设置你的onClickListener