4Java.ru

Регистрация


Учебник для начинающих
Обзор языка
Установка и настройка
Синтаксис
Классы и объекты
Типы данных и литералы
Типы переменных
Модификаторы
Операторы
Циклы и операторы цикла
Цикл while
Цикл for
Улучшенный цикл for
Цикл do..while
Оператор break
Оператор continue
Операторы принятия решений
Оператор if
Оператор if..else
Вложенный оператор if
Оператор switch..case
Условный оператор (? :)
Числа
Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
Метод compareTo()
Метод equals()
Метод valueOf()
Метод toString()
Метод parseInt()
Метод Math.abs()
Метод Math.ceil()
Метод Math.floor()
Метод Math.rint()
Метод Math.round()
Метод Math.min()
Метод Math.max()
Метод Math.exp()
Метод Math.log()
Метод Math.pow()
Метод Math.sqrt()
Метод Math.sin()
Метод Math.cos()
Метод Math.tan()
Метод Math.asin()
Метод Math.acos()
Метод Math.atan()
Метод Math.atan2()
Метод Math.toDegrees()
Метод Math.toRadians()
Метод Math.random()
Символы
Метод Character.isLetter()
Метод Character.isDigit()
Метод Character.isWhitespace()
Метод Character.isUpperCase()
Метод Character.isLowerCase()
Метод Character.toUpperCase()
Метод Character.toLowerCase()
Метод Character.toString()
Строки
Метод charAt()
Метод compareTo()
Метод compareToIgnoreCase()
Метод concat()
Метод contentEquals()
Метод copyValueOf()
Метод endsWith()
Метод equals()
Метод equalsIgnoreCase()
Метод getBytes()
Метод getChars()
Метод hashCode()
Метод indexOf()
Метод intern()
Метод lastIndexOf()
Метод length()
Метод matches()
Метод regionMatches()
Метод replace()
Метод replaceAll()
Метод replaceFirst()
Метод split()
Метод startsWith()
Метод subSequence()
Метод substring()
Метод toCharArray()
Метод toLowerCase()
Метод toString()
Метод toUpperCase()
Метод trim()
Метод valueOf()
Классы StringBuilder и StringBuffer
Метод append()
Метод reverse()
Метод delete()
Метод insert()
Метод replace()
Массивы
Дата и время
Регулярные выражения
Методы
Потоки ввода/вывода, файлы и каталоги
Класс ByteArrayInputStream
Класс DataInputStream
Класс ByteArrayOutputStream
Класс DataOutputStream
Класс File
Класс FileReader
Класс FileWriter
Исключения
Встроенные исключения
Вложенные и внутренние классы
Наследование
Переопределение
Полиморфизм
Абстракция
Инкапсуляция
Интерфейсы
Пакеты
Структуры данных
Интерфейс Enumeration
Класс BitSet
Класс Vector
Класс Stack
Класс Dictionary
Класс Hashtable
Класс Properties
Интерфейс Map

Классы и объекты

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

  • полиморфизм;
  • наследование;
  • инкапсуляция;
  • абстракция;
  • классы;
  • объекты;
  • экземпляр;
  • метод;
  • парсинг.

В этом уроке мы рассмотрим объекты и классы в Java, их концепции.

Класс может быть определен как шаблон (обозначен зеленым цветом), который описывает поведение объекта, который в свою очередь имеет состояние и поведение. Он является экземпляром класса. Например: собака может иметь состояние — цвет, имя, а также и поведение — кивать, лаять, есть.

Объекты в Java

Давайте теперь посмотрим вглубь, что является объектами. Если мы рассмотрим реальный мир, то найдём много предметов вокруг нас, автомобили, собаки, люди, и т.д. Все они имеют состояние и образ жизни.

Если учесть, собаку, то ее состояние — имя, порода, цвет, а образ жизни - лай, виляние хвостом, бег.

Если сравнить программный объект в Java с предметов из реального мира, то они имеют очень схожие характеристики, у них также есть состояние и поведение. Программное состояние хранят в полях, а поведение отображается через методы.

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

Классы в Java

