Главная » Java, Web » Основные понятия Java

0

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

Создадим простейшую программу. Процесс создания состоит из трех основных частей:

?      ввод текста программы в компьютер;

?      компиляция введенного кода;

?      выполнение скомпилированного кода.

Простейший код программы будет выглядеть так:

public class HelloWorld {

//A program to display the message // "Hello, World!" on standard output

public static void main(String[] args) { System.out.println("Hello, World!");

}

}

Эта программа выводит сообщение "Hello, World!" Вывод этого сообщения осуществляется при помощи команды

System.out.println("Hello, World!");

Это пример вызова функции. Здесь вызвана функция System.out .println. Функция — это набор нескольких инструкций, объединенных вместе и образующих единое целое с заданным именем. В данном случае мы используем встроенную функцию. Встроенная функция — это заранее определенная функция, которая является неотъемлемой частью языка. Программа содержит в себе комментарии. Комментарии при работе программы полностью игнорируются. В данном случае строки комментария начинаются с символов // и заканчиваются с концом строки. Многострочные комментарии заключаются между символами /* и */. Все, кроме комментариев, подчинено правилам синтаксиса языка. В первой строке нашей программы мы определяем класс с именем HeiioWorid. Отметим, что не всякий класс является программой. Для того чтобы класс стал самостоятельной программой, в нем должна содержаться функция main о, которая определяется таким образом:

public static void main(String[] args) {

statements

}

При обращении к интерпретатору Java при запуске программы, интерпретатор обращается к функции main о. Слово public означает, что эта функция может быть вызвана извне, т. е. не из самой программы. Это важно, поскольку функция вызывается интерпретатором. Значения остальных слов станут понятны позже. Между фигурными скобками располагается набор инструкций, которые будут вызваны и выполнены при обращении к функции.

Апплеты создаются по-другому:

