有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    However, count is the total amount of objects of type B, and it is added 1 every time a new B(); comes up.

    countB类的实例变量,因此每次创建B的实例时,新的count变量在B构造函数中初始化为0并递增为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. # 2 楼答案

    是的,有一种方法可以在不实例化类的情况下访问某些属性或行为,称为static关键字。这意味着,标记为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
    
  3. # 3 楼答案

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

    class B {
        private int b = 15;
        static int count = 0;
    
        B() {
            count++;
        }
    
        public int getB() {
            return b;
        }
    }
    

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

    当访问一个静态值时,你应该用一种稍微不同的方式来访问它,例如

    B.count(类不是实例化的对象,但它会工作