Класс, из которого создаются отдельные объекты, обозначен зеленым цветом.

Пример создания класса в Java, приводится ниже:

public class Dog{
   String breed;
   int age;
   String color;

   void barking(){
   }
   
   void hungry(){
   }
   
   void sleeping(){
   }
}

Класс может содержать любой из следующих видов переменных:

  • Локальные переменные, определенные внутри методов, конструкторов или блоков. Они будут объявлены и инициализированы в методе, и будут уничтожены, когда метод завершится.
  • Переменные экземпляра являются переменными в пределах класса, но и снаружи любого метода. Они инициализируются при загрузке. Переменные экземпляра могут быть доступны из внутри любого метода, конструктора или блоков этого конкретного класса.
  • Переменные класса или статические переменные класса в Java объявляются в классе вне любого метода с помощью статического ключевого слова.

В Java классы могут иметь любое количество методов для доступа к значению различных видов методов. В приведенном выше примере, barking(), hungry() и sleeping() являются методами.

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

Конструктор класса

При обсуждении вопроса класса, одной из наиболее важных подтем в Java является конструктор. Каждый класс имеет конструктор. Если мы не напишем его или, например, забудем, компилятор создаст его по умолчанию для этого класса.

Каждый раз, когда в Java создается новый объект, будет вызываться по меньшей мере один конструктор. Главное правило является то, что они должны иметь то же имя, что и класс, который может иметь более одного конструктора.

Пример конструктора приведен ниже:

public class Puppy{
   public Puppy(){
   }

   public Puppy(String name){
      // Так выглядит конструктор в Java и у него один параметр, name.
   }
}
Примечание: в следующих разделах мы будем более подробно обсуждать, если у нас будет два разных типа конструкторов.

Создание объекта

Варианты как создать объект в классе следующие:

  • Объявление: объявление переменной с именем переменной с типом объекта.
  • Инстанцирование: используется «новое» ключевое слово.
  • Инициализация: «новое» ключевое слово сопровождается вызовом конструктора. Этот вызов инициализирует новый объект.

Пример приводится ниже:

public class Puppy{

   public Puppy(String name){
      // Это конструктор и у него один параметр, name.
      System.out.println("Передаваемое имя:" + name ); 
   }
   public static void main(String []args){
      // Создание объекта myPuppy.
      Puppy myPuppy = new Puppy( "Багет" );
   }
}

Если Вы скомпилируете и запустите выше программу, то она выдаст следующий результат:

Передаваемое имя: Багет

Доступ к переменным экземпляра и методам в Java

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

/* Сначала создайте объект */ 
ObjectReference = new Constructor();

/* Теперь вызовите переменную следующим образом */ 
ObjectReference.variableName;

/* Теперь Вы можете вызвать метод класса */
ObjectReference.MethodName();

Пример

Этот пример объясняет, как получить доступ к переменные экземпляра и методам класса в Java:

public class Puppy{
   
   int puppyAge;

   public Puppy(String name){
      // Это конструктор и у него один параметр, name.
      System.out.println("Передаваемое имя:" + name ); 
   }
   public void setAge( int age ){
       puppyAge = age;
   }

   public int getAge( ){
       System.out.println("Возраст щенка:" + puppyAge ); 
       return puppyAge;
   }
   public static void main(String []args){
      /* Создание объекта. */
      Puppy myPuppy = new Puppy( "Багет" );

      /* Вызов метод класса, чтобы установить возраст щенка. */ 
      myPuppy.setAge( 2 );

      /* Вызов другого метода класса, чтобы получить возраст щенка. */
      myPuppy.getAge( );

      /* Получение переменной экземпляра класса. */
      System.out.println("Значение переменной:" + myPuppy.puppyAge ); 
   }
}

Если Вы скомпилируете и запустите выше программу, то она выдаст следующий результат:

Передаваемое имя: Багет
Возраст щенка: 2
Значение переменной: 2

Правила объявления классов, операторов импорта и пакетов в исходном файле

