#7. Вводный курс по JAVA. Объекты, конструкторы

<<Предыдущий урок   Список уроков   Следующий урок>>

Объекты

Почти весь код, написанный на языке Java – это классы и объекты, т.к. java – объектно ориентированный язык. Java-объекты хранят свое состояние в переменных, эти  переменные еще называют полями или членами экземпляра класса. Больше об объектах читайте по ссылке: Создание собственных классов в Java (продолжение), класс Object

Давайте начнем с примера:

class Point {
    int x;
    int y;
}

Этот класс определяет точку с координатами X и Y.

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

Point p = new Point();

При этом используется так называемый конструктор по умолчанию (или конструктор без параметров) — это специальный метод класса, мы его не определяли явно, но даже если его не определить, он создаётся автоматически, выполняется при создании каждого нового объекта и присваивает первоначальные значения его свойствам (инициализирует их).

От методов в java конструктор отличается тем, что имеет то же самое имя, что и класс, в котором он определен, а также не имеет типа возвращаемого значения. Конструктор в java возвращает новый объект – экземпляр родительского класса). Больше о конструкторах читайте по ссылке: Создание собственных классов в Java: свойства, методы, конструкторы

Мы можем определить наш собственный конструктор. Поскольку методы можно перегружать, а конструктор является методом, то с помощью перегрузки можно создать дополнительные варианты конструкторов. Например, удобно иметь конструктор, который позволит при создании объекта Point явно указывать его координаты:

class Point {
    int x;
    int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

Это означает, что мы не можем больше использовать конструктор по умолчанию new Point(). Теперь мы можем пользоваться только перегруженным конструктором  с указанием начальных значений new Point(4, 1).

Мы можете определить более чем один конструктор, так что объект класса Point может быть создан несколькими способами. Давайте создадим еще один перегруженный конструктор:

class Point {
    int x;
    int y;

    Point() {
        this(0, 0);
    }

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

Обратите внимание на ключевое слово this. Мы можем использовать его внутри конструктора для вызова другого конструктора (для того, чтобы избежать дублирования кода).

Мы также используем ключевое слово this в качестве ссылки на текущий объект.

После того, как мы определили объект р мы можем получить доступ к X и Y.

p.x = 3;
p.y = 6;

Методы

Теперь мы можем определить методы класса Point.

class Point {
    ... // Наш код ранее
    void printPoint() {
        System.out.println("(" + x + "," + y + ")");
    }

    Point center(Point other) {
        // Возвращает центр между этой и другой точками
        // Заметьте, мы используем целое число, поэтому не получим точное значение
        return new Point((x + other.x) / 2, (y + other.y) / 2);
    }
}

Public и Private

На прошлом уроке мы уже рассматривали модификаторы доступа. Ключевое слово private перед переменной или методом  означает, что только сам класс может получить доступ к переменной или методу, а когда мы используем public это значит, что любой объект может получить к нему доступ. Конструкторы обычно определяют как public, переменные определяют как private, а методы разделяются, некоторые public, а некоторые private, в зависимости от задач. Подробнее о модификаторах доступа читайте по ссылке: Создание собственных классов в Java (продолжение), инкапсуляция, полиморфизм, модификаторы доступа

Упражнение

Напишите новый метод класса Point с названием scale, который сделает точку наполовину ближе к началу координат (0,0). Например, точка с координатами (8, 4) после выполнения метода  scale будет иметь координаты (4, 2).

Дополнительное чтение:


<<Предыдущий урок   Список уроков   Следующий урок>>

Коментарі: 24
  1. tester
    tester

    public class Point {
    public static void scale(int x, int y) {
    x = x/2;
    y = y/2;
    System.out.println(“x=”+x+”; y=”+y+”;”);
    }
    }

    В Main классе делаем вызов:
    Point.scale(8,4);

  2. Константин

    Я сделал вот так:
    public class Student{
    public String name, soname, family;
    public String printFullName(){
    return "Фамилия Имя Отчество: " + (family + " " + name +" "+ soname);
    }
    }

    public class Main {
    public static void main(String[] args) {
    Student a = new Student();
    a.name = "Имя";
    a.soname = "Отчество";
    a.family = "Фамилия";
    System.out.println(a.printFullName());
    }
    }

  3. Dmitriy

    public class Point {
    private int x;
    private int y;

    public Point (int x, int y) {
    this.x=x;
    this.y=y;
    }
    public void Scale (){
    this.x=x/2;
    this.y=y/2;
    System.out.println(“(“+x+” , “+y+”)”);
    }
    }

    public class Main {

    public static void main(String[] args) {
    Point p= new Point(4,6);
    p.Scale();

    }
    }

  4. Serge

    //Point.java

    public class Point {

    private double x;
    private double y;

    public Point(double x, double y) {
    this.x = x;
    this.y = y;
    }

    public void printCoordinates() {
    //метод выводит координаты точки
    System.out.println((this.x) + ” ” + (this.y));
    }

    public void scale() {
    //метод уменьшает каждую координату точки в два раза
    this.x = this.x / 2;
    this.y = this.y / 2;
    }
    }

    //Main.java

    public class Main {

    public static void main(String[] args) {

    Point firstPoint = new Point(24.2, 48.6);
    //строка создаёт новую точку firstPoint

    firstPoint.scale();
    //делаем точку наполовину ближе к началу координат”

    firstPoint.printCoordinates();
    //выводим результат

    }
    }

