Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемpotor.baikal.ru
1 1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного программирования в языке Java. Классы в Java не обязательно должны содержать метод main. Единственное назначение этого метода - указать интерпретатору Java, откуда надо начинать выполнение программы. Для того, чтобы создать класс, достаточно иметь исходный файл, в котором будет присутствовать ключевое слово class, и вслед за ним - допустимый идентификатор и пара фигурных скобок для его тела. class Point { } Имя исходного файла Java должно соответствовать имени хранящегося в нем класса. Регистр букв важен и в имени класса, и в имени файла. Класс - это шаблон для создания объекта. Класс определяет структуру объекта и его методы, образующие функциональный интерфейс. В процессе выполнения Java- программы система использует определения классов для создания представителей классов. Представители являются реальными объектами. Термины «представитель», «экземпляр» и «объект» взаимозаменяемы.
2 2 Классы в Java Общая форма определения класса (Между - необязательные конструкции) class Имя_класса { type переменная1_объекта; type переменная2_объекта; … type переменнаяN_объекта; type имяметода1(список_параметров) { тело метода; } type имяметода2(список_параметров) { тело метода; } … type имяметодаМ(список_параметров) { тело метода; } Ключевое слово extends указывает на то, что «имя_класса» - это подкласс (наследник) класса «имя_суперкласса». Ключевое слово implements определяет интерфейсы, которые использует новый класс (тип). Во главе классовой иерархии Java стоит единственный ее встроенный класс - Object. Если вы хотите создать подкласс непосредственно этого класса, ключевое слово extends и следующее за ним имя суперкласса можно опустить - транслятор включит их в ваше определение автоматически. Класс Point, приведенный ранее, является наследником класса Object.
3 3 Классы в Java Оператор new Оператор new создает экземпляр указанного класса, возвращает ссылку на вновь созданный объект и выделяет под него динамическую память в куче. Ниже приведен пример создания и присваивание переменной р экземпляра класса Point. Point р = new Point(); Можно создать несколько ссылок на один и тот же объект (создать несколько экземпляров объекта). Приведенная ниже программа создает два различных объекта класса Point.. class Point { public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); } В этом примере снова использовался класс Point, было создано два объекта этого класса. Поскольку класс Point пока пуст (не имеет членов), то написанная программа не будет делать ничего, кроме выделения памяти под объявленные экземпляры класса Point.
4 4 Классы в Java Поля и методы class Имя_класса { type переменная1_объекта; type переменная2_объекта; … type переменнаяN_объекта; type имяметода1(список_параметров) { тело метода; } type имяметода2(список_параметров) { тело метода; } … type имяметодаМ(список_параметров) { тело метода; } Члены-данные класса (поля) – определяют характеристики (свойства) класса Члены-функции класса (методы) – определяют интерфейс (функциональность) класса
5 5 Классы в Java Члены-данные – это объекты любого типа или переменные примитивных типов (которые не являются ссылками). Если поле класса - это ссылка на объект, после объявления необходимо инициализировать эту ссылку, присоединив ее к реальному объекту (используя new). Если поле класса - это примитивный тип, то можно его инициализировать напрямую в точке определения в классе. Поля класса объявляются вне методов, в том числе вне метода main. Объявим класс Point (точка на плоскости) с двумя переменными класса типа int (декартовы координаты точки). В методе main объявим экземпляр класса и определим значения его членов-данных (переменных x и y). Оператор точка используется для доступа к переменным и методам объявленного с помощью new объекта. class Point { int х, у; public static void main(String args[]) { Point p = new Point(); р.х = 10; p.у = 20; System.out.println("x =" + р.х + " у = " + p.y); } Объявление экземпляра класса и выделение пространства Инициализация (задание конкретных значений) переменных экземпляра класса
6 6 Классы в Java Каждый объект держит свое собственное место для своих членов-данных; члены-данные не делятся между объектами. Объявлены два объекта (экземпляра) класса Point и заданы значения переменных класса для обоих созданных экземпляров. class Point { int х, у; public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); p1.х = 10; p1.у = 20; p2.х = 40; p2.у = 33; System.out.println(Первый объект: + "x =" + р1.х + " у = " + p1.y); System.out.println(Второй объект: + "x =" + р2.х + " у = " + p2.y); } Переменные двух разных экземпляров на самом деле независимы (две разные точки на плоскости) и могут быть использованы независимо друг от друга. Класс Point пока не может делать ничего, кроме хранения данных и выдачи их значений для манипуляций в методе main, потому что он не имеет собственных членов-функций (методов). Инициализация конкретными значениями членов-данных обоих экземпляров класса Point
7 7 Классы в Java Методы класса – это подпрограммы, присоединенные к конкретным определениям классов. Они описываются внутри определения класса на том же уровне, что и поля. При объявлении метода задаются тип возвращаемого им результата и список параметров. Общая форма объявления метода, которая называется сигнатурой, такова: имя_метода (список формальных параметров) { /* тело метода:*/ } Спецификатор доступа (public, private, protected или отсутствует) - указание на то, кто и как может использовать данный метод. static (или его отсутствие) – определяет, каким образом данный метод будет использоваться: без объявления конкретного экземпляра класса (только для объявленного объекта). Возвращаемый тип - это тип значения, которое помещается в память из метода после его вызова. Тип результата может быть любым, в том числе и типом void - в тех случаях, когда возвращать результат не требуется. Список формальных параметров - это последовательность пар тип-идентификатор, разделенных запятыми. Если у метода параметры отсутствуют, то после имени метода должны стоять пустые круглые скобки. Список аргументов дает типы и имена, чтобы было понятно, что необходимо передать в этот метод. Имя метода и список аргументов вместе уникально идентифицируют метод.
8 8 Классы в Java Напишем метод для ранее определенного класса Point, который задает начальные значение переменным класса x, y в соответствии со значениями формальных параметров, переданных в него (a, b). В Java отсутствует возможность передачи параметров по ссылке на примитивный тип. В Java все параметры примитивных типов передаются по значению, а это означает, что у метода нет доступа к исходной переменной, использованной в качестве параметра, т.е. нельзя внутри метода записать оператор, изменяющий значение формального параметра. class Point { int х, у; void init(int a, int b) { х = а; y = b; // a++; b-=5; НЕ ДОПУСТИМО! } public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); p1.init(10,20); p2.init(40,33); System.out.println(Первый объект: + "x =" + р1.х + " у = " + p1.y); System.out.println(Второй объект: + "x =" + р2.х + " у = " + p2.y); }} Заменяет инициализацию полей экземпляров в предыдущем примере: p1.х = 10; p1.у = 20; p2.х = 40; p2.у = 33;
9 9 Классы в Java Скрытие переменных представителей (экземпляров класса) { int i = 12; /* операторы*/ { int i = 2; } Не запрещается объявлять формальные параметры методов, совпадающие с именами переменных представителей класса. Для доступа к одноименным переменным текущего объекта используется ссылка this. class Point { int х, у; void init(int х, int у) { this.x = х; this.у = у; } class TwoPointsInit { public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); p1.init(10,20); p2.init(42,99); System.out.println("x = " + p1.x + " у = + p1.y); System.out.println(x = " + p2.x + " у = + p2.y); } В языке Java не допускается использование в одной или во вложенных областях видимости двух локальных переменных с одинаковыми именами, Ссылка this интерпретируется как указание: полям х и y того объекта, который вызовет метод init(x,y), назначить значения, переданные через параметры метода. Для нового типа TwoPointsInit использована композиция объектов из класса Point
10 10 Классы в Java Ключевое слово static Создание класса описывает, как выглядит объект класса и как он будет себя вести. Ничего не происходит, пока не будет создан объект (экземпляр) класса с помощью new. Только тогда создается хранилище данных и становятся доступны методы. static для переменных класса определяет особую неизменяемую часть области данных, существующую независимо от того, сколько объектов создано (или даже ни одного объекта не было создано). static для методов класса дает возможность иметь метод, который не ассоциируется с конкретным экземпляром класса и работает даже если объект не создан. static говорит, что данные или метод не привязаны к определенному экземпляру объекта класса. Таким образом, можно вызвать Статический метод или получить доступ к статическим данным класса без объявления экземпляра класса прямо через указание имени класса: Имя_класса.имя_статического метода(…) или Имя_класса.имя_статической_переменной. Статические методы не могут получить прямой доступ к нестатическим членам или методам простым вызовом этих методов без указания имени объекта (так как нестатические члены и методы должны быть привязаны к определенному объекту).
11 11 Классы в Java Пример использования static-переменных class Point { static int х; int y; public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); Point.x++; // Point.y = 2; p1.x++; p2.y = Point.x + 3; p1.y = 20; } Происходит автоматическая инициализация переменных класса для каждого объявленного экземпляра: х = 0; - static-переменная инициализируется только первый раз y = 0; - каждый раз для обоих экземпляров p1 и p2 Так как static-переменная – общая для всех экземпляров, ее можно вызвать через прямое указание имени класса. При этом, p1.x = 1; p2.x = 1; Недопустимо! y – динамическая переменная, доступ к ней возможен только через экземпляр класса (p1 или p2) Эквивалентно Point.x++; х – статическая переменная, общая для всех экземпляров. При этом, p1.x = 2; p2.x = 2; Динамические поля (в нашем случае переменная y) класса разделяются между объектами. Отсюда: p1.у = 0; p2.y = 5; После этого: p1.у = 20; p2.y = 5; Для переменной x по-прежнему: p1.x = 2; p2.x = 2;
12 12 Классы в Java class Point { int x, y; static void prtPoint(Point q) { System.out.println("x =" + q.x + " у = " + q.y); } public static void main(String args[]) { Point p1 = new Point(); Point p2 = new Point(); p1.x = 10; p1.y = 20; p2.x = 40; p2.y = 33; p1.prtPoint(p1); p2.prtPoint(p1); Point.prtPoint(p2); } Статические методы Допустимый, но не совсем «внятный» способ использования статического метода. В обоих случаях печатаются координаты первой точки x = 10; y = 20; Более правильный способ использования статического метода: печатаются координаты второй точки x = 40; y = 33;
13 13 Классы в Java Статические члены класса. Резюме. Когда static применяется к членам-данным, это изменяет путь создания данных (одни данные для всего класса, против нестатического: один для каждого объекта) static инициализация происходит только при необходимости. Если вы не создаете объект класса, в котором определены static члены, то они никогда не будут созданы. Однако они инициализируются, только когда создается первый объект такого класса (или при возникновении первого static доступа). После этого static объекты не инициализируются повторно. Когда static применяется к методу класса - это позволяет вызывать этот метод без создания объекта (экземпляра класса). Этот эффект используется, в частности, в определении метода main( ), который является точкой входа для запуска приложения. Как и любой метод, статический метод может создавать или использовать именованные объекты того же типа, так что статический метод часто используется как пастух для стада объектов одинакового типа.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.