2013-12-07 5 views
1

Im с помощью этого:Создание объекта с размером, чтобы использовать с другим классом Java

public class DatabaseTester{ 
    public static void main (String[] args){ 

    final int length = 10; 
    Database data = new Database(length); 
... 
}} 

Чтобы установить размер в этом:

public class Database{ 

private int length = _size; 

    public Database(int length){ 
    int _size = length; 
    } 

    String[] list = new String[length]; 
... 
} 

Но он говорит, что не может найти _size и я не знаю, почему.

мне нужен массив за пределами публичной базы данных() {}, которые будут использоваться другими методами

Любая помощь очень ценится

ответ

0

Когда вы должны принять значения через конструктор, вы должны переместить инициализацию вашего массива в конструктор, а также, как это:

String[] list; 
public Database(int length) { 
    int _size = length; 
    list = new String[length]; 
} 

Это объясняется тем, что сфера применения параметров конструктора ограничивается самого конструктора - вы не можете использовать их в инициализаторах. Вы также не можете использовать _size, потому что он будет установлен на ноль в момент запуска инициализатора.

Обратите внимание, что вы можете избавиться от _size, потому что вы всегда можете получить его путем доступа к list.length:

public class Database { 
    String[] list; 
    public Database(int length){ 
     list = new String[length]; 
    } 
    ... 
} 
+0

Извините за путаницу, я обновил свое сообщение о том, почему мне нужен массив вне конструктора. И это работало так, спасибо, я сделал то же самое, что и вы, с длиной, я забыл, что не мог объявить его внутри конструктора. – Kevin

0

Он не может найти _size, потому что переменная не определена в пределах вашего класс.

public class Database{ 

private int length = _size; 

    public Database(int length){ 
     // this is a local variable, so even if you have this here 
     // it is not something the Database class will know about 
     int _size = length; 
    } 

    String[] list = new String[length]; 
... 
} 

Если вы хотите, чтобы массив быть открытое поле вы можете сделать это

public class Database { 

    String[] list; 

    public Database(int length){ 
     list = = new String[length]; 
    } 
} 
0

Ваш код кажется неправильным и излишним:

public class Database { 
    private int length; 
    private String[] list; 

    public Database(int length) { 
    this.length = length; 
    this.list = new String[length]; 
    } 
    ... 
} 
+0

Извините за путаницу, я обновил сообщение о том, зачем мне нужен массив вне конструктора. – Kevin

+0

Объявление 'list' все еще находится за пределами конструктора, вы можете ссылаться на него в любом другом методе' Database'. – Jack

0

Обычно конструктор используется для init Таким образом вы должны закодировать класс DataBase. переменные экземпляра.

public class Database{ 

    private int length; 
    String[] list; 

    public Database(int length){ 
     this.length = length; 
     this.list = new String(length); 
    } 


... 
} 
Смежные вопросы