繁体   English   中英

Java访问实例变量

[英]Java accessing instance variables

如何使名为rooms的对象数组最终可以被静态方法访问,名为retrieveRoom(); 我试过公共静态客房[] =新房间[3]。 但我只是从中得到错误。 任何帮助表示赞赏。

public class MasterControlPanel{

    public static void main(String[] args){

    Rooms rooms[] = new Rooms[3];

    rooms[0] = new Rooms("Room U", 1, 4, 4);
    rooms[1] = new Rooms("Room U", 2, 4, 4);
    rooms[2] = new Rooms("Connector X", 3, 2, 4);
    rooms[3] = new Rooms("Connector U", 4, 2, 4);

    for(int x = 0; x <= rooms.length; x++){
        rooms[x].createLights();
        rooms[x].createWalls();
    }
    }

    public static Object retrieveRoom(int connectedRoom){

    connectedRoom -= 1;
    return rooms[connectedRoom];
    }

}

移动

public static Rooms[] rooms = new Rooms[4];

从你的main()方法,到这样的声明部分

public class MasterControlPanel {
    public static Rooms[] rooms = new Rooms[4];
    public static void main(String[] args) {
    ...
    }
}

这将在MasterControlPanel类中定义一个rooms 静态成员

以下是一些其他提示:

  1. 只要Class存在,就可以访问静态成员。 但是,为了访问实例成员(属于该类实例的变量),您需要该类的实例。
  2. 使用Rooms[] rooms = new Rooms[4]; 请注意,数组括号被移动到Type部分,这将防止将来混淆。 让我们用房间名称命名一个房间数组 ”。 然而,这并不是一件好事。
  3. 您正在定义大小为3的 rooms数组,但是您要为其添加4个元素。 这将导致ArrayIndexOutOfBounds异常。
  4. 您应该将您的成员设为private以实现封装 您可以提供publicprotected方法来从类中检索这些private成员。
  5. 当一个数组包含n元素,连续迭代,你可以使阵列上的最大数量也n这是肯定的。 这意味着在for循环中确保最后一次迭代的循环条件为n-1 请记住,大小为4数组中没有第4个元素。

以下是代码

public class MasterControlPanel {
    public static Room[] rooms = new Room[4];

    public static void main(String[] args) {

        rooms[0] = new Room("Room U", 1, 4, 4);
        rooms[1] = new Room("Room U", 2, 4, 4);
        rooms[2] = new Room("Connector X", 3, 2, 4);
        rooms[3] = new Room("Connector U", 4, 2, 4);

        for (int x = 0; x <= rooms.length-1; x++) {
            rooms[x].createLights();
            rooms[x].createWalls();
        }
    }

    public static Room retrieveRoom(int connectedRoom) {
        connectedRoom -= 1;
        return rooms[connectedRoom];
    }

}

class Room {
    // These are instance members for Room class
    private String roomString;
    private int roomInteger1, roomInteger2, roomInteger3;

    public Room(String string, int integer1, int integer2, int integer3) {
        // This is the constructor for Room object
        this.roomString = string;
        this.roomInteger1 = integer1;
        this.roomInteger2 = integer2;
        this.roomInteger3 = integer3;
    }

    public void createLights() {
        // This method creates lights
    }

    public void createWalls() {
        // This method creates walls
    }

    // These are Getters and Setters for Room members
    public String getRoomString() {
        return roomString;
    }

    public void setRoomString(String roomString) {
        this.roomString = roomString;
    }

    public int getRoomInteger1() {
        return roomInteger1;
    }

    public void setRoomInteger1(int roomInteger1) {
        this.roomInteger1 = roomInteger1;
    }

    public int getRoomInteger2() {
        return roomInteger2;
    }

    public void setRoomInteger2(int roomInteger2) {
        this.roomInteger2 = roomInteger2;
    }

    public int getRoomInteger3() {
        return roomInteger3;
    }

    public void setRoomInteger3(int roomInteger3) {
        this.roomInteger3 = roomInteger3;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM