从另一个类访问方法和属性而不实例化它

时间:2017-10-31 12:49:17

标签: java

说我有以下代码:

class A {
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.getB() + " and count " + b.count);
    }
}

class B {
    private int b = 15;
    int count = 0;

    B() {
        count++;
    }

    public int getB() {
        return b;
    }
}

输出

15 and count 1

根据用途,可以。

但是,count是B类型的对象总数,每次new B();出现时都会加1。在代码中,第三行(其中有new B();)不应该这样做。我只想要一个对B类的引用,以便访问它的属性和方法。

有没有办法在不实例化的情况下访问方法和属性?

3 个答案:

答案 0 :(得分:1)

你想要的是在它之前添加关键字static。 e.g。

class B {
    private int b = 15;
    static int count = 0;

    B() {
        count++;
    }

    public int getB() {
        return b;
    }
}

这将使此变量在此类的所有版本之间共享,而不是对象本身的值。

访问静态值时,您应该以稍微不同的方式执行此操作,例如

B.count(关闭类不是实例化对象,但它会起作用

答案 1 :(得分:1)

  

但是,count是B类型的对象总数,每次新的B()时它都会加1;来了。

错误。 countB类的实例变量,因此每次创建B实例时,新count变量初始化为0并在B中递增为1 {1}}构造函数。

为了计算B的所有实例,请将count设为静态变量。这样它就不会属于B的任何实例,您可以使用B.getCount()(也应该是静态的)访问它。

class B {
    private int b = 15;
    private static int count = 0;

    B() {
        count++;
    }

    public int getB() {
        return b;
    }

    public static int getCount() {
        return count;
    }
}

答案 2 :(得分:0)

是的,有一种方法可以在不实例化类的情况下访问某些属性或行为,这称为静态关键字。这意味着,标记为static的字段和方法不依赖于类的实例,并且可以在不创建对象的情况下使用。

根据Oracle Java文档,在其声明中具有静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但也可以在不创建类实例的情况下操作类变量。

为了你的目的(计算B类的实例)我会做这样的事情:

class A {
    public static void main(String[] args) {
        new B();
        System.out.println(B.count);
        new B();
        System.out.println(B.count);
        new B();
        System.out.println(B.count);
    }
}
class B {
    private int b = 15;
    static int count = 0;
    B() {
        count++;
    }
    public int getB() {
        return b;
    }
}

输出:

1
2
3