07.11.2012Java, каф.ОСУ АВТФ1 Определение классов и методов Вызов метода Вызов метода это своего рода "приказ" объекту выполнить конкретное действие (описанное.

Презентация:



Advertisements
Похожие презентации
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Advertisements

1 Классы в Java Ключевое слово class означает: Я говорю тебе, как выглядит новый тип объекта. Класс является базовым элементом объектно-ориентированного.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Java, каф.ОСУ, АВТФ1 Определение классов и методов Java- программа состоит из объектов различных классов, взаимодействующих друг с другом. Каждое.
1 Методы Java Методы класса – это подпрограммы, присоединенные к конкретным определениям классов. Они описываются внутри определения класса на том же уровне,
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
Кафедра ОСУ, Java 2004 Слайд 1 Наследование Наследование позволяет использовать существующий класс для определения новых классов, т.е. способствует.
С# и ООП Формальное определение класса с C# Класс в C# - это пользовательский тип данных (user defined type), который состоит из данных (часто называемых.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Java. Part 2. Спецификаторы доступа public private protected не указан – доступ в пределах пакета Могут использоваться перед классами, методами, полями.
Кафедра ОСУ, Java 2007 Слайд 1 Определение классов и методов Java- программа состоит из объектов различных классов, взаимодействующих друг.
b5_java_s4
Полиморфизм Полиморфизм (polymorphism) - последний из трех "китов", на которых держится объектно-ориентированное программирование Слово это можно перевести.
Транксрипт:

Java, каф.ОСУ АВТФ1 Определение классов и методов Вызов метода Вызов метода это своего рода "приказ" объекту выполнить конкретное действие (описанное операторами в теле метода), используя конкретные данные, содержащиеся в вызывающем объекте. Разработал к.т.н. Фофанов О.Б.

Java, каф.ОСУ АВТФ2 Определение классов и методов Вызов метода 1. Метод, определенный в классе, обычно вызывается с использованием объекта класса. Такой объект называется вызывающим объектом (calling object). Point p = new Point(); a)p.init(10,12); // p.x ==10, p.y ==12 b)p.init (x1, y1); // p.x ==x1, p.y ==y1 c)p.init (x1+x2, y2^3);

Java, каф.ОСУ АВТФ3 Определение классов и методов 2. В некоторых специальных случаях (для статических методов) вместо объекта класса в вызове метода используется имя самого класса: ans = Math.max (2,3); s1 = String.valueOf(567.56); 3.Внутри класса, в котором описан метод, он может вызываться по имени в других методах этого класса.

