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

Параметры типа класса (ссылки).

1.В переменной типа класса хранится не объект этого класса, а адрес области(ссылка – reference) памяти, в которой расположен объект

2.Все типы классов являются ссылочными типами, но существуют ссылочные типы, которые не являются типами классов (массивы)

--Формальные параметры типа класса обрабатываются на основе другого механизма замены (call by reference).

--Формальный параметр типа класса –

локальная переменная , в которой хранится адрес объекта этого класса.

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

Следствие:

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

Example.

Class Point { // описание класса

public double x,y;

public double distance (Point that) {

double xdiff, ydiff;

xdiff = x-that.x;

ydiff = y – that.y;

return Math.sqrt(xdif^2 + ydiff^2);}}

Class MyClass {

public static void main …{

Point lowerLeft = new Point ( );

Point upperRight = new Point ( );

lowerLeft.x = 0.0;

lowerLeft.y = 0.0;

upperRight.x = 1280.0;

upperRight.y = 1024.0;

double dist = lowerLeft.distance(upperRight);

....} }

Параметр this.

При определении метода в качестве имени вызывающего объекта можно использоваться ссылка на текущий объект (имя вызывающего объекта) - this.

Оно будет заменено именем объекта, вызывающего метод: (для класса Point)

public void move(double x, double y){

this.x = х;//имена параметров скрывают

this.y = y;//имена полей}

--this чаще всего используется для передачи ссылки на текущий объект в качестве параметра для других методов. Предположим в методе необходимо пополнить список объектов, ожидающих обслуживания. Service.add(this);

--this неявно добавляется в начало каждой ссылки на поле или метод, если программист не указал ссылку на другой объект. Пример: class Name{

Public String str;

Name(){

str= “ ”;}}равносильно следующему: this.str=“ ” ;

Акцессоры и мутаторы

Методы класса могут быть объявлены с использованием модификатора private

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

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

Для доступа к таким переменным за пределами класса должны быть использованы специальные public методы:

-Аксессорный метод для чтения

(accessor method) – get…

-Мутаторный метод для записи (mutator method) – set…

т.е. сам программист планирует и управляет доступом к закрытым переменным

Пример

public class MyClass{

private String name; //Определение //переменных реализации

private int age;

private String address;

// мутатор

public void setNewFields (String newName,

int newAge, String newAddress){

name = newName;

if (newAge >0)

age = newAge;

else {System.out.printin("ОШИБКА:

использование отрицательного

возраста”);

System.exit(0); }

address = newAddress;}

// аксессоры

public String getName ( ) {

return name; }

public int getAge( ) {

return age; }

public String getAddress( ) {

return address;}}

Обращение к методам:

public class DemoClass {

public static void main …{

MyClass cl1= new MyClass ( );

сl1.setNewFields (“A.Шварценеггер’’, 50,

Los Angeles,California”);

System.out.println (cl1.getName (),cl1.getAge(),

cl1.getAddress() );

}

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

-Иногда возникает потребность в методе, которому не нужно задавать какой-нибудь объект. Например, все математические методы не нуждаются в объектах. В таких случаях можно определить метод как статический (static).

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

Статические методы иногда называются методами класса (class methods), они вызываются для целого класса, а не для каждого конкретного объекта, созданного на его основе.

Example.

/*Класс, содержащий статические методы для выполнения вычислений, связанных с окружностями.*/

public class CircleFirstTry {

public static final double PI = 3.14159;

public static double area (double radius){

return (PI*radius*radius) ; }

public static double circumference(double

radius){

return (PI*(radius + radius)); }}

public class CircleDemo{

public static void main(String[] args){

double radius;

System.out.println ("Введите радиус

круга в cм:");

radius =System.In.readLineDouble();

System.out.println ("Круг радиусом "

+ radius + " см");

System.out.println ("имеет площадь " +

CircleFirstTry.area(radius) +

" квадратных см");

System.out.println ("и длину окружности"

+

CircleFirstTry.circumference(radius)

+ " см.") }}