  5. Александр

    public class Point {
    int x; //Начальная координата Х (если начальная координата не (0;0);
    int y; //Начальная координата У (если начальная координата не (0;0);
    int x1; //Конечная координата Х;
    int y1; //Конечная координата У;

    public String Scale(){
    String s = “;”;
    String Scale = ((x1 + x)/2+s+(y1 + y)/2);
    return Scale;
    }
    public void nachaloScale (int x, int y) {
    this.x = x;
    this.y = y;
    }
    public void konesScale (int x1, int y1){
    this.x1 = x1;
    this.y1 = y1;
    }
    }
    ——————————-
    public class Main {
    public static void main(String[] args) {
    Point p = new Point();
    p.nachaloScale(0,0);
    p.konesScale (8,4);
    String KOO = p.Scale();
    System.out.println(“Seredina: ” + KOO);
    }
    }

  6. Dimon

    При всём уважении, делаете доброе дело, но всё есть моменты не совсем положительные… К выше написанномуБ о том что вы многие моменты не объяснете а просто проговоариваете или молча пиште, хотелось бы что б вы комментировали сложные места или вообще не известные и показывали результат (выведенный итог) который у вас получился и результат (итоговый) заданий. Спасибо

  7. dedPihto

    Victor on 19.02.2016

    Не понял реализацию метода

    Point center(Point other) {

    // Возвращает центр между этой и другой точками

    // Заметьте, мы используем целое число, поэтому не получим точное значение

    return new Point((x + other.x) / 2, (y + other.y) / 2);

    }

    что за «другая» точка, как изначально задать её координаты и как его проверить результат?

    если попытаться написать все это на практике то станет понятнее. но тоже поломал голову оказывается все по хитрому (для новичка): при вызове метода center мы будем писать чтото вроде point1.center(point2) вот и две точки. результатом будет третья.

  8. Victor

    Не понял реализацию метода

    Point center(Point other) {
    // Возвращает центр между этой и другой точками
    // Заметьте, мы используем целое число, поэтому не получим точное значение
    return new Point((x + other.x) / 2, (y + other.y) / 2);
    }

    что за “другая” точка, как изначально задать её координаты и как его проверить результат?

    1. Point p=new Point(4,1);
      Point v=new Point(6,2);
      p.center(v).printPoint();

    2. и то строчку private Point center(Point other) {
      поменял на public Point center(Point other) {

    3. AndreyL
      AndreyL

      А там метод возвращает значение:
      Point p=new Point(4,1);
      Point v=new Point(6,2);
      p.center(v).printPoint();

      поэтому надо p = p.center(v); p.printPoint();

  9. вроде бы переменные ввели

  10. программа что то должна выдавать ?

  11. Nikolay

    Ваши уроки крайне не подробны и вызывают лишь недопонимание. Вы не объясняете то, что написано в вашем коде, вы просто это проговаривайте. Допустим про “new” вы не сказали совершенно ничего, зачем это нужно и для чего. Я советую вам ваши уроки переснять и большую часть перенести на текст. Люди, смотрящие эти уроки никогда не купят у вас ваши платные курсы.

    1. Виталий Непочатов
      admin (автор)

      Спасибо за критику. Обязательно учтем Ваши пожелания к урокам.
      Вы помогаете нам становиться лучше)

  12. Надеюсь правильно:

    public class Point {
    int x;
    int y;

    Point(int x, int y){
    this.x=x;
    this.y=y;
    }

    public void Scale() {
    this.x=x/2;
    this.y=y/2;
    System.out.println(x+” “+y);
    }

    public static void main(String[] args) {
    Point a = new Point(8,4);
    a.Scale();

    }
    }

  13. public void scale(int x, int y){
    this.x=x/2;
    this.y=y/2;

    }

  14. Lain

    Константин Волегов on 06.07.2015, в каком месте там деление на ноль?

  15. тип того вышло, но у меня работает:
    public void scale (){
    if (x != 0 && y != 0){
    x = x/2;
    y = y/2;
    /*если ни одна из координат не 0 */
    }
    else if ( x == 0 ){
    y = y / 2;
    /* если х = 0, исключение деления на 0*/
    }
    else if ( y == 0){
    x = x / 2;
    /* если у = 0, исключение деления на 0*/
    }
    }

    1. Alim

      какая разница ноль/неноль переменная ? условия излишни, надо сразу делить

    2. Papashkin
      Papashkin

      Мне кажется, вот так проще:
      ——————————-
      файл Point.java:

      public class Point{
      private int x;
      private int y;

      public Point(int x,int y){
      this.x = x;
      this.y = y;
      }

      public void printPoint(){
      System.out.println(“(” + x + “;” + y + “)”);
      }

      public static Point scale(Point nova){
      return new Point (nova.x / 2, nova.y / 2);
      }
      }
      ———————————————–
      файл Main.java:

      public class Main{
      public static void main(String[] args){
      Point Coord = new Point(8, 4);
      //Coord.x = 8;
      //Coord.y = 4;
      Coord.printPoint();

      Coord = Point.scale(Coord);
      Coord.printPoint();
      }
      }
      ———————————————-
      Скомпилировал в командной строке и выполнил Main.java.
      Всё нормально выполняется.

Додати коментар