Ильдар Хабибуллин - Java 7 [Наиболее полное руководство]
- Название:Java 7 [Наиболее полное руководство]
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2012
- ISBN:978-5-9775-0735-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Ильдар Хабибуллин - Java 7 [Наиболее полное руководство] краткое содержание
Java 7 [Наиболее полное руководство] - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
static int[] a = new a[10]; static{
for (int k: a) a[k] = k * k;
}
Операторы, заключенные в такой блок, выполняются только один раз, при загрузке класса, а не при создании каждого экземпляра.
Здесь внимательный читатель, наверное, поймал меня: "А говорил, что все действия выполняются только с помощью методов!" Каюсь: блоки статической инициализации и блоки инициализации экземпляра записываются вне всяких методов и выполняются до начала выполнения не то что метода, но даже конструктора.
Класс Complex
Комплексные числа широко используются не только в математике. Они часто применяются в графических преобразованиях, в построении фракталов, не говоря уже о фи-
class Complex{
private static final double EPs = 1e-12; // Точность вычислений. private double re, im; // Действительная и мнимая части.
// Четыре конструктора:
Complex(double re, double im){ this.re = re; this.im = im;
}
Complex(double re){this(re, 0.0);}
Complex(){this(0.0, 0.0);}
Complex(Complex z){this(z.re, z.im);}
// Методы доступа: public double getRe(){return re;} public double getIm(){return im;}
public Complex getZ(){return new Complex(re, im);} public void setRe(double re){this.re = re;} public void setIm(double im){this.im = im;} public void setZ(Complex z){re = z.re; im = z.im;}
// Модуль и аргумент комплексного числа: public double mod(){return Math.sqrt(re * re + im * im);} public double arg(){return Math.atan2(re, im);}
// Проверка: действительное число? public boolean isReal(){return Math.abs(im) < EPs;} public void pr(){ // Вывод на экран
system.out.println(re + (im < 0.0 ? "" : "+") + im + "i");
}
// Переопределение методов класса Object: public boolean equals(Complex z){ return Math.abs(re — z.re) < EPs &&
Math.abs(im — z.im) < EPs;
}
public string tostring(){
return "Complex: " + re + " " + im;
}
// Методы, реализующие операции +=, -=, *=, /= public void add(Complex z){re += z.re; im += z.im;} public void sub(Complex z){re -= z.re; im -= z.im;} public void mul(Complex z){
double t = re * z.re — im * z.im; im = re * z.im + im * z.re; re = t;
public void div(Complex z){
double m = z.re * z.re + z.im * z.im; double t = re * z.re — im * z.im; im = (im * z.re — re * z.im) / m; re = t / m;
}
// Методы, реализующие операции +, -, *, /
public Complex plus(Complex z){
return new Complex(re + z.re, im + z.im);
}
public Complex minus(Complex z){
return new Complex(re — z.re, im — z.im);
}
public Complex asterisk(Complex z){ return new Complex(
re * z.re — im * z.im, re * z.im + im * z.re);
}
public Complex slash(Complex z){
double m = z.re * z.re + z.im * z.im; return new Complex(
(re * z.re — im * z.im) / m, (im * z.re — re * z.im) / m);
}
}
// Проверим работу класса Complex. public class ComplexTest{
public static void main(string[] args){ Complex z1 = new Complex(),
z2 = new Complex(1.5),
z3 = new Complex(3.6, -2.2),
z4 = new Complex(z3);
// Оставляем пустую строку. "); z1.pr();
"); z2.pr();
"); z3.pr();
"); z4.pr();
// Работает метод toString().
System.out.println(); system.out.print("z1 system.out.print("z2 system.out.print("z3 system.out.print("z4 System.out.println(z4); z2.add(z3);
'); z2.pr(); '); z2.pr(); '); z2.pr(); '); z3.pr();
system.out.print("z2 + z3 z2.div(z3);
system.out.print("z2 / z3 z2 = z2.plus(z2); system.out.print("z2 + z2 z3 = z2.slash(z1); system.out.print("z2 / z1
}
![]() |
Рис. 2.3. Вывод программы ComplexTest |
Метод main()
Всякая программа, оформленная как приложение (application), должна содержать метод с именем main. Он может быть один на все приложение или присутствовать в некоторых классах этого приложения, а может находиться и в каждом классе.
Метод main () записывается как обычный метод, может содержать любые описания и действия, но он обязательно должен быть открытым (public), статическим (static), не иметь возвращаемого значения (void). У него один параметр, которым обязательно должен быть массив строк (string [ ]). По традиции этот массив называют args, хотя имя может быть любым.
Эти особенности возникают из-за того, что метод main() вызывается автоматически исполняющей системой Java в самом начале выполнения приложения, когда еще не создан ни один объект. При вызове интерпретатора java указывается класс, где записан метод main (), с которого надо начать выполнение. Поскольку классов с методом main() может быть несколько, допустимо построить приложение с дополнительными точками входа, начиная выполнение приложения в разных ситуациях из различных классов.
Часто метод main() заносят в каждый класс с целью отладки. В этом случае в метод main () включают тесты для проверки работы всех методов класса.
При вызове интерпретатора java можно передать в метод main() несколько аргументов, которые интерпретатор заносит в массив строк. Эти аргументы перечисляются в строке вызова java через пробел сразу после имени класса. Если же аргумент содержит пробелы, надо заключить его в кавычки. Кавычки не будут включены в аргумент, это только ограничители.
Все это легко понять на примере листинга 2.5, в котором записана программа, просто выводящая на консоль аргументы, передаваемые в метод main () при запуске.
class Echo{
public static void main(string[] args){ for (string s: args)
system.out.println("arg = " + s);
}
}
На рис. 2.4 показаны результаты работы этой программы с разными вариантами задания аргументов.
![]() |
Рис. 2.4.Вывод параметров командной строки |
Как видите, имя класса не входит в число аргументов. Оно и так известно в методе
main().
Знатокам C/C++
Поскольку в Java имя файла всегда совпадает с именем класса, содержащего метод main (), оно не заносится в args [0]. Вместо параметра argc используется переменная args. length, имеющаяся в каждом массиве. Доступ к переменным среды разрешен не всегда и осуществляется другим способом. Некоторые значения переменных среды можно просмотреть так:
system.getProperties().list(system.out);
Методы с переменным числом аргументов
Как видно из рис. 2.4, при вызове программы из командной строки мы можем задавать ей разное число аргументов. Исполняющая система Java создает массив этих аргументов и передает его методу main(). Такую же конструкцию можно сделать в своей программе:
class VarArgs{
private static int[] argsl = {1, 2, 3, 4, 5, 6};
private static int[] args2 = {100, 90, 80, 70};
public static int sum(int[] args){ int result = 0;
for (int k: args) result += k; return result;
}
public static void main(string[] args){
System.out.println("Sum1 = " + sum(args1));
System.out.println("Sum2 = " + sum(args2));
}
}
Начиная с пятой версии Java эту конструкцию упростили. Теперь нет необходимости заранее формировать массив аргументов, это сделает компилятор. Программисту достаточно записать в списке параметров метода три точки подряд после имени параметра вместо квадратных скобок, обозначающих массив.
Читать дальшеИнтервал:
Закладка: