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