Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






ObjectName.methodName();




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

Для того чтобы создать метод, нужно внутри объявления класса написать объявление метода и затем реализовать его тело. Объявление метода как минимум должно содержать тип возвращаемого значения (возможен void) и имя метода. В приведенном ниже объявлении метода элементы, заключенные в квадратные скобки, являются необязательными.

[доступ] [static] [abstract] [final] [native]

[synchronized] returnType methodName(список_параметров)

[throws список_исключений]

Как и для полей класса, спецификатор доступа к методам может быть public, private, protected и по умолчанию. При этом методы суперкласса можно перегружать или переопределять в порожденном подклассе.

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

Статические методы и поля

Поля данных, объявленные в классе как static, являются общими для всех объектов класса и называются переменными класса. Если один объект изменит значение такого поля, то это изменение увидят все объекты. Для работы со статическими атрибутами используются статические методы, объявленные со спецификатором static. Такие методы являются методами класса, не привязаны ни к какому объекту и не содержат указателя this на конкретный объект, вызвавший метод. Статические методы реализуют парадигму «раннего связыва­ния», жестко определяющую версию метода на этапе компиляции. По причине недоступности указателя this статические поля и методы не могут обращаться к нестатическим полям и методам напрямую, так как для обращения к статическим полям и методам достаточно имени класса, в котором они определены.

// пример # 4: статические метод и поле: Mark.java

package chapt03;

 

public class Mark {

private int mark = 3;

public static int coeff = 5;

 

public double getResult() {

return (double) coeff *mark/100;

}

public static void setCoeffFloat(float c) {

coeff = (int) coeff*c;;

}

public void setMark(int mark) {

this. mark = mark;

}

//из статического метода нельзя обратиться к нестатическим полям и методам

/*public static int getResult() {

setMark(5);//ошибка

return coeff*mark/100;//ошибка

}*/

}

При создании двух объектов

Mark ob1 = new Mark();

Mark ob2 = new Mark();

Значение ob1.coeff и ob2.coeff и равно 5, поскольку располагается в одной и той же области памяти. Изменить значение статического члена можно прямо через имя класса:

Mark.coeff = 7;

Вызов статического метода также следует осуществлять с помощью указания:
ClassName. methodName (), а именно:

Mark. setCoeffFloat ();

float z = Math. max (x, y); // определение максимума из двух значений

System. exit (1); // экстренное завершение работы приложения

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

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

Модификатор final

Модификатор final используется для определения констант в качестве члена класса, локальной переменной или параметра метода. Методы, объявленные как final, нельзя замещать в подклассах, для классов – создавать подклассы. Например:

/* пример # 5: final-поля и методы: Rector.java: ProRector.java */

package chapt03;

 

public class Rector {

 

// инициализированная константа

final int ID = (int)(Math. random ()*10);

// неинициализированная константа

final String NAME_RECTOR;

 

public Rector() {

// инициализация в конструкторе

NAME_RECTOR = "Старый"; // только один раз!!!

}

// {NAME_RECTOR = "Новый";} // только один раз!!!

 

public final void jobRector() {

// реализация

// ID = 100; //ошибка!

}

public boolean checkRights(final int num) {

// id = 1; //ошибка!

final int CODE = 72173394;

if (CODE == num) return true;

else return false;

}

public static void main(String[] args) {

System. out. println(new Rector().ID);

}

}

package chapt03;

 

public class ProRector extends Rector {

// public void jobRector(){} //запрещено!

}

Константа может быть объявлена как поле класса, но не проинициали­зирована. В этом случае она должна быть проинициализирована в логическом блоке класса, заключенном в {}, или конструкторе, но только в одном из указанных мест. Значение по умолчанию константа получить не может в отличие от переменных класса. Константы могут быть объявлены в методах как локальные или как параметры метода. В обоих случаях значения таких констант изменять нельзя.

Абстрактные методы

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

/* пример # 6: абстрактный класс и метод: AbstractCourse.java */

public abstract class AbstractCourse {

private String name;

public AbstractCourse() { }

public abstract void changeTeacher(int id); /*определение

метода отсутствует*/

public setName(String n){

name = n;

}

}

В отличие от интерфейсов, абстрактный класс может содержать и абстрактные, и неабстрактные методы, а может и не содержать ни одного абстрактного метода.

Подробнее абстрактные класса и интерфейсы изучаются в главе «Абстрактные классы. Интерфейсы. Пакеты».

Модификатор native

Приложение на языке Java может вызывать методы, написанные на языке С++. Такие методы объявляются с ключевым словом native, которое сообщает компилятору, что метод реализован в другом месте. Например:






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных