2013-04-10 2 views
0

Когда я пытаюсь скомпилировать Report.java, я получаю сообщение об ошибке в строке 6: error: <identifier> expected aClient.setClientName("Michael"); с стрелкой, указывающей на первое parenthese.error: <identifier> Ожидаемый

public class Client { 

    private String _clientName; 

    public String getClientName(){ 
     return _clientName; 
    } 
    public void setClientName(String clientName){ 
     _clientName = clientName; 
    } 

} 
public class Report { 

    Client aClient = new Client(); 
    //ClientLawn aClientLawn = new ClientLawn(); 

    aClient.setClientName("Michael"); 
    //aClientLawn.setLawnWidth(10); 
    //aClientLawn.setLawnLength(10); 

    public void output(){ 
     System.out.println(aClient.getClientName()); 
     //System.out.println(aClientLawn.calcLawnSize()); 
    } 

} 

Я также хочу отметить, что я новичок в Java, поэтому, пожалуйста, будьте нежны.

ответ

3

Использование instance initialization block.

public class Report { 

    Client aClient = new Client(); 
    //ClientLawn aClientLawn = new ClientLawn(); 
    { 
     aClient.setClientName("Michael"); 
     //aClientLawn.setLawnWidth(10); 
     //aClientLawn.setLawnLength(10); 
    } 
    ... 
} 
2

Эта линия должна быть помещена в блок инициализатора:

{ 
    aClient.setClientName("Michael"); 
} 

Так оно выполняется после создания aClient.

Код здесь запускается для каждого экземпляра Report. К сожалению, вы не можете установить для него параметры. Если вы хотите сделать это, поместите этот блок в конструкторе:

public Report (String clientName) { 
    aClient.setClientName(clientName); 
    //aClientLawn.setLawnWidth(10); 
    //aClientLawn.setLawnLength(10); 
} 
+0

В этом контексте они называются «Блоки инициализатора». Анонимный блок используется для ограничения объема переменных внутри метода. –

0

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

Client aClient = new Client(); 
aClient.setClientName("Michael"); 

Они должны быть обернуты внутри метода, такие как конструктор класса:

public class Report { 
    public Report() { 
     Client aClient = new Client(); 
     aClient.setClientName("Michael"); 
    } 

    // .... 
} 

похоже, что вы хотите, чтобы этот код исполняемым, хотя, в этом случае вы хотите, чтобы положить все, что в main метод, такой как:

public class Report { 
    public static void main(String... args) { 
     Client aClient = new Client(); 
     aClient.setClientName("Michael"); 
     System.out.println(aClient.getName()); 
    } 
} 

Вы можете скомпилировать и выполнить Report класс.

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