АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Static logic

Читайте также:
  1. And functions of biological membranes
  2. Chronological division in the history of English: the Early New English period.
  3. Equation of Bernoulli. Static and dynamic pressure.
  4. ETHNOFUNCTIONAL PSYCHOTHERAPY: THEORETICAL AND METHODOLOGICAL PRESUPPOSITIONS AND EMPIRICAL DATA
  5. III. LEXICOLOGICAL ASPECTS OF TRANSLATION
  6. Interaction of Dictionary And Contextual Logical Meaning
  7. INTERRELATION OF SOCIAL NOTIONS OF RUSSIANS AND GERMEN WITH PSYCHOLOGICAL CHARACTERISTICS OF CULTURES (by the example of hospitality situation)
  8. Mechanisms of action of laser radiation on biological tissues
  9. Mehanisms of action of laser radiation on biological tissues.
  10. MORPHOLOGICAL CLASSIFICATION
  11. Physical properties of biological membranes.
  12. Principles of transformation of biological and not electric signals in electric. Designs of sensors and electrodes, their basic characteristics

logic (1) id=0

logic (2) id=10

конструктор id=71

значение id=71

В первой строке вывода поле id получит значение по умолчанию, так как память для него выделена при создании объекта, а значение еще не проинициализировано. Во второй строке выводится значение id, равное 10, так как после инициализации атрибута класса был вызван логический блок, изменивший его значение.

Перегрузка методов

Метод называется перегруженным, если существует несколько его версий с одним и тем же именем, но с различным списком параметров. Перегрузка реализует «раннее связывние». Перегрузка может ограничиваться одним классом. Методы с одинаковыми именами, но с различающимися списком параметров и возвращаемыми значениями могут находиться в разных классах одной цепочки наследования и также будут являться перегруженными. Если в последнем случае списки параметров совпадают, то имеет место другой механизм – переопре­деление метода.

Статические методы могут перегружаться нестатическими и наоборот – без ограничений.

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

/* пример # 8: вызов перегруженных методов: NumberInfo.java */

package chapt04;

 

public class NumberInfo {

public static void viewNum(Integer i) { //1

System. out. printf("Integer=%d%n", i);

}

public static void viewNum(int i) { //2

System. out. printf("int=%d%n", i);

}

public static void viewNum(Float f) { //3

System. out. printf("Float=%.4f%n", f);

}

public static void viewNum(Number n) { //4

System. out. println("Number=" + n);

}

public static void main(String[] args) {

Number[] num =

{ new Integer(7), 71, 3.14f, 7.2 };

for (Number n: num)

viewNum (n);

 

viewNum (new Integer(8));

viewNum (81);

viewNum (4.14f);

viewNum (8.2);

}

}

Может показаться, что в результате компиляции и выполнения данного кода будут последовательно вызваны все четыре метода, однако в консоль будет выведено:

Number=7

Number=71

Number=3.14

Number=7.2

Integer=8

int=81

Float=4,1400

Number=8.2

То есть во всех случаях при передаче в метод элементов массива был вызван четвертый метод. Это произошло вследствие того, что выбор варианта перегруженного метода происходит на этапе компиляции и зависит от типа массива num. То, что на этапе выполнения в метод передается другой тип (для первых трех элементов массива), не имеет никакого значения, так как выбор уже был осуществлен заранее.

При непосредственной передаче объекта в метод выбор производится в зависимости от типа ссылки на этапе компиляции.

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

При перегрузке всегда следует придерживаться следующих правил:

· не использовать сложных вариантов перегрузки;

· не использовать перегрузку с одинаковым числом параметров;

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

Параметризованные классы

К наиболее важным новшествам версии языка J2SE 5 можно отнести появление параметризованных (generic) классов и методов, позволяющих использовать более гибкую и в то же время достаточно строгую типизацию, что особенно важно при работе с коллекциями. Применение generic-классов для создания типизированных коллекций будет рассмотрено в главе «Коллекции». Параметризация позволяет создавать классы, интерфейсы и методы, в которых тип обрабатываемых данных задается как параметр.

Приведем пример generic-класса с двумя параметрами:

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

package chapt03;

 

public class Subject <T1, T2> {

private T1 name;

private T2 id;

 

public Subject() {

}

public Subject(T2 ids, T1 names) {

id = ids;

name = names;

}

}

Здесь T1, Т2 – фиктивные объектные типы, которые используются при объявлении членов класса и обрабатываемых данных. При создании объекта компилятор заменит все фиктивные типы на реальные и создаст соответствующий им объект. В качестве параметров классов запрещено применять базовые типы.

Объект класса Subject можно создать, например, следующим образом:

Subject<String,Integer> sub =

new Subject<String,Integer>();

char ch[] = {'J','a','v','a'};

Subject<char[],Double> sub2 =

new Subject<char[],Double>(ch, 71D);

В объявлении sub2 имеет место автоупаковка значения 71D в Double.

Параметризированные типы обеспечивают типовую безопасность.

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

/*пример # 10: создание и использование объектов параметризованного

класса: Optional.java: Runner.java */

package chapt03;

 

public class Optional <T> {

private T value;

 

public Optional() {

}

public Optional(T value) {

this. value = value;

}

public T getValue() {

return value;

}

public void setValue(T val) {

value = val;

}

public String toString() {

if (value == null) return null;

return value.getClass().getName() + " " + value;

}

}

package chapt03;

 

public class Runner {

public static void main(String[] args) {

//параметризация типом Integer

Optional<Integer> ob1 =

new Optional<Integer>();

ob1.setValue(1);

//ob1.setValue("2");// ошибка компиляции: недопустимый тип

int v1 = ob1.getValue();

System. out. println(v1);

//параметризация типом String

Optional<String> ob2 =

new Optional<String>("Java");

String v2 = ob2.getValue();

System. out. println(v2);

//ob1 = ob2; //ошибка компиляции – параметризация не ковариантна

//параметризация по умолчанию – Object

Optional ob3 = new Optional();

System. out. println(ob3.getValue());

ob3.setValue("Java SE 6");

System. out. println(ob3.toString()); /* выводится

тип объекта, а не тип параметризации */

 

ob3.setValue(71);

System. out. println(ob3.toString());

 

ob3.setValue(null);

}

}

В результате выполнения этой программы будет выведено:

Java

Null


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)