Урок J-5. Создание класса и обращение к нему в Java

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

Но давайте перейдем от теории к практике и научимся создавать объект в java. В этом уроке будет рассмотрено создание класса на языке java и последующее обращение к этому классу, то есть мы научимся основам работы с классами.

Создание класса в java

Создавать класс мы будем в программе Ecllipse, но также можно работать в любой другой IDE или в блокноте. В качестве примера мы будем создавать класс, который описывает характеристики и поведение кота.

Вспомним урок 3, и создадим в нашем проекте новый класс под именем Сat. Для этого в меню Ecllipse выберем  File -> new  -> class  и, в открывшемся окне, введем имя класса – Сat (обязательно с большой буквы!). Обратите внимание, что галочка public static void main (String[] args) должна быть снята! Затем нажмем Finish (рис 5.1).

lesson5_classcat

Рис 5.1.

В итоге, у нас создался новый класс (рис 5.2).

lesson5_classcat2

Рис 5.2.

Структура класса в java

Класс в java оформляется с помощью следующей конструкции:

public class Cat {

}

Рассмотрим ее составляющие:

public – модификатор доступа к классу, в данном случае он нам говорит, что этот класс будет доступен не только данному классу, но и другим. В java существуют и другие  модификаторы, но об этого поговорим позднее.

class – ключевое слово, говорящее о том, что это класс.

Cat – имя класса. Имена классов принято писать с заглавной буквы.

{ } – фигурные скобки, между которыми разместится тело нашего класса.

 

В предыдущем уроке мы упоминали, что классы в java состоят из атрибутов и методов, присвоим некоторые и нашему коту.

 

Атрибуты класса Сat

Атрибутами кота могут быть: имя, вес, окраска. Атрибуты это переменные, которые объявляются следующим образом:

  private int weight; // вес кота
  private String name; // имя кота
  private String color; //окрас кота

private  – здесь опять же указывает на права доступа. К переменной, в данном случае, можно обращаться только из ее класса, чтобы классы извне не могли ее изменить (вспомним инкапсуляцию из урока 4).

int, String – это типы данных. В данном случае вес будет задан при помощи целого числа – int, a имя и цвет при помощи символьной строки String.

После объявления каждого атрибута должна ставиться точка с запятой ;

При помощи // в коде программы оформляются комментарии, которые являются правилом хорошего тона.

 

Методы класса Сat

Пусть наш кот умеет есть, спать и разговаривать. Опишем это поведение с помощью методов.

 //кот ест
 public void eat(){
 	System.out.print("Eating...\n");
 }

public void eat() – сигнатура метода, его определение. В данном случае она нам говорит о том, что:

  • метод eat() доступен для других классов  –  public;
  • метод  eat() не возвращает никаких данных  –  void.

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

После сигнатуры метода идут фигурные скобки { }. В них содержится тело метода. Тело нашего метода содержит просто вывод сообщения о том, что кот кушает — "Eating...\n". За вывод текстового сообщения отвечает метод  System.out.print("Eating...\n").

\n — символ перевода строки, чтобы при выводе наших сообщений все они не писались в одну строку.

 

Аналогично предыдущему методу опишем спящего кота:

 //кот спит
 public void sleep(){
	System.out.print("Sleeping zz-z-z-z...\n");
 }

 

И немного иначе опишем метод – кот говорит:

//кот говорит
public String speak(String words){ 
	String phrase = words + "...mauu...\n";
	return phrase;
}

В отличие от предыдущих методов этот метод возвращает значение и имеет входные параметры.  Давайте подробнее рассмотрим сигнатуру метода public String speak(String words):

public —  метод speak() доступен для других классов;

String — тип значения, которое возвращает метод.  В предыдущих случаях ключевое слово void указывало на то, что метод ничего не возвращает. В данном случае  String  указывает на то, что метод возвращает значение типа строка.

Что же это значит? В процессе своей работы метод выполняет определенные действия над данными. Иногда необходимо, чтобы результат этих действий был передан для дальнейшей обработки другим классам, в этом случае метод передает (возвращает) этот результат. Эти возвращаемые данные относятся к какому-либо типу. В нашем примере это тип символьной строки, String.

Возвращающие методы должны содержать в своем теле ключевое слово return, которое указывает на то, что именно возвращает данный метод. В нашем случае это переменная phrase.

speak — имя метода.

(String words)  — входные параметры.  Входные параметры — это какие-либо данные, которые передаются из других классов и, которые  метод должен обработать. Наш метод получает в качестве входных данных строку в виде переменной words, к этой строке дописывает «...mauu...» и возвращает то, что получилось.

 

В итоге класс Cat выглядит следующим образом:

public class Cat {

	private int weight; // вес кота
	private String name; // имя кота
	private String color; //окрас кота

	//кот ест
	public void eat(){
		System.out.print("Eating...\n");
	}

