java中的公共变量?

时间:2014-03-31 18:58:48

标签: java public

我的程序中有四个类,其中一个包含main() 但是在fruit,ch和demand变量的前三行中有一个错误。我想在每个类中使用这些变量。

    import java.util.Scanner;


public static int fruit = 0;
public static int ch;
public static boolean demand = false;

    class stock{
        synchronized int getfruit(){
            while(demand){
                try{
                    wait();
                }catch(InterruptedException e){
                    System.out.println("Wait fruits uploading");
                }

                System.out.println("cutomer got : " + ch);
                demand = true;
                notify();
            }
            return ch;
        }

        synchronized void putfruits(int ch){
            while(!demand){
                try{
                    wait();
                }catch(InterruptedException e){
                    System.out.println("uploaded already");
                }
                System.out.println("Uploading your demand : "+ ch + "  fruits");
                demand = false;
                notify();
            }
        }
    }
    class vendor implements Runnable{

        stock obj;
        public vendor(stock obj) {
            // TODO Auto-generated constructor stub
        this.obj = obj;
        new Thread(this, "vendor").start();
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            obj.putfruits(ch);
        }

    }

    class customer implements Runnable {

        stock obj;
        public customer(stock obj) {
            // TODO Auto-generated constructor stub
        this.obj = obj;
        new Thread(this, "cutomer").start();
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            obj.getfruit();
        }

    }
    public class Fruitmarket {
    public static void main (String args[]){
    stock obj2 = new stock();
    System.out.println("Initially market no capacity");
    System.out.println("Enter how much quantity you want ?");
    Scanner in = new Scanner ( System.in);
    ch = in.nextInt();

}
}

我该怎么做?我是java的初学者吗?

3 个答案:

答案 0 :(得分:5)

此代码无法编译。您需要将这些变量放在类中:

import java.util.Scanner;


class stock {

    public static int fruit = 0;
    public static int ch;
    public static boolean demand = false;

    ....

如果你想在外面访问这些变量,你可以这样做:stock.fruit

答案 1 :(得分:3)

如果要使用常量,可以声明一个接口,然后使用该接口将常量存储为public static final <type> <name>

编辑:您不应该实现界面,而只需调用它:InterfaceName.CONSTANT

将所有常量命名为所有大写字母也是一种好习惯。

编辑2:似乎自从java 5(我猜我真的过时了......)te static imports的使用被认为是更好的做法

答案 2 :(得分:2)

在Class定义之外,您无法声明变量。就像其他人说的那样,你需要在课堂上宣布它们。

如果它们是公开的并在类库中声明,您可以从任何其他类访问它们。如果它们是友好的(没有关键字,只有static int fruit = 0;),您可以从包中的任何类访问它们。如何访问它们取决于它们是否静止。静态字段可以通过引用类本身(例如stock.fruit)来访问,而对于非静态字段,您需要引用一个对象,该对象是持有该字段的类的实例。

现在,根据程序的上下文,我非常建议您在逻辑上放置变量。我并不完全确定需求和意图是什么意思,但只要知道你可以将它们放在任何类别,包括Fruitmarket,只要它们具有正确的访问级别修饰符(公共,友好等)和您尝试以正确的方式访问它们(如果它们是静态的,则通过声明类;如果它们是非静态的,则通过声明类的实例)