В последней части этого раздела давайте рассмотрим правила декларации исходного файла. Эти правила в Java имеют важное значение при объявлении классов, операторов импорта и операторов пакета в исходном файле.

  • В исходном файле может быть только один публичный класс (public class).
  • Исходный файл может иметь несколько "непубличных" классов.
  • Название публичного класса должно совпадать с именем исходного файла, который должен иметь расширение .java в конце. Например: имя класса public class Employee{}, то исходный файл должен быть Employee.java.
  • Если класс определен внутри пакета, то оператор пакет должно быть первым оператором в исходном файле.
  • Если присутствуют операторы импорта, то они должны быть написаны между операторами пакета и объявлением класса. Если нет никаких операторов пакета, то оператор импорта должен быть первой строкой в исходном файле.
  • Операторы импорта и пакета будут одинаково выполняться для всех классов, присутствующих в исходном файле. В Java не представляется возможным объявить различные операторы импорта и/или пакета к различным классам в исходном файле.

Классы имеют несколько уровней доступа и существуют различные типы классов: абстрактные классы (abstract class), конечные классы (final class) и т.д. Обо всем этом обсудим в уроке модификаторы доступа.

Помимо указанных выше типов классов, Java также имеет некоторые специальные классы, называемые внутренние (Inner class) и анонимные классы (Anonymous class).

Java пакет (package)

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

Операторы импорта (import)

Если задать полное имя, которое включает в себя пакет и имя класса, то компилятор может легко найти исходный код или классы. В Java импорт это способ задать правильное место для компилятора, чтобы найти конкретный класс.

Например, следующая строка будет просить компилятор загрузить все классы, доступные в каталоге «java_installation/java/io»:

import java.io.*;

Простой пример по выше описанному

Для нашего обучения создадим два класса. Это будут классы Employee и EmployeeTest.

Для начала откройте блокнот и добавьте следующий код. Помните, что этот класс Employee является открытым или публичным классом. Теперь сохраните исходный файл с именем Employee.java.

Класс Employee имеет четыре переменных экземпляра name, age, designation и salary. Он имеет один явно определенный конструктор, который принимает параметр.

import java.io.*;
public class Employee{
   String name;
   int age;
   String designation;
   double salary;
	
   // Это конструктор класса Employee. 
   public Employee(String name){
      this.name = name;
   }
   // Присвоение возраста работника переменной age.
   public void empAge(int empAge){
      age =  empAge;
   }
   /* Присвоение переменной designation. */
   public void empDesignation(String empDesig){
      designation = empDesig;
   }
   /* Присвоение переменной salary. */
   public void empSalary(double empSalary){
      salary = empSalary;
   }
   /* Вывод подробной информации. */
   public void printEmployee(){
      System.out.println("Имя:"+ name );
      System.out.println("Возраст:" + age );
      System.out.println("Наименование:" + designation );
      System.out.println("Заработная плата:" + salary);
   }
}

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

Ниже приводится класс EmployeeTest, в котором создаются два экземпляра класса Employee и вызывают методы для каждого объекта, для присвоения значений каждой переменной.

Сохраните следующий код в файл «EmployeeTest.java»:

import java.io.*;
public class EmployeeTest{

   public static void main(String args[]){
      /* Создание двух объектов с помощью конструктора. */
      Employee empOne = new Employee("Олег Олегов");
      Employee empTwo = new Employee("Иван Иванов");

      // Вызов метода для каждого созданного объекта.
      empOne.empAge(26);
      empOne.empDesignation("Старший инженер-программист");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Инженер-программист");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

Теперь, скомпилировав оба класса, запустим EmployeeTest и получим следующий результат:

C:> javac Employee.java 
C:> vi EmployeeTest.java 
C:> javac EmployeeTest.java 
C:> java EmployeeTest 
Имя: Олег Олегов 
Возраст: 26 
Наименование: Старший инженер-программист 
Заработная плата: 1000.0 
Имя: Иван Иванов
Возраст: 21 
Наименование: Инженер-программист 
Заработная плата: 500.0

В следующем уроке обсудим основные типы данных, и как они могут быть использованы при разработке java-приложений.

© 4Java.ru