	//кот спит
	public void sleep(){
		System.out.print("Sleeping zz-z-z-z...\n");
	}

	//кот говорит
	public String speak(String words){ 
		String phrase = words + "...mauu...\n";
		return phrase;
	}

}

Обращение к классу в Java

Далее рассмотрим обращение к классу Cat.  И то, как его использовать в работе.

Перейдем в класс HelloWorld, который мы создавали в уроке 3 и немного его модифицируем.  Удалим  строку  System.out.println("Hello World"); , чтобы у нас осталось только следующее (рис 5.3).:

public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

	}
}
lesson5_classcat3

Pис 5.3.

 

Если вы не проходили урок 3 и не создавали класс HelloWorld, то вам его нужно создать: File -> new  -> class,  ввести в открывшемся окне имя класса и в этот раз обязательно установить галочку  public static void main(String[] args).

public static void main(String[] args) – сигнатура метода main(). Программа состоит из нескольких классов, но только один из классов может содержать метод main(). Mетод main(), это так называемая точка входа в программу. Без этого метода мы не сможем стартовать программу. Теперь, вместо приветствия миру, этот метод будет содержать код для работы с классом Cat.

Пишем в тело метода main()  (между его фигурными скобками) следующие строки:

 Cat ourcat = new Cat();
 ourcat.eat();
 ourcat.sleep();
 String say = ourcat.speak("Play with me");
 System.out.println(say);

Разберем подробнее, что это значит.

Прежде чем вызывать созданные нами методы в классе Cat и заставить нашего кота есть, спать и говорить, сперва нужно создать экземпляр класса (инстанцию).

 Cat ourcat = new Cat();

Данная строчка нам говорит о том, что в памяти создан экземпляр объекта Cat, а переменная ourcat типа Cat (такого же, как и наш объект) указывает на то место в памяти, где был этот объект создан.

Переменную ourcat теперь можно использовать для вызова методов класса Cat, например:

 ourcat.eat();
 ourcat.sleep();

При вызове этих методов в программе Eclipse удобно пользоваться комбинацией клавиш

Ctrl + пробел, после введения имени переменной и точки (рис 5.4). Программа подскажет, какие можно использовать методы для данной переменной.

lesson5_eclipse

Рис. 5.4.

 

Если метод возвращает какое-либо значение, например, как наш метод speak() возвращает значение типа String, то его можно вызывать следующим образом:

  • объявить переменную такого же типа, что и возвращаемое значение (в нашем случае String)
  • присвоить ей вызванный метод, например:
String say = ourcat.speak("Play with me");

Вспомним, что при описании нашего метода он содержал параметры speak(String words). Теперь, при вызове в качестве параметра выступила фраза "Play with me", метод speak() ее обработал и вернул "Play with me...mauu...".  Именно это значение он присвоил переменной say.

Мы это можем проверить, выведя say на печать при помощи команды:

System.out.println(say);

Итак, наш класс HelloWorld теперь выглядит следующим образом:

public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Cat ourcat= new Cat();
		ourcat.eat();
		ourcat.sleep();
		String say = ourcat.speak("Play with me");
		System.out.println(say);
	}

}

 

Теперь сохраним (Ctrl+Shift+S или saveall) и запустим (play) нашу программу. При запуске Eclipse может предложить выбрать Java Applet или Java Application. Нужно выбрать Java Application (рис 5.5).

lesson5_javaapplication

Рис. 5.5

В качестве результата внизу в консоли мы получаем следующие строки.

Eating...
Sleeping zz-z-z-z...
Play with me...mauu...
lesson5_result

Рис. 5.6.

 

На этом закончим данный урок,  итак, в этом уроке мы:

  • Научились создавать класс в java.
  • Научились объявлять атрибуты и методы класса.
  • Узнали, что методы могут возвращать или не возвращать значения, иметь или не иметь входных параметров.
  • Узнали что такое метод main().
  • Научились создавать экземпляр класса и вызывать его методы, то есть работать с созданным объектом.

Для закрепления материала предлагаю самостоятельно создать класс Dog, где описать характеристики и поведение собаки,  а потом вызвать этот класс из HelloWorld.  Свои вопросы можете оставлять в комментариях.

Комментарии и пинги к записи запрещены.

