说我有以下代码:
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类的引用,以便访问它的属性和方法。
有没有办法在不实例化的情况下访问方法和属性?
答案 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;来了。
错误。 count
是B
类的实例变量,因此每次创建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