Урок 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. Andrew:

    Огромное спасибо Мария за ответы.
    А вот вы в этой главе на примере сделали метод вот так :
    //кот говорит
    public String speak(String words){
    String phrase = words + «…mauu…\n»;
    return phrase;
    }

    получается тоже в сложном примере не подойдет и нужно так :
    //кот говорит
    public String speak(String words){
    String phrase;
    phrase = words + «…mauu…\n»;
    return phrase;
    }
    или же есть разница которую я не улавливаю между вашим и моим примером ?

  2. Эдуард:

    Здравствуйте! Всё замечательно работает, даже понасоздавал своего. Но вот что получается. Эклипс все методы и данные потребовал сделать static.

    private static String peredacha = «Привет классу «;

    Так работает, а без этого, почему-то нет. В дебри лезть не стал, решил спросить, может, знаете, почему?

    • Мария (admin):

      Здравствуйте, не видя кода сказать сложно. Можете послать на , посмотрю.

  3. Эдуард:

    Отослал

  4. Дмитрий:

    Cat ourcat = new Cat();
    Не могу понять логику, можете разжевать? Или просто тупо запомнить, что для того чтобы использовать методы класса Х с помощью переменной У надо написать
    Х У = new X(); ?

    • Мария (admin):

      Понимайте это как конструкцию для создания экземпляра класса(да, нужно запомнить). У нас есть класс Cat он содержит какие-то характеристики кота (методы и атрибуты), но при этом котом не является. С помощью него можно создать одного кота, потом другого, третьего итп. Для того, чтобы их создать нужна эта конструкция. Создадим 3х котов, например

      Cat cat1 = new Cat();
      Cat cat2 = new Cat();
      Cat cat3 = new Cat();

      Здесь cat1, cat2, cat3 это имена этих котов. Cat это указание того, что эти коты являются котами типа Cat и могут использовать методы из класса Cat. new Cat() указывает на то, что мы именно создаем нового кота (наовый экземпляр класса Cat), а не присваиваем новое имя какому-то уже созданному коту.

      Еще небольшой пример :

      Cat barsik = new Cat();
      Cat vaska = barsik;

      Сначала (в первой строке) мы создали нового кота barsik, а потом (во второй строке) ему дали новое имя vaska. В итоге кот у нас один, а имени у него 2. Если бы мы написали так:
      Cat barsik = new Cat();
      Cat vaska = new Cat();

      То кота бы было 2 и они бы имели разные имена

  5. Данте:

    здраствуйте! просто чудесно объясняете,как я раньше на ваш сайт не наткнулся, все просто и понятно. Но вот тут что то я сам не могу понять

    1.Cat ourcat = new Cat();

    *new Cat* то есть конструктор new создает экземпляр класса Cat правильно ли я понял эту часть строки?

    2.*Cat ourcat* переменная типа Cat , а что будет если не указать тип переменной Сat? и просто написать ourcat=new cat();зачем нужно указывать тип переменной тут?

    В этой строке происходят следующие действия ? = получается переменной ourcat типа Сat присваивается экземпляр класса Сat?

    • Мария (admin):

      Здравствуйте! спасибо!
      1. Правильно.
      2. В языке Java нельзя не указывать тип. Если не укажете, то компилятор будет ругаться, что вы не объявили переменную ourcat (можете попробовать — увидите ошибку). Но можно запись разделить на 2.
      Cat ourcat; // объявили переменную типа Cat (Переменная ourcat на данный момент содержит значение NULL)
      ourcat = new Cat(); // создали экземпляр класса Cat (Переменной ourcat присваивается экземпляр класса Cat)

      • Данте:

        Cat ourcat* а разве Cat является типом переменной? я думал что типы переменных бывают только такими *int,char,string и т.д.

        • Данте:

          ну например
          int x или string y
          а вот как Cat может быть типом переменной я никак не могу понять

          • Мария (admin):

            точно так как int x. Только при int x переменная x типа int, a при Cat myCat переменная myCat типа Cat

            int, char итд — примитивные типы.
            String — объектный тип, из стандартной библиотеки java.lang. Там существует такой класс String.
            В качестве типа также выступает любой созданный нами класс при создании экземпляра класса. Так что Cat здесь это тоже объектный тип.
            Читайте следующий урок https://study-java.ru/uroki-java/urok-6-sintaksis-java-peremennye-i-tipy-dannyh/

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