Комментариев к записи: 115

  1. Artem:

    Добрый день, Мария. Объяснения просто супер четко и понятно, но вопросы все — таки возникли. При создании нового класса создаются файлы, как я понял несколько — один формата JAVA, второй формата CLASS. Верно или я что — то путаю? Если, к примеру существует файл формата CLASS, но без файла с форматом JAVA, существует ли возможность прочесть его код? Можете более подробно описать структуру создаваемых файлов, может быть в отдельной главе.
    Спасибо за статью и заранее спасибо за ответ.

    • Мария (admin):

      Здравствуйте, Артем, про файлы .java и .class косвенно упоминалось в уроке 2. В эклипсе и любой IDE все происходит подобным образом. Когда вы создаете класс у вас создается файл .java в нем вы пишете программу на языке java в этих файлах вы можете прочесть код. Когда вы компилируете программу (файлы типа .java) у вас создается файл типа .class в котором уже находится байт-код, понятный для Java Virtual Machine (JVM). В эклипсе при нажатии Run у вас происходит 2 вещи. Код компилируется и создается файл .class в котором ваш java код переведен в байт код, и потом JVM запускает код из файла .class

  2. Наталья:

    Здравствуйте, не могу запустить вашу программу на Netbeans. Программа выдает такой результат:
    Error: Could not find or load main class project1.Project1
    Java Result: 1

    • Мария (admin):

      такая ошибка обычно говорит о том, что размещение файла .class не соответствует пути, указанному в classpath, наверное что-то в настройках Netbeans не так, если с консоли запускается нормально.

  3. Игорь:

    public class HelloWorld {

    public static void main(String[] args) {
    cat ourcat= new cat();
    ourcat.eat();
    ourcat.sleep();
    String say = ourcat.speak(«Play with me»);
    System.out.println(say);

    // TODO Auto-generated method stub

    }

    }
    Посмотрите в первой строчке слово сat получается написать только с маленькой буквы, если написать Сat c большой выскакивает ошибка :Multiple markers at this line как её можно исправить?

    • Мария (admin):

      А вы когда создавали класс Cat вы его с какой буквы назвали?

      • Игорь:

        С маленькой буквы.

        • Мария (admin):

          Вот поэтому с большой и не получается. В Java имена классов, методов, переменных чуствительны к регистру. Сat и cat это разные имена, и если вы создали класс и назвали cat, то класса Cat не существует. А еще есть соглашение по оформлению кода в Java (Java Code Conventions), согласно которому классы нужно называть только с большой буквы, а переменные и методы с маленькой. Поэтому переименовывайте

  4. Ruddy:

    Добрый день, подскажите пожалуйста, как работает переменная phase в описанном вами примере в методе //кот разговаривает. Не понятно куда phase возвращается и как задействовано. У меня программа выдает ошибку в этом месте.

    • Мария (admin):

      Переменная в моем примере называется phrase, может вы ее в разных местах по-разному назвали, из-за этого ошибка? Было бы хорошо, если бы вы указали какая имено ошибка, ато они разные бывают, а я не экстрасенс)
      Работает так: в методе main вы вызываете метод speak, как это описано в примере.
      String say = ourcat.speak(«Play with me»);
      Фраза «Play with me» передается методу speak в переменную words. Затем в методе speak объявляется новая строковая пременная phrase. Этой переменной присваивается значение переменной words («Play with me» ) и плюс строка «…mauu…» Итого в переменной phrase имеем строку «Play with me…mauu…». Эту строку мы возвращаем, тоесть передаем туда, где был вызван метод speak в методе main.
      Вызван он был так
      String say = ourcat.speak(«Play with me»)
      Результатом работы ourcat.speak(«Play with me») является строка «Play with me…mauu…», следовательно переменная String say теперь содержит строку «Play with me…mauu…»

      • Ruddy:

        Извините, забыл дописать описание ошибки

        Reports unnecessary local variables, which add nothing to the comprehensibility of a method. Variables caught include local variables which are immediately returned, local variables that are immediately assigned to another variable and then not used, and local variables which always have the same value as another local variable or parameter.

        • Мария (admin):

          Так у вас это ошибка или предупреждение? Ошбика это Error, если в коде есть ошибки, то его нельзя скомпилировать. Предупреждение это Warning, подчеркивается желтым и с ним можно жить и компилироваться. В данном случае джава считает, что переменная используется избыточно, и можно обойтись и без нее. Обойтись можно, но данный пример был приведен для наглядности передачи параметров в метод и возвращения значения.

  5. Ирина:

    Здравствуйте.
    Не могу понять, где ошибка.
    [img]http://u.pikucha.ru/idgcn/2014-06-24+21-26-08+%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82+%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0.png?referrer=http%3A%2F%2Fpikucha.ru%2F[/img]
    C уважением, Ирина.

    • Мария (admin):

      Добрый день, Ирина, у вас скобок не хватает после new Cat: ourcat= new Cat();

      • Ирина:

        Спасибо огромное! Это все моя невнимательность. Вы, кажется, где-то поясняли про эти скобки. но я еще не совсем уяснила, где конкретно их требуется ставить.

Все материалы сайта study-java.ru являются результатом труда его авторов. Копирование материалов в некоммерческих целях без указания источника в виде прямой ссылки на сайт study-java.ru запрещено. Использование материалов в коммерческих целях разрешено только с письменного согласия автора. Нарушение авторских прав преследуется по закону.