我是否可以从Java中的B类访问声明在类A中的变量

时间:2018-01-24 11:24:20

标签: java class variables dot-operator

我是Java的新手。我做了一个示例程序,找到一个矩形区域。代码如下。

package rectangle;

public class Rectangle {
    int length, width;

    int rectArea() {
        int area = length * width;
        return (area);
    }
}

class RectArea {
    public static void main(String[] args) {
        int area1;

        Rectangle rect1 = new Rectangle();

        rect.length = 14;
        rect.width = 13;
        area1 = rect.rectArea();

        System.out.println("Area1=" + area1);
    }
}

在上面的代码中,lengthwidth是在类Rectangle中声明的变量。现在area也是一个包含数据length * width的变量,此area变量也在类Rectangle中声明

我们可以使用点运算符从另一个名为length的类中访问widthRectArea个变量。但是为什么我们不能直接从area类(使用点运算符)访问Rectangle类中声明的RectArea变量以评估Rectangle的值?

也就是说,为什么我们无法使用以下代码来评估rect1类中新创建的对象RectArea的值。

area1 = rect1.area;
System.out.println("Area1="+ area1);

或者为什么我们无法使用上述代码访问areaRectangle类中声明的RectArea变量?

4 个答案:

答案 0 :(得分:2)

区域不是类级别变量。它是rectArea方法中的局部变量,因此,它在方法外部不可见,并且不能通过点运算符访问,如类变量

答案 1 :(得分:1)

区域不是类变量,它是内部方法,您无法访问方法变量,因为它们是本地的,仅对方法可见。

答案 2 :(得分:1)

有局部变量和实例(类)变量。类变量类似于长度和宽度,它们可以在整个类中使用。

但是对于局部变量,它们只能在您声明它们的方法/代码块中使用。在这种情况下,区域在方法中声明,并且仅在方法中可用。

一旦代码跳出方法(返回)区域就不再存在。

我修复了下面的代码,以便它可以正常工作:

{
    "queryPlanner" : {
        "plannerVersion" : 1,
        "namespace" : "test.test",
        "indexFilterSet" : false,
        "parsedQuery" : {
            "document_type_id" : {
                "$in" : [
                    "3",
                    "7"
                ]
            }
        },
        "winningPlan" : {
            "stage" : "COUNT",
            "inputStage" : {
                "stage" : "COLLSCAN",
                "filter" : {
                    "document_type_id" : {
                        "$in" : [
                            "3",
                            "7"
                        ]
                    }
                },
                "direction" : "forward"
            }
        },
        "rejectedPlans" : [ ]
    },
    "executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 0,
        "executionTimeMillis" : 681,
        "totalKeysExamined" : 0,
        "totalDocsExamined" : 2000100,
        "executionStages" : {
            "stage" : "COUNT",
            "nReturned" : 0,
            "executionTimeMillisEstimate" : 630,
            "works" : 2000102,
            "advanced" : 0,
            "needTime" : 2000101,
            "needFetch" : 0,
            "saveState" : 15625,
            "restoreState" : 15625,
            "isEOF" : 1,
            "invalidates" : 0,
            "nCounted" : 400020,
            "nSkipped" : 0,
            "inputStage" : {
                "stage" : "COLLSCAN",
                "filter" : {
                    "document_type_id" : {
                        "$in" : [
                            "3",
                            "7"
                        ]
                    }
                },
                "nReturned" : 400020,
                "executionTimeMillisEstimate" : 600,
                "works" : 2000101,
                "advanced" : 400020,
                "needTime" : 1600081,
                "needFetch" : 0,
                "saveState" : 15625,
                "restoreState" : 15625,
                "isEOF" : 1,
                "invalidates" : 0,
                "direction" : "forward",
                "docsExamined" : 2000100
            }
        }
    },
    "serverInfo" : {
        "host" : "ptpll354",
        "port" : 5000,
        "version" : "3.0.7",
        "gitVersion" : "6ce7cbe8c6b899552dadd907604559806aa2e9bd"
    },
    "ok" : 1
}

答案 3 :(得分:0)

area 是方法 rectArea 的局部变量。除了相同的方法之外,它不能在课外或课堂内访问。

如果您想在外面访问区域,为什么不尝试这样的事情:

public class Rectangle {

    int length, width, area;

    void getData(int x, int y) {
        length = x;
        width = y;
        area = length * width;
    }
}