Java变量基础知识

时间:2010-07-01 15:36:53

标签: java android variables

好的,所以我要在这里让自己难堪,但我正在开展一个项目,我需要得到一些帮助,所以我需要做一些约定,所以我看起来并不太愚蠢。我只用了2个月的java,其中100%用在Android上。

我需要一些帮助来理解设置变量以及为什么我应该以某种方式执行它。

以下是我的类变量列表示例:

    Button listen,feed;
Context context = this;
int totalSize = 0;
int downloadedSize = 0;
SeekBar seek;
String[] feedContent = new String[1000];
String[] feedItems = new String[1000];
ListView podcast_list = null;
HtmlGrabber html = new HtmlGrabber();
String pkg = "com.TwitForAndroid";
TextView progress = null;
long cp = 0;
long tp = 0;
String source = null;
 String pageContent = null;
 String pageName = "http://www.shanescode.com";
 DataBaseHelper mdbHelper = new DataBaseHelper(this);
int songdur = 0;

所以这些都是我想要在整个班级中使用的变量。为什么我会做一些静态或最终的东西。我理解Public,但为什么要私有化?

感谢您的帮助,请不要太苛刻。我只需要澄清一下。

6 个答案:

答案 0 :(得分:9)

这些词语都会改变应用它们的变量的方式。

static 意味着变量只会为整个类创建一次,而不是为该类的每个不同实例创建一次。

public class MyClass{
    public static int myNumber;
}

在这种情况下,变量作为MyClass.myNumber访问,而不是通过MyClass的实例访问。当您希望存储有关整个类的数据而不是单个实例的数据时,将使用静态变量。

final 可防止变量值在第一次设置后发生变化。它必须作为其声明的一部分给出初始值:

public final int myNumber = 3;

或作为类构造函数的一部分:

