Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
169.47 Кб
Скачать

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

Классы в Java содержат переменные-члены класса, а также методы и конструкторы. Все функции определяются внутри классов и называются методами; невозможно создать метод, не являющийся методом класса или объявить метод вне класса; спецификаторы доступа public, private, protected воздействуют только на то, перед чем они стоят; элементы по умолчанию доступны для классов из данного пакета. Объявление класса имеет вид:

[спецификаторы] class имя_класса [extends суперкласс]  [implements список_интерфейсов]

{/*определение класса*/}

Спецификатор доступа класса может быть public (класс доступен объектам данного пакета и вне пакета), final (класс не может иметь подклассов), abstract (класс содержит абстрактные методы, объекты такого класса могут создавать только подклассы). По умолчанию спецификатор устанавливается в friendly (класс доступен в данном пакете). Данное слово при объявлении вообще не используется и не является ключевым словом языка, мы его используем для обозначения.

/* пример # 5 : простой пример класса : Subject.java */

class Subject {

     public String name;

     private int age;

     public Subject() {//конструктор

         name = "NoName";

         age = 0;

     }

public Subject(String n) {//конструктор

         name = n;

     }

     public void setAge(int a) {//метод

         age = a;

     }

Void show() { //метод

System.out.println("Имя: " + name + ", Возраст: " + age);

     }

}

Класс Subject содержит два поля name и age, помеченные как public и private. Значение поля age можно  изменять только при помощи методов, например, setAge(). Поле name доступно и напрямую через объект класса Subject. Доступ к методам и public полям данного класса осуществляется только после создания объекта данного класса.

/* пример # 6 : объявление объекта, доступ к полям и методам объекта : SubjectDemo.java */

public class SubjectDemo {

     public static void main(String[] args) {

         Subject ob = new Subject("Балаганов");

         ob.name = "Шура Балаганов";

         //ob.age = 19;// поле недоступно

         ob.setAge(19);

         ob.show();

     }

}

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

Имя: Шура Балаганов, Возраст: 19

Классы из примеров 5 и 6 можно сохранять перед компиляцией в одном файле SubjectDemo.java, причем имя этому файлу дается по имени public класса, то есть SubjectDemo.

Объект класса создается за два шага. Сначала объявляется  ссылка на объект класса. Затем с помощью оператора new создается экземпляр объекта, например:

String str; //объявление ссылки

str = new String(); //создание объекта

Однако эти два действия обычно объединяют в одно:

String s = new String();/*объявление ссылки и создание объекта*/

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

Операции сравнения ссылок не имеют особого смысла. Для сравнения значений объектов необходимо использовать соответствующие методы, например equals(). Этот метод наследуется в каждый класс из суперкласса Object, который лежит в корне дерева иерархии классов. x.equals(y) возвращает true, если x и y ссылаются на один и тот же объект. Рассмотрим пример:

/* пример # 7 : сравнение строк и объектов : ComparingStrings.java */

public class ComparingStrings {

  public static void main(String[] args) {

         String s1, s2;

         s1 = "abc";

         s2 = s1; // переменная ссылается на ту же строку

System.out.println("сравнение ссылок " + (s1 == s2)); //true

s1 += 'd';//создание нового объекта добавлением символа

//s1-="a";//ошибка, вычитать строки нельзя

System.out.println("сравнение ссылок " + (s1 == s2)); //false

s2 = new String(s1);//создание нового объекта копированием

System.out.println("сравнение ссылок " + (s1 == s2)); //false

System.out.println("сравнение значений " + s1.equals(s2)); //true

     }

}

Объекты можно преобразовывать друг к другу с помощью соответствующих методов и конструкторов. В следующем примере с консоли (из потока System.in) считываются  три цифровые строки, преобразуются в объекты класса Integer  с помощью метода Integer.valueOf(), а затем объекты класса Integer преобразуются в целые  числа типа int с помощью метода intValue() этого же класса.

/* пример # 8 : чтение строк из консоли и преобразование их к целым числам  : ConsoleStringInt.java */

import java.io.*;

public class ConsoleStringInt {

     public static void main(String[] args) {

//буферизация входного потока

         BufferedReader br =

new BufferedReader(new InputStreamReader(System.in));

//объявление массива строк

         String masStr[] = new String[3];

//объявление массива целых чисел

         int masInt[] = new int[3];

         try {

System.out.print("введите целое число и нажмите Enter ->");

              for (int i = 0; i < 3; i++) {

//чтение строки, содержащее целое число

                   masStr[i] = br.readLine();

//преобразование строки к целому числу

     masInt[i] = Integer.valueOf(masStr[i]).intValue();

              }

     System.out.print("массив: ");

              for (int i = 0; i < 3; i++) {

                   System.out.print(masInt[i] + "; ");

              }

//обработка ошибки чтения с консоли

     } catch (IOException e) {

         System.out.print("ошибка ввода " + e);

//обработка ошибки при неправильном формате целого числа 

        } catch (NumberFormatException e) {

         System.out.print("невозможно преобразовать строку в числовой формат " + e);

         }

     }

}

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

введите целое число и нажмите Enter ->

345

5

48

массив: 345; 5; 48;

При  вводе символов, не являющихся цифрами, на экран будет выдано сообщение об ошибке преобразования их к целому числу.

Задание:

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