Начнем с обзора класса Math, который содержит методы для работы с математическими функциями и две константы, задающие числа pi - PI и e - E.
double a = Math.pow(Math.PI,2);
System.out.println("PI^2="+a);
В таблице ниже представлены некоторые методы данного класса.
| Метод | Назначение метода |
|---|---|
| cos(x), sin(x) и tan(x) |
Возвращают косинус, синус и тангенс числа x, заданного в радианах |
| atan2(y, x) | Возвращает арктангенс дроби y/x, где x и y заданы в радианах и заключены в диапазоне от -PI до PI |
| exp(x) | Возвращает число е, возведенное в степень x |
| log(x) | Возвращает натуральный логарифм числа x>0 |
| log10(x) | Возвращает логарифм числа x>0 по основанию 10 |
| sqrt(x) | Возвращает квадратный корень из неотрицательного числа x |
| pow(x,y) | Возвращает x в степени y |
Еще одной часто используемой библиотекой является пакет классов, предназначенный для работы с файлами. Для чтения информации из файла можно использовать уже знакомый нам класс BufferedReader, a для записи строк в файл - родственный ему класс BufferedWriter.
import java.io.*;
class TestRead {
public static void main(String[] args)
throws Exception{
BufferedReader r = new BufferedReader(
new FileReader("rfile.txt"));
String str;
while ((str = r.readLine()) != null) {
System.out.println(str);
}
}
}
(загрузить программу и
тестовый файл)
Приведем пример записи строк в файл помощью метода write. В отличии от аналогичного метода языка Ruby этот метод не добавляет символ перевода на новую строку автоматически.
Обратите внимание, что после окончания записи поток необходимо закрыть методом close.
import java.io.*;
class TestWrite {
public static void main(String[] args)
throws Exception{
BufferedWriter w = new BufferedWriter(
new FileWriter("wfile.txt"));
int i = 10;
String str1 = "Строка 1. ";
String str2 = "И ее продолжение.\n";
String str3 = "Еще одна, содержащая число " + i;
w.write(str1);
w.write(str2);
w.write(str3);
w.write("\n");
w.close();
}
}
Часто возникает необходимость разбить строку, полученную из файла, на отдельные компоненты (лексемы). В языке Ruby для этой цели мы пользовались функцией split. Ее Java-эквивалент представляет класс StringTokenizer. Вот пример его использования. Создайте файл info.txt и запишите в него свои фамилию, имя и отчество, разделенные пробелами.
import java.io.*;
import java.util.StringTokenizer;
class TestSplit {
public static void main(String[] args) throws Exception {
BufferedReader r = new BufferedReader(
new FileReader("info.txt"));
StringTokenizer t;
t = new StringTokenizer(r.readLine()," ");
while(t.hasMoreTokens()) {
System.out.println(t.nextToken());
}
}
}
При создании обьекта класса StringTokenizer используются
два параметра: первый - это строка, которую мы собираемся обработать,
а второй - разделители (в нашем случае это пробельный символ).
Обратите внимание, что мы подключили дополнительную библиотеку
java.util.StringTokenizer.
И, наконец, перепишем программу, иллюстрирующую наследованиe классов, на язык Java. Поместите в файл с именем Life.java код, приведенный ниже.
class Animal {
public void breath() {
System.out.println("Все животные дышат: "
+"вдохнули и выдохнули");
}
}
class Cat extends Animal {
// Подать голос
public void bark() {
System.out.println("Mew Mew, я кошка.");
}
}
class Bird {
public void layEgg() {
System.out.println("Яйцо снесено");
}
public void fly() {
System.out.println("Я птица, я лечу!!!");
}
}
class Life {
public static void main(String[] args) {
// Создаем объекты разных классов
Cat tama = new Cat();
tama.breath();
tama.bark();
Bird macaw = new Bird();
macaw.layEgg();
macaw.fly();
}
}
Можно заметить, что программа практически дублирует ее вариант на языке Ruby,
с точностью до замены оператора наследования (<) на
ключевое слово extends.
Задания