public class InterestIConsole extends ConsoleApplet {

protected String getTitleO {

return "Sample program V’lnterestlV";

}

protected void program() {

double principal;               // вложенная сумма

double rate;                    // годовой процент

double interest;                // процент за год

/* вычисления */ principal = 17000; rate = 0.07;

interest = principal * rate; // процент principal = principal + interest; /* вывод результата */ console.put("The interest earned is $"); console.putln(interest);

console.put("The value of the investment after one year is $"); console.putln(principal);

}

При этом используется следующая вспомогательная программа, содержащаяся в файле ConsoleApplet.java:

impo гt j ava.awt.*;

impo rt java.awt.event.*;

public class ConsoleApplet extends java.applet.Applet

implements Runnable, ActionListener { protected String title = "Java Console I/O"; protected String getTitleO { return title;

}

protected ConsolePanel consoles- protected void program () {

console.putln("Hello, World!");

}

private Button runButton;

private Thread programThread = null;

// поток run () private boolean programRunning = falser- private boolean firstTime = true; // false — если программа считает первый раз

public void run() { // запуск programRunning = true;

program();

programRunning = false; stopProgram() ;

}

synchronized private void startProgram() { runButton.setLabel("Abort Program"); if (!firstTime) { console.clear() ; try { Thread.sleep(300); } // задержка перед перезапуском программы

catch (InterruptedException e) { }

}

firstTime = false; programThread = new Thread(this); programThread.start() ;

}

synchronized private void stopProgram() { if (programRunning) { programThread.stop(); try { programThread.join(1000); } catch (InterruptedException e) { }

}

console.clearBuffers(); programThread = null; programRunning = false; runButton.setLabel("Run Again"); runButton.requestFocus();

}

public void init() {

setBackground(Color.black);

setLayout(new BorderLayout(2,2)); console = new ConsolePanel(); add("Center",console);

Panel temp = new Panel();

temp.setBackground(Color.white) ; Label lab = new Label(getTitle()); temp.add(lab) ;

lab.setForeground(new Color(180,0,0)); add("North", temp);

runButton = new Button("Run the Program");

temp = new Panel();

temp.setBackground(Color.white);

temp.add(runButton);

runButton.addActionListener(this);

add("South",temp); }

public Insets getlnsets() { return new Insets(2,2,2,2);

}

public void stop() {

if (programRunning) { stopProgram() ; console.putln() ;

console.putln("*** PROGRAM HALTED");

}

}

synchronized public void actionPerformed(ActionEvent evt) { if (programThread != null) { stopProgram(); console.putln();

console.putln("*** PROGRAM ABORTED BY USER");

}

else

startProgram();

}

}

Переменные и примитивные типы

Имена играют фундаментальную роль в программировании. При помощи имен называются разные вещи. Важно знать синтаксис и семантику при использовании имен. Имя — это последовательность одного или нескольких

символов. Имя должно начинаться с буквы и состоять из букв, цифр, символов подчеркивания (_). Например:

?    n

?    п

?    rate

?    х15

?    quite_a_long_name

?    HelloWorld

Заглавные буквы и строчные буквы считаются различными. Имена

HelloWorld, heiioworid, helloworld, hEiioWorLD — это разные имена. Определенные имена являются зарезервированными и имеют специальное назначение и не могут быть использованы программистом для других целей, например:

?    class

?    public

?    static

?    if

?    else

?    while

и еще несколько десятков других имен.

Значение присваивается переменной при помощи оператора присваивания в виде:

variable = expression;

Например:

rate = 0.07;

interest = rate * principal;

Переменная служит для хранения только одного типа данных. Существуют типы, встроенные в Java, это примитивные типы:

?    byte

?    short

?    int

?    long

?    float

?    double

?    char

?    boolean

Тип short соответствует двум байтам, интервал значений от —32 768 до 32 767. Тип int соответствует 32 битам, интервал значений от —2 147 483 648 до 2 147 483 647. Тип long соответствует 64 битам, интервал значений от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Тип float занимает 4 байта памяти, максимальное значение примерно 1038. Тип char занимает два байта памяти. Имя константы называется литералом. Для логического литерала существует два значения true и false.

Пример программы, в которой используются переменные и операторы присваивания:

public class Interest {

public static void main(String[] args) { /* объявление переменных */ double principal;        // вложенная сумма

double rate;                // годовой процент

double interest;            // начисление за год

/* вычисления */ principal = 17000; rate = 0.07;

interest = principal * rate; principal = principal + interest;

/* вывод результата */ System.out.print("The interest earned is $"); System.out.println(interest);

System.out.print("The value of the investment after one year is $");

System.out.println(principal); }

}

Строки, объекты, функции

В предыдущем разделе мы рассмотрели восемь примитивных типов и тип строк string. Существует принципиальное различие между примитивными типами и типом string. Дело в том, что string — это объект. В наших примерах будет использоваться класс Textio. Код Java-программы (TextlO.java) приведен в конце настоящего приложения.

Классы в Java выполняют две важные функции. Первая состоит в том, что классы объединяют в себе переменные и функции, содержащиеся в этом классе. Переменные и функции становятся статическими членами класса, так, например, функция main о — статическая функция класса. В определении таких функций используется слово static. Второе назначение классов — они описывают объекты. Класс — это тип, а объект — это значение этого типа, string — это название класса, который является частью языка Java. И строка, например, "Hello, World" — это значение типа string.

Всем известны математические функции, такие, как, например, квадратный корень. В языке Java существует аналогичная функция, Math.sqrt. Эта функция — статический член класса, называемого Math. Если х — это какое-либо числовое значение, то Math.sqrt (х) — это тоже значение, равное квадратному корню от х. Чтобы вывести это значение на печать, мы используем следующую команду: System.out.print(Math.sqrt(x));

Можно использовать оператор присваивания для инициализирования переменной:

lengthOfSide = Math.sqrt(х);

Функция представляет переменную типа double и может применяться там, где используются переменные типа double.

Еще один пример математической функции:

Math.abs(х)

Эта функция вычисляет модуль (абсолютное значение). Среди математических функций есть и другие, например, Math, sin (х), Math.cos(x), Math.tan (x), Math.asin (x), Math.acos(x), Math.atan (x), Math.exp(x), Math, log (x) , Math.pow (x, y) , Math, floor (x) , Math, random ().

Приведем пример программы, использующей эти функции:

public class TimedComputation {

public static void main(String[] args) {

long startTime; // стартовое время в миллисекундах

long endTime; // время при завершении вычислений, в миллисекундах double time; // Разница времен, в секундах. startTime = System.currentTimeMillis();

double width, height, hypotenuse; // стороны треугольника width = 42.0; height = 17.0;

hypotenuse = Math.sqrt(width*width + height*height);

System.out.print("A triangle with sides 42 and 17 has hypotenuse ");

System.out.printIn(hypotenuse);

System.out.printIn("\nMathematically, sin(x)*sin(x) + " + "cos(x)*cos(x) — 1 should be 0."); System.out.println("Let’s check this for x = 1:");

System.out.print("sin(l)*sin(l) + cos(1)*cos(1) — 1 is "); System.out.printIn(Math.s in(1)*Math.s in(1)

+ Math.cos(1)*Math.cos (1) – 1); System.out.println("(There can be round-off errors when " + " computing with real numbers!)");

System.out.print("\nHere is a random number: ");

System.out.printIn(Math.random());

endTime = System.currentTimeMillis();

time = (endTime – startTime) / 1000.0;

System.out.print("\nRun time in seconds was: ");

System.out.printIn(time);

}

}

Величина типа string — это объект. Этот объект содержит данные, а именно, последовательность символов, составляющих строку. В нем есть также функции. Например, функция length о вычисляет длину строки. Строку можно создать при помощи следующей декларации:

String str;

str = "Seize the day!"; Еще один пример:

System.out.print("The number of characters in "); System.out.println("the string V’Hello WorldV is "); System.out.println("Hello World".length());

Объект string содержит множество функций. Вот некоторые из них.

?      si.equals (s2) — возвращает логическое значение, true — если строка si в точности такая же, как строка s2.

?      si.equalslgnoreCase (s2) — то же самое, что и sl.equalsO, но заглавные и строчные буквы считаются одинаковыми.

?      si. length () — целое значение, равное количеству символов в строке.

?      si.charAt(N) — значение типа char, символ, расположенный на позиции с номером N в строке, начиная с нулевой позиции.

?      si. substring (n,m) — тип string, строка с символами в позициях N,

N+ 1, …, м- 1.

?      si.indexof (s2) — целое, если s2 является фрагментом si, то возвращается номер позиции, с которого начинается s2 в si.

?      si. compareTo (s2) — целое, если строки равны, то 0.

?       si. touppercase () — строка, записанная заглавными буквами.

?       si. trim о — строка с удаленными непечатаемыми символами, такими как пробелы, табуляции и т. п.

Строки можно складывать:

System.out.println("Hello, " + name + ". Pleased to meet you!");

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

System.out.print("After "); System.out.print(years);

System.out.print(" years, the value is "); System.out.print(principal); Это можно записать в виде:

System.out.print("After " + years + " years, the value is " + principal);

Выражения

Литералы, переменные, функции — это примеры простых выражений. Более сложные выражения состоят из простых выражений и операторов, например А+В*С, В*С.

Арифметические операторы

Арифметические операторы обозначаются знаками +,-,*, /.

Операторы увеличения и уменьшения на единицу

Эти операторы требуют только одного операнда, обозначаются ++ и —.

! Пример                                                                                                                                                    !

counter = counter + 1; goalsScored = goalsScored + 1;

Эти выражения с помощью операторов увеличения и уменьшения можно записать следующим образом:

counter++; goa1s S со red++;

! Пример                                                                                                                                                    !

у = x++; у = ++x;

Text10.putIn(—x) ; z = (++x) * (y—) ;

Если x равно 6, то после выполнения инструкции у = х++ у будет равно 6, а после выполнения инструкции у = ++х у будет равно 7. В обоих случаях новое значение для х будет 7.

Операторы сравнения

Операторы сравнения используются при работе с логическими величинами, значение их булево, т. е. true или false:

?       а == в — А "равняется" В;

?       а != в — А "не равняется" В;

?       а < в — А "меньше чем" В;

?       а > в — А "больше чем" В;

?       а <= в — А "меньше или равно" В;

?       а >= в — А "больше или равно" В.

Эти операторы можно использовать при работе с числовыми значениями в качестве операндов.

I Пример

boolean sameSign;

sameSign = ((х > 0) == (у > 0));

Логические операторы

Логические операторы работают с логическими значениями. Это операторы and (И) (&&), or (ИЛИ) (и), not (НЕ) (!). Например:

(х != 0) && (у/х > 1) test = ! test;

Условные операторы

Общий вид простого условного оператора:

boolean-expression ? expression-1 : expression-2

Если булево выражение имеет значение true, то выполняется expression-i, в противном случае выполняется expression-2. Например:

next = (N се 2 == 0) ? (N/2) : (3*N+1) ;

Операторы присваивания и приведения типа

Примеры                                                                                                                                                j

int A; double X; short B; A = 17;

X = А; //А приводится к типу double

В = A; // нельзя, тип не приводится автоматически

Исправление:

int А;

short В;

А = 17;

В = (short)А; // тип приводится в явном виде

При приведении некоторых типов могут произойти смысловые изменения значений, так (short) 100 ООО равно 34 464. Тип short образуется путем взятия 4 битов от исходного значения, часть информации теряется.

Пример            использования            операторов            приведения            типа

(int) (6*Math. random о ) — целое случайное число из набора 0, 1,2, 3, 4, 5.

Можно приводить типы из целых к char, при этом берется значение соовет- ствующего символа в соответствии с кодировкой Unicode. Например, (char) 97 — это ‘a’, a (int) ‘ + ‘ равно 43.

Примеры                                                                                                                                                j

х -= у;    //   х = х — у;

х *= у;    //   х = х * у;

х /= у;    //   х = х / у;

х се= у;      //   х = х % у; (для целых х и у)

q &&= р;   //   q = q && р; (для логических booleans q и р)

Комбинированные операторы присваивания можно использовать и со строками:

str += X str = str + X

Иерархия операторов

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

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

Унарными операторами называются такие операторы, для выполнения которых необходим один операнд. Бинарные операторы требуют наличия двух операндов. Тернарные операторы работают с тремя операндами.

Список операторов в соответствии с иерархией:

1.    Унарные операторы: ++, —, !, унарные — и +, оператор приведения типа.

2.     Умножение и деление: *, /, %.

3.     Сложение и вычитание: +, -.

4.     Операторы отношений: <, >, <=, >=.

5.     Операторы равенства и неравенства: ==, !=.

6.    Логическое сложение "И": &&.

7.    Логическое "ИЛИ": ||.

8.     Условный оператор: ?:

9.     Операторы присваивания: =, +=, -=, *=, /=, %=.

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

Источник: Будилов В. А. Интернет-программирование на Java. — СПб.: БХВ-Петербург, 2003. — 704 е.: ил.

По теме:

  • Комментарии