Московский государственный университет имени М.В.Ломоносова
Опубликован: 03.10.2006 | Доступ: свободный | Студентов: 1022 / 60 | Длительность: 09:08:00
Специальности: Программист
Лекция 14:

Java: члены класса, статические переменые и методы

< Лекция 13 || Лекция 14: 1234

Определение методов

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

Метод может иметь модификаторы доступа, возвращать значение и получать параметры.

Метод может иметь следующие модификаторы:

  • public, protected или private -модификаторы доступа;
  • static - модификатор метода класса.
  • abstract, final, native или synchronized.

Для модификаторов доступа метода определены следующие правила:

  • public указывает, что данный метод будет доступен везде, где доступен класс, в котором он определен;
  • protected указывает, что данный метод будет доступен как внутри пакета, содержащего объявление класса, в котором он определен, так и внутри любого подкласса данного класса;
  • private указывает, что данный метод не будет доступен нигде кроме тела класса, в котором он определен.

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

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

Метод, объявленный с модификатором static, называется статическим методом (или методом класса) и может быть вызван без создания экземпляра класса. Этот метод всегда вызывается непосредственно из класса. Статический метод имеет доступ к другим статическим переменным и методам данного класса.

Если статический метод определен как final -метод, то он не может быть переопределен.

Например:

// Файл A.java
package classa;
public class A  implements B {
  public A() {  }
   static int b=1;
  public int Metod1(){return a;}
  public static int Metod2(){
     return 0;}  //Статический метод
}
  interface B {
  final public static int a=1;  
    // Статическая переменная
  int Metod1();
}

// Файл C.java
package classa;
public class C extends A {
  public C() {  }
   static int b=3;
   public int Metod1(){return a;}
   public static int Metod2(){return 77;}
   public static void main(String[] args) {
        System.out.println(A.Metod2());
        System.out.println(C.Metod2());
  }
}

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

Абстрактный метод указывается модификатором abstract. Такой метод никогда не имеет тела метода: вместо фигурных скобок, ограничивающих тело метода, объявление метода завершается точкой с запятой.

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

Например:

public class A extends AA  implements B {
  public A() {  }
   public int Metod1(){return 0;}
   public static int Metod2(){return 0;}
   int Metod3(){return 0;}
   public int Metod4(){return 0;}
}
  interface B {
  int Metod1();
  abstract  int Metod4();
}
 abstract class AA{
    abstract  int Metod3();
 }

Методы, объявленные с модификатором private, не могут быть абстрактными методами, так как они недоступны вне тела класса. Статические методы также не могут выступать в качестве абстрактных методов, так как считаются конечными и не могут быть переопределены.

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

Методы, объявленные с модификатором native, могут иметь реализацию на другом языке программирования. Эти методы используются для написания машинно-зависимого кода. native -методы в Java-программе не имеют тела метода.

Synchronized -методы выполняются с блокировкой:

  • для метода класса выполняется блокировка класса,
  • для метода экземпляра - блокировка объекта.

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

Метод может возвращать значение заданного типа. В этом случае:

  • перед именем метода указывается тип возвращаемого значения;
  • в теле метода присутствует оператор return, определяющий возвращаемое значение.

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

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

< Лекция 13 || Лекция 14: 1234
Евгений Шовергин
Евгений Шовергин
Россия, саратов, СВКИ ВВ МВД РФ, 2002
MZ wuhaitao
MZ wuhaitao
Китай, GuangZhou