Java, каф.ОСУ АВТФ4 Определение классов и методов class FuncDecl{ public static int square(int x) {return x*x;} public static boolean isOdd(int p) {if ((p%2)==0) return false; else return true;} public static double distance(double x, double y) {if (x>y) return x-y; else return y-x;} public static void display(double x, double y) {System.out.println("("+x+","+y+")"); return; // return void }

Java, каф.ОСУ АВТФ5 Определение классов и методов public static void main (String[] args) { display(3,2); display(square(2),distance(5,9)); int p= ; if (isOdd(p)) System.out.println ("p is odd"); else System.out.println("p is even"); } }

Java, каф.ОСУ АВТФ6 Определение классов и методов Переменные, объявленные внутри метода называются локальными переменными. Одноименные переменные, объявленные в различных блоках никак между собой не связаны и в памяти размещаются в различных ячейках. Значение переменных реализации ограничено объектом класса, а локальных переменных – определением метода.

Java, каф.ОСУ АВТФ7 Определение классов и методов public class BankAccount { public void showNewBalance () { double newAmount = amount + (rate/100.0) *amount; System.out.println ("После начисления процентов на счету стало $" + newAmount) ; } public double amount;// перем. реализации public double rate; // перем. реализации }

Java, каф.ОСУ АВТФ8 Определение классов и методов public class LocalVariablesDemoProgram { public static void main(String[] args){ BankAccount myAccount = new BankAccount(); myAccount.amount = ; myAccount.rate = 5; double newAmount = ;//лок. в main myAccount.showNewBalance(); System.out.println("Моя мечта - иметь на счету в банке $" + newAmount); } }

Java, каф.ОСУ АВТФ9 Определение классов и методов В Java запрещается иметь одноименные переменные внутри одного определения метода. Переменные, объявленные в блоке, являются локальными по отношению к этому блоку и исчезают, когда выполнение этого блока завершается. Блок – составной оператор с описаниями. Переменную нельзя использовать вне блока, в котором она описана.

Java, каф.ОСУ АВТФ10 Определение классов и методов При обращении к методу формальные параметры заменяются на фактические (реальные). Если формальные параметры имеют примитивные типы, то при замене формальных параметров на фактические используется механизм вызова по значению (call by value) Формальный параметр, используемый в определении метода, является локальной переменной, которая инициализируется значением фактического параметра

Java, каф.ОСУ АВТФ11 Определение классов и методов Между формальными и фактическими параметрами устанавливается взаимнооднозначное соответствие. В случае рассогласования по типу осуществляется автоматическое преобразование типов: Byte->short->int->long->float->double

Java, каф.ОСУ АВТФ12 Определение классов и методов Example. public double distance (float x1, float y1, float x2, float y2) { float xdiff, ydiff; xdiff = x1 – x2; ydiff = y1 – y2; return Math.sqrt (xdiff * xdiff + ydiff * ydiff); }

Java, каф.ОСУ АВТФ13 Определение классов и методов … int x3, x4, y3,y4; … double dist = distance (x3,y3,x4,y4); …

Java, каф.ОСУ АВТФ14 Определение классов и методов Методы класса могут быть объявлены с использованием модификатора private В таком случае их нельзя вызывать за пределами определения класса, но можно вызывать в любом методе того же класса. Обычно все переменные реализации используются с модификатором private

Java, каф.ОСУ АВТФ15 Определение классов и методов Для доступа к таким переменным за пределами класса должны быть использованы специальные public методы: Аксессорный метод для чтения (accessor method) – get… Мутаторный метод для записи (mutator method) – set… т.е. сам программист планирует и управляет доступом к закрытым переменным

Java, каф.ОСУ АВТФ16 Определение классов и методов public class MyClass{ //Определение переменных реализации private String name; private int age; private String address; ….

Java, каф.ОСУ АВТФ17 Определение классов и методов // мутатор 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; }

Java, каф.ОСУ АВТФ18 Определение классов и методов // аксессоры public String getName ( ) { return name; } public int getAge( ) { return age; } public String getAddress( ) { return address; } }

Java, каф.ОСУ АВТФ19 Определение классов и методов Обращение к методам: public class DemoClass { …public static void main …{ MyClass ob1= new MyClass ( ); ob1.setNewFields (A.Шварценеггер, 63, Los Angeles,California); … System.out.println (ob1.getName (),ob1.getAge(), ob1.getAddress() ); …

Java, каф.ОСУ АВТФ20 Определение классов и методов

Java, каф.ОСУ АВТФ21 Определение классов и методов Основные правила создания хорошо инкапсулированных классов: 1.Перед определением класса разместить комментарий, как программист должен представлять себе данные и методы класса (в терминах предметной области) 2.Все переменные реализации в классе должны объявляться с использованием модификатора private 3.Предусмотреть public-методы аксессора и мутатора для чтения и изменения данных в объекте

Java, каф.ОСУ АВТФ22 Определение классов и методов 4.Предусмотреть другие public-методы, необходимые программисту для обработки данных в классе (методы ввода-вывода, например) 5.Перед заголовком каждого public- метода поместите комментарий, как использовать данный метод 6.Сделать все вспомогательные методы закрытыми

Java, каф.ОСУ АВТФ23 Определение классов и методов Формальные параметры типа класса (ссылки / объекты ). В переменной типа класса хранится не объект этого класса, а адрес области(ссылка – reference) памяти, в которой расположен объект

Java, каф.ОСУ АВТФ24 Определение классов и методов Формальные параметры типа класса обрабатываются на основе другого механизма замены (call by reference). Формальный параметр типа класса – локальная переменная, в которой хранится адрес объекта этого класса. При обращении к методу формальный параметр инициализируется адресом соответствующего фактического параметра, задаваемого в вызове метода,т.е. Формальный параметр служит в качестве альтернативного имени для объекта, заданного аргументом в вызове метода

Java, каф.ОСУ АВТФ25 Определение классов и методов Следствие: Метод способен менять значения переменных реализации фактического аргумента, имеющего тип класса.

Java, каф.ОСУ АВТФ26 Определение классов и методов 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 *xdif + ydiff *ydiff); } } формальный параметр типа класса Point

Java, каф.ОСУ АВТФ27 Определение классов и методов class MyClass { public static void main …{ Point lowerLeft = new Point ( ); Point upperRight = new Point ( ); lowerLeft.x = 0.0; lowerLeft.y = 0.0; upperRight.x = ; upperRight.y = ; double dist = lowerLeft.distance(upperRight);.... } } Вызывающий объект Объект- фактический параметр

Java, каф.ОСУ АВТФ28 Определение классов и методов that upperRight Х= 1280 Y=1024 distance ()

Java, каф.ОСУ АВТФ29 Определение классов и методов

Java, каф.ОСУ АВТФ30 Определение классов и методов Параметр this. При определении метода в качестве имени вызывающего объекта можно использоваться ссылка на текущий объект (имя вызывающего объекта) - this. Оно будет заменено именем объекта, вызывающего метод: (для класса Point) public void move (double x, double y){ this.x = х;//имена параметров скрывают this.y = y;//имена полей }

Java, каф.ОСУ АВТФ31 Определение классов и методов this неявно добавляется в начало каждой ссылки на поле или метод, если программист не указал ссылку на другой объект. Например, class Name { public String str; Name() { str = ; } } равносильно следующему: this.str = ;

Java, каф.ОСУ АВТФ32 Определение классов и методов Рекурсия Java поддерживает рекурсию. Рекурсия это процесс определения чего-то в терминах самого себя. В программировании рекурсия это атрибут, который позволяет методу вызвать самого себя. Такой метод называют рекурсивным.

Java, каф.ОСУ АВТФ33 Определение классов и методов // Простой пример рекурсии. class Factorial { // это рекурсивная функция int fact (int n) { int result; if (n==0) return 1; result = fact(n-1) * n; return result; } }

Java, каф.ОСУ АВТФ34 Определение классов и методов class Recursion { public static void main (String args[]) { Factorial f = new Factorial ( ) ; System.out.println( "Факториал 3 равен " + f.fact(3)); System.out.println( "Факториал 4 равен " + f.fact (4) ) ; System.out.println( "Факториал 5 равен " + f.fact (5)); } }

Java, каф.ОСУ АВТФ35 Определение классов и методов Вывод этой программы: факториал 3 равен 6 факториал 4 равен 24 факториал 5 равен 120

Java, каф.ОСУ АВТФ36 Определение классов и методов

Java, каф.ОСУ АВТФ37 Определение классов и методов

Java, каф.ОСУ АВТФ38 Статические методы и переменные Иногда возникает потребность в методе, которому не нужно задавать какой-нибудь объект. Например, все математические методы не нуждаются в объектах В таких случаях можно определить метод как статический (static). Статический метод определяется в классе, поэтому он является членом класса, но его можно вызвать, не используя никакого объекта.

Java, каф.ОСУ АВТФ39 Статические методы и переменные В вызове статического метода вместо использования имени объекта обычно используется имя класса, в котором этот метод определен. Статические методы иногда называются методами класса (class methods), они вызываются для целого класса, а не для каждого конкретного объекта, созданного на его основе.

Java, каф.ОСУ АВТФ40 Статические методы и переменные Example. /*Класс, содержащий статические методы для выполнения вычислений, связанных с окружностями.*/ public class CircleFirstTry { public static final double PI = ; public static double area (double radius){ return (PI*radius*radius) ; } public static double circumference(double radius){ return (PI*(radius + radius)); } }

Java, каф.ОСУ АВТФ41 Статические методы и переменные public class CircleDemo{ public static void main(String[] args){ double radius; System.out.println ("Введите радиус круга в cм:"); radius =System.In.readLineDouble(); System.out.println ("Круг радиусом " + radius + " см");

Java, каф.ОСУ АВТФ42 Статические методы и переменные System.out.println ("имеет площадь " + CircleFirstTry.area(radius) + " квадратных см"); System.out.println ("и длину окружности" + CircleFirstTry.circumference(radius) + " см.") } }

Java, каф.ОСУ АВТФ43 Статические методы и переменные Ограничения по использованию 1. Если класс имеет переменные реализации, то к ним нельзя обращаться в определениях статических методов 2. Внутри определения любого статического метода нельзя вызывать нестатический метод (если не создать новый объект этого класса, а затем использовать этот объект в качестве вызывающего объекта для нестатического метода)

Java, каф.ОСУ АВТФ44 Статические методы и переменные Example. /********************************************** Вызов нестатического метода внутри статического ***************************************************/ public class PlayCircle { public static final double PI = ; private double diameter;//перем.реализации public void setDiameter(double newDiameter){ diameter = newDiameter; }

Java, каф.ОСУ АВТФ45 Статические методы и переменные public static double area (double radius){ return (Math.PI*radius*radius); } public void showArea(){ System.out.println("Площадь равна " + area (diameter/2)); }//вызов статического метода внутри // нестатического

Java, каф.ОСУ АВТФ46 Статические методы и переменные public static void areaDialog() System.out.println("Введите диаметр круга:"); double newDiameter = System.in.readLineDouble(); PlayCircle с = new PlayCircle(); с.setDiameter(newDiameter); с.showArea();//вызов нестатического метода } // в статическом методе }//end PlayCircle

Java, каф.ОСУ АВТФ47 Статические методы и переменные public class PlayCircleDemo { public static void main (String [] args) { PlayCircle circle = new PlayCircle (); circle. setDiameter (2) ; System. out.println ("Если диаметр круга равен 2,"); circle. showArea ( ) ; System.out.println("А теперь выберите сами значение диаметра.) PlayCircle.areaDialog(); } }

Java, каф.ОСУ АВТФ48 Статические методы и переменные Диалог: Если диаметр круга равен 2, Площадь равна А теперь выберите сами значение диаметра. Введите диаметр круга: 4 Площадь равна

Java, каф.ОСУ АВТФ49 Статические методы и переменные B определении статического метода нельзя использовать переменную реализации или метод, который имеет явно или неявно заданный параметр this для вызывающего объекта.

Java, каф.ОСУ АВТФ50 Статические методы и переменные Java требует, чтобы main-метод программы был статическим. Следовательно, внутри main-метода нельзя вызвать нестатический метод того же класса, не создав объект этого класса и не использовав его в качестве вызывающего объекта для этого нестатического метода.

Java, каф.ОСУ АВТФ51 Статические методы и переменные Каждый класс может иметь main-метод, т.е. в каждый класс можно поместить main-метод. В этом случае его можно выполнять как программу. При выполнении этого класса в качестве программы вызывается main-метод, остальная часть определения класса игнорируется

Java, каф.ОСУ АВТФ52 Статические методы и переменные Если же класс не предназначен для использования в качестве программы, main-метод в нем все равно может иметь право на существование, если он будет представлять собой тестовую программу для этого класса. При использовании в качестве обычного класса для создания объектов игнорируется main-метод.

Java, каф.ОСУ АВТФ53 Статические методы и переменные Иногда возникает необходимость совместного использования переменной всеми объектами класса Они называются переменными класса, т.е. переменными относящимися ко всему классу, в отличие от переменных, относящихся к его отдельным объектам и описываются как static private static int numberOflnvocations = 0; public static Point origin = new Point ( );

Java, каф.ОСУ АВТФ54 Статические методы и переменные Подобно переменным реализации, статические переменные обычно объявляются закрытыми Возможность чтения и изменения их значений вне класса должна предоставляться только посредством методов доступа (акцессорных и мутаторных методов).

Java, каф.ОСУ АВТФ55 Статические методы и переменные public class StaticDemo{ private static int numberOfInvocations =0; public static void main(String[] args){ int i; StaticDemo object1 = new StaticDemo(); for (i = 1; i

Java, каф.ОСУ АВТФ56 Статические методы и переменные System.out.println("Общее количество вызовов = " + numberSoFar()); } public void justADemoMethod() { numberOfInvocations++;…. } public void outPutCountOfInvocations () { numberOf Invocations++; System.out.println(numberOflnvocations); } public static int numberSoFar () { numberOf Invocations++; return numberOflnvocations; } }

Java, каф.ОСУ АВТФ57 Статические методы и переменные Результат … 10 Общее кол-во вызовов = 21

Java, каф.ОСУ АВТФ58 Перегрузка метода (overloading) Наличие двух или больше определений методов под одним и тем же именем внутри одного и того же класса называется перегрузкой метода. Чтобы перегрузка успешно работала, необходимо предусмотреть, чтобы различные определения методов с одинаковыми именами имели различные сигнатуры

Java, каф.ОСУ АВТФ59 Перегрузка метода (overloading) / ************************************** Это класс для иллюстрации перегрузки. **************************************/ public class Statistician{ public static void main(String[] args){ double average1=Statistician.average(40.0, 50.0); double average2 = Statistician.average(1.0, 2.0, 3.0); char averages = Statistician.average('a', 'с'); … }

Java, каф.ОСУ АВТФ60 Перегрузка метода (overloading) public static double average (double first, double second) { return ((first + second) /2.0) ; } public static double average (double first, double second, double third){ return ( (first + second + third) /3.0); }

Java, каф.ОСУ АВТФ61 Перегрузка метода (overloading) public static char average (char first, char second){ return (char) (((int)first + (int)second)/2); } }

Java, каф.ОСУ АВТФ62 Перегрузка метода (overloading) В пределах одного класса можно определить два (или больше) метода с одинаковыми именами. При перегрузке метода любые два определения методов с одинаковыми именами должны иметь либо различное количество параметров, либо параметры соответствующих позиций должны иметь различные типы.

Java, каф.ОСУ АВТФ63 Перегрузка метода (overloading) Java всегда старается использовать средство перегрузки до автоматического преобразования типов. Если Java в состоянии найти определение метода, в котором есть совпадение типов аргументов, то воспользуется именно этим определением, в противном случае запускается механизм автоматического преобразования типов

Java, каф.ОСУ АВТФ64 Конструкторы Часто требуется, чтобы при создании объекта некоторые или все переменные реализации были автоматически инициализированы в соответствии с заданными спецификациями. Это можно сделать с помощью метода специального типа, именуемого конструктор.

Java, каф.ОСУ АВТФ65 Конструкторы Конструктор (constructor) это метод, который вызывается в момент создания нового объекта. Конструктор может выполнять любое действие, которое имеется в его определении, но основное назначение конструкторов - выполнение некоторых действий инициализации, например инициализации значений переменных реализации.

Java, каф.ОСУ АВТФ66 Конструкторы Назначение конструкторов во многом совпадает с назначением методов set в определении класса Но в отличие от методов set, конструкторы вызываются при создании объекта с помощью оператора new. Конструкторы имеют то же имя, что и сам класс При определении конструктора не нужно указывать тип возвращаемого значения, и void также опускается.

Java, каф.ОСУ АВТФ67 Конструкторы /************************************** Класс для сбора основных данных о домашних *животных: имя, возраст и вес. **************************************************/ public class PetRecord { private String name; private int age; //в годах private double weight; //в кг

Java, каф.ОСУ АВТФ68 Конструкторы public PetRecord (String initialName, int initialAge, double initialWeight) { name = initialName; if ((initialAge < 0) || (initialWeight < 0)) { System.out.println ( "Ошибка: отрицательный возраст или вес.") System. exit (0) ;} else {age = initialAge; weight = initialWeight;} }

Java, каф.ОСУ АВТФ69 Конструкторы public void set (String newName, int newAge, double newWeight){ // тело как в предыдущем конструкторе … } public PetRecord (String initialName) { name = initialName; age =0; weight =0; }

Java, каф.ОСУ АВТФ70 Конструкторы public PetRecord (int initialAge) { name = "Пока без имени"; weight = 0; if (initialAge < 0) {System.out.println("Ошибка: отрицательный возраст."); System.exit(0);} else age = initialAge; } ……

Java, каф.ОСУ АВТФ71 Конструкторы public PetRecord ( ) { name = Пока без имени; age =0; weight =0; } }

Java, каф.ОСУ АВТФ72 Конструкторы //вызовы конструкторов …public static void main… { PetRecord cow = new PetRecord (Qween, 10, 400); … PetRecord fish = new PetRecord(Titanic, 2, 0.2);… PetRecord newBorn= new PetRecord();… }

Java, каф.ОСУ АВТФ73 Конструкторы (резюме) Конструктор это метод, который вызывается при создании объекта класса с помощью оператора new. Конструкторы используются для инициализации внутреннего состояния объектов. Имя конструктора должно совпадать с именем класса, которому он принадлежит. Вызов конструктора, например, new PetRecord () возвращает ссылку на объект, т.е. он возвращает адрес памяти, выделенной объекту.

Java, каф.ОСУ АВТФ74 Конструкторы (зачем) 1. Некоторые классы не обладают разумным начальным состоянием, если не инициировать значения переменных реализации 2.При конструировании объектов некоторых видов передача исходного состояния оказывается самым удобным и разумным выходом

Java, каф.ОСУ АВТФ75 Конструкторы (зачем) 3. Конструирование объектов потенциально сопряжено с большими накладными расходами, так что желательно при создании объекта сразу устанавливать правильное исходное состояние. Например, если каждый объект класса содержит таблицу, то конструктор, получающий исходный размер таблицы в качестве параметра, позволит с самого начала создать объект с таблицей нужного размера.

Java, каф.ОСУ АВТФ76 Конструкторы (зачем) 4. Конструктор, атрибут доступа которого отличается от public, ограничивает возможности создания объектов данного класса. Например, можно запретить программистам, работающим с пакетом, расширять тот или иной класс, если сделать все конструкторы доступными лишь из пакета (default). Кроме того, можно пометить ключевым словом protected те конструкторы, которые предназначены для использования в подклассах.

Java, каф.ОСУ АВТФ77 Конструкторы Если не объявлять для класса никаких конструкторов, Java создает безаргументный конструктор по умолчанию Этот конструктор создается автоматически лишь в тех случаях, когда нет никаких других конструкторов и он инициализирует все поля нулями

Java, каф.ОСУ АВТФ78 Конструкторы Если безаргументный конструктор должен существовать наряду с одним или несколькими конструкторами, использующими аргументы, можно явно определить его. class SimpleClass { / * * Эквивалент конструктора по умолчанию * / public SimpleClass () { …. } }

Java, каф.ОСУ АВТФ79 Инициализаторы Допустимой конструкцией в теле класса является объявление инициализаторов. Записываются объектные инициализаторы внутри фигурных скобок. public class Test { private int x, y, z; // инициализатор объекта { x=3; if (x>0) y=4; z=Math.max(x, y); } … }

Java, каф.ОСУ АВТФ80 Инициализаторы Инициализаторы не имеют имен, исполняются при создании объектов, не могут быть вызваны явно, не передаются по наследству хотя инициализаторы в родительском классе продолжают исполняться при создании объекта класса-наследника.

Java, каф.ОСУ АВТФ81 Инициализаторы Можно использовать статические инициализаторы public class SmallSquares { private static final int LIMIT = 10; private static final int[] square = new int [LIMIT]; static { for (int i = 0; i < LIMIT; i++) { square[i] = i * i; } }//блок статической инициализации

Java, каф.ОСУ АВТФ82 Инициализаторы public static int getSquare(int i) { return square[i]; } public static void main(String[] args) { System.out.println("3 squared is " + getSquare(3)); } }