public MyClass(int number){
    this.myNumber = 3;

完成此操作后,无法更改变量的值。但请记住,如果变量存储对象,则不会阻止对象的变量被更改。此关键字用于保持一段数据不变,这使得使用该数据编写代码变得更加容易。

private 修改变量的可见性。私有变量可以由包含它的实例访问,但不能超出:

public class MyClass{
    private int myNumber;

    public void changeNumber(int number){
        this.myNumber = number;  //this works
    }
}

MyClass myInstance = new MyClass();
myInstance.myNumber = 3;  //This does not work
myInstance.changeNumber(3) //This works

可见性用于控制其他代码如何使用类的变量。在编写将由其他程序员使用的代码时,这非常重要,以便控制他们如何访问类的内部结构。公共和私有实际上只是Java中四种可能的可见性级别中的两种:其他是受保护的和“无(可见性)修饰符”(a.k.a不是公共或私有或受保护的)。这四个级别之间的差异详细here

答案 1 :(得分:1)

static =对于所有类的实例都相同。

final =特定实例的不变(引用)。

如果你需要一个字段(也就是一个类变量)被一个类的所有实例共享(例如,一个常量),那么你可以将它设置为静态。

如果你知道某个字段在一个实例中是不可变的(至少它的引用是不可变的),那么最好将它作为final。同样,常数将成为最终的一个很好的例子;任何在建设时间内在一个实例中保持不变的东西也是最终的合适候选人。

搜索“java final static”为使用这些关键字提供了非常有用的进一步参考。


使用private关键字控制其他类可以访问的内容。我说它最大的用途是帮助开发人员“做正确的事情” - 而不是访问另一个类的实现的内部,这可能产生各种不需要的行为,它强制使用accessor / mutator方法,这类实现者可以用来强制执行适当的约束。

答案 2 :(得分:1)

私人

使用私有的理念是information hiding。暂时忘掉软件;想象一块硬件,比如X-Box或其他东西。在它的某个地方,它有一个小的舱口可以进入内部,通常带有贴纸:“打开它,保修无效。”

使用private会在您的软件组件中贴上类似的贴纸;有些东西只在'内部',虽然任何人都很容易open it up and play with the inside anyways,但是你让他们知道,如果他们这样做,你就不会对导致的意外行为负责。

静态

static关键字并不意味着“对于所有类的实例都相同”;这是一种简化。相反,它是“动态”的反义词。使用static关键字表示“此成员上没有dynamic dispatching。”这意味着编译器而不是运行时确定调用此方法时执行的代码。

由于在编译时它不是对象的实例,这意味着static成员无法访问实例。

一个例子:

public class Cat {
    public static void speak() { System.out.println("meow"); }
}

public class Lion extends Cat {
    public static void speak() { System.out.println("ROAR"); }
}

// ...
public static void main(String argv[]) {
    Cat c = new Lion();
    c.speak();
}

以上打印“喵” - 而不是“咆哮” - 因为speakstatic成员,c声明类型是{{ 1}},因此编译器以执行Cat的方式构建,而不是Cat.speak。如果在Lion.speak成员上进行动态调度,则会static执行,因为Lion.speak运行时类型c

答案 3 :(得分:1)

可能会让你失望的另一件事是:

并非所有内容都必须是类级变量;你应该为需要定义的最小范围定义一个变量。

举个例子,假设您的类只有一个使用TextView progress变量的方法。将该声明移动到需要它的方法中。通过这种方式,它整理了一些东西,并通过分离出真正独立的东西来帮助您创建更强大的代码。

答案 4 :(得分:0)

我不知道你为什么要私下做任何事。

人们会插话并说私人是非常重要的事情

有些人会声称你不能在没有私密的情况下进行封装。出于隐私的考虑,大部分内容似乎都是隐私。

如果您要将代码出售给其他人,那么您必须仔细地将类的界面元素与类的实现细节分开。在这种情况下,您希望将实现设置为私有(或受保护),以便 - 出于法律目的 - 您销售的代码不会暴露太多的实现细节。

否则,如果您不卖,请不要在private上浪费大量时间。

投入时间将界面与实施分开。仔细记录界面部分,确保您遵守规则。清楚而干净地将实施细节分开。考虑使用private作为让编译器“超越你的肩膀”的方法,以确保你真正将界面与实现分开。

答案 5 :(得分:0)

面向对象方法的一个方面使它非常流行,你可以在类中隐藏变量。这个类就像一个容器。现在,您作为程序员决定您希望类的用户如何与其进行交互。在Java中,传统是提供API - 使用类的方法为您的类提供公共接口。

要使此方法有效,请将变量声明为私有(这意味着只有类中的方法可以访问它们),然后提供其他方法来访问它们。例如,

private int someNumber;

此变量只能在您的班级中访问。你认为其他人可能需要从课堂外访问它吗?您将创建一个允许访问的方法:

public int getSomeNumber()
{
     return someNumber;
}

也许您班级的用户也需要能够设置someNumber。在这种情况下,您还提供了一种方法:

public void setSomeNumber( int someNumber )
{
     this.someNumber = someNumber;
}

为什么所有这些工作只是为了访问一个你可以轻易声明为公共的类成员?如果您使用此方法执行此操作,则可以控制其他人如何访问您班级中的数据。想象一下,你想确保someNumber只被设置为一个数字< 100.您可以在setSomeNumber方法中提供该检查。通过声明您的变量具有私有访问权限,您可以保护您的类不被错误地使用,并使每个需要使用它的人更容易 - 包括您自己!

声明变量具有静态访问权意味着您不需要该类的实例来访问该变量。在Java中,通常编写一个类然后创建它的实例。您可以根据需要拥有该类的多个实例,并且它们都可以跟踪自己的数据。您还可以声明属于类本身的变量,这就是静态关键字的来源。如果您创建变量......

static int classVariable = 0;

可以在没有类实例的情况下访问该变量。例如,您可能会不时看到这样做:

public static final int MY_CONSTANT = 1;

虽然现在有更好的方法可以做到这一点,但它仍然是一种常见模式。您可以使用此变量,而不使用此类的任何实例:

myInstance.setSomeNumber( MyClass.MY_CONSTANT );

java.awt.Color以这种方式使用静态变量。您还可以将方法声明为静态(查看public static void main,程序的起点)。静态很有用,但要谨慎使用它们,因为创建类的实例通常可以带来更好的设计。

最后(双关语),你为什么要声明变量是最终的?如果您知道该值永远不会更改,则将其声明为final意味着如果您编写一些尝试更改该值的代码,编译器将开始抱怨。这再次有助于防止制造可能导致真正恼人的错误的愚蠢错误。

如果查看上面的静态变量示例,也会使用final关键字。在这个时候,您决定要将变量设为public,但也希望保护变量不被更改。你通过公开和最终做到这一点。