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

cx6n0qe3  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(344)

假设我有以下代码:

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的对象总数,每次a加1 new B(); 来了。在代码中,第三行(有 new B(); ),不应该这样做。我只想引用类b,以便访问它的属性和方法。
有没有一种方法可以在不示例化的情况下访问方法和属性?

wpx232ag

wpx232ag1#

是的,有一种方法可以访问某些属性或行为而不示例化类,这就是static关键字。这意味着,标记为static的字段和方法不依赖于类的示例,并且在不创建对象的情况下可用。
根据oraclejava文档,声明中包含静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个示例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但是也可以在不创建类示例的情况下操作类变量。
出于您的目的(计算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
2ic8powd

2ic8powd2#

您想要的是在它之前添加关键字static。例如

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

    B() {
        count++;
    }

    public int getB() {
        return b;
    }
}

这将使该变量在该类的所有版本之间共享,而不是作为对象本身的值。
当访问一个静态值时,你真的应该用一种稍微不同的方式来做
b、 count(off)类不是示例化的对象,但它可以工作

pw136qt2

pw136qt23#

但是,count是类型b的对象的总数,并且每次有一个新的b()时,它都加1;来了。
错了。 count 是的示例变量 B 类,因此每次创建 B ,一个新的 count 变量初始化为0,并在 B 建造师。
为了统计 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;
    }
}

相关问题