Конструктор
A class is a template defined at compile-time to be used at runtime for instantiating objects. Like a cookie-cutter is a template for stamping out a series of cookies.
Each time your app makes another object, another HangMen game in this case, you may need some set-up work to be done to get that object ready for work. This work is usually done in a конструктор метод. Конструктор - это специальный метод, имя которого совпадает с именем класса. Конструктор также отличается тем, что в нем не указано возвращаемое значение; все остальные методы должны указывать тип возвращаемого значения или указывать void
, в то время как конструктор не делает ни того, ни другого. Платформа Java гарантирует, что конструктор будет работать до полного завершения до , когда объект будет введен в эксплуатацию.
Вы можете думать о конструкторе как об этом моменте, вырезая печенье, где вы можете его украсить. Только после того, как оформление завершено, вы кладете печенье на блюдо, которое нужно съесть, например, готовите объект, который нужно запустить.
Подсказка: я считаю полезным пометить мои методы конструктора строкой комментария. Облегчить сканирование при чтении кода.
Этот процесс создания, подготовки, ввода в эксплуатацию и, в конечном итоге, остановки части программного обеспечения во время выполнения известен как жизненный цикл и является одной из ключевых концепций, которую необходимо изучить в программировании.
Чтобы сохранить список строк для использования после начальной конструкции, определите переменную как поле члена в классе.
И, кстати, в современной Java вам не нужно повторять < String >
на ArrayList
, так как компилятор может это выяснить.
Обязательно изучите и соблюдайте соглашения об именах Java. Имя класса должно начинаться с заглавной буквы. Так что HangMen
, а не hangMen
. Напротив, переменные, содержащие ссылку на объект (экземпляр), начинаются со строчной буквы.
public class HangMen{
// ----| Members |------------------------
private List< String > stage ;
// ----| Constructor |------------------------
public HangMen() {
this.stage = new ArrayList<>() ;
stage.add("-------");
stage.add("| |");
stage.add("|");
stage.add("|");
stage.add("|");
stage.add("|");
stage.add("|___________");}
}
public void report() {
System.out.println( "stage: " ) ;
System.out.println( this.stage.toString() ) ;
}
}
Давайте попробуем этот класс в методе main
.
HangMen hangMen = new HangMen() ; // Invokes your constructor implicitly. At runtime, the class `HangMen` (note the uppercase `H`) is used to create a new instance (new object). A reference to the object is assigned to the variable named `hangMen` (note the lowercase `h`).
hangMen.report() ; // Invokes the `report` method for this instance (this object).
Обратите внимание на вариант использования this.stage
против stage
. this.
дает понять, что вы имеете в виду переменную-член, а не локальную переменную. Компилятор обычно может определять самостоятельно, когда вы ссылаетесь на переменную-член в сравнении с локальной переменной. В предыдущие годы я предпочитал использовать this.
, чтобы сделать чтение кода достаточно ясным. Но теперь IDE s с их функциями окраски предоставляют визуальную подсказку, какие переменные являются членами по сравнению с локальными. Поэтому вы можете пропустить префикс this.
. Я показал оба здесь в качестве примера.
Совет. Для ясности не помещайте метод main
в свой класс HangMen
. Поместите его в другой класс с именем типа App
в своем собственном файле .java
. Метод main
- это, по сути, необходимое зло, просто не-объектно-ориентированный взлом, чтобы запустить наши объектно-ориентированные небеса из холодного и жестокого мира аппаратного обеспечения, операционных систем и консолей командной строки. Разделение и в основном игнорирование метода main
может помочь в изучении Java.
public class App {
public static void main( String[] args ) {
HangMen hangMen = new HangMen() ; // Invokes your constructor implicitly. At runtime, the class `HangMen` (note the uppercase `H`) is used to create a new instance (new object). A reference to the object is assigned to the variable named `hangMen` (note the lowercase `h`).
hangMen.report() ; // Invokes the `report` method for this instance (this object).
}
}