假设我有以下代码:
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,以便访问它的属性和方法。
有没有一种方法可以在不示例化的情况下访问方法和属性?
3条答案
按热度按时间wpx232ag1#
是的,有一种方法可以访问某些属性或行为而不示例化类,这就是static关键字。这意味着,标记为static的字段和方法不依赖于类的示例,并且在不创建对象的情况下可用。
根据oraclejava文档,声明中包含静态修饰符的字段称为静态字段或类变量。它们与类相关联,而不是与任何对象相关联。类的每个示例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以更改类变量的值,但是也可以在不创建类示例的情况下操作类变量。
出于您的目的(计算b类示例),我会这样做:
输出:
2ic8powd2#
您想要的是在它之前添加关键字static。例如
这将使该变量在该类的所有版本之间共享,而不是作为对象本身的值。
当访问一个静态值时,你真的应该用一种稍微不同的方式来做
b、 count(off)类不是示例化的对象,但它可以工作
pw136qt23#
但是,count是类型b的对象的总数,并且每次有一个新的b()时,它都加1;来了。
错了。
count
是的示例变量B
类,因此每次创建B
,一个新的count
变量初始化为0,并在B
建造师。为了统计
B
,制造count
静态变量。这样它就不会属于B
,您可以使用B.getCount()
(也应该是静态的)。