Введение в синтаксис языка




После установки запускаем приложение NetBeans. В окне приложения выбираем команду Файл ^Создать проект, как показано на рис. 1.1.

В появившемся окне Создать проект выберите тип создаваемого приложения (рис. 1.3). В зависимости от версии и "комплектации" среды разработки NetBeans окно может выглядеть по-разному, но идея остается неизменной: необходимо указать язык разработки (если соответствующая версия NetBeans допускает использование нескольких языков) и непосредственно тип приложения. В данном случае выбираем в категории языков (список Категории в левой части окна) пункт Java (что соответствует языку Java), а в правой части окна в списке Проекты выбираем пункт Приложение Java.

В следующем окне Новый Приложение Java Application (рис. 1.4) следует указать название создаваемого проекта - в поле Имя проекта. По возможности имя должно быть кратким и информативным. В поле Расположение проекта указываем место, где будет сохранен проект. Флажок Создать главный класс оставляем установленными. В поле возле опции Создать главный класс дублируем название проекта HelloWorld2 - в этом поле вводится название для главного класса программы. По окончании нажимаем Готово.

 

 

 

 

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

Начнем с примера:

Мы рекомендуем вам попробовать написать исходный текст во всех доступных вам средах разработки и редакторах, чтобы определить, какой из них вам больше всего подходит.

Для большинства языков программирования не важно, как называется файл исходного кода, но для компилятора языка Java имя файла существенно. Поэтому мы и указываем имя, под которым нужно сохранить исходный код первой программы: HelloWorld2.java.

 

public class HelloWorld2{

public static void main(String[] args){

System.out.println("Всем большой текстовый привет!"); }

 

Результат представлен на рис 2.8.

Та же простая программа, но с использованием графической библиотеки

приведена ниже. При этом вывод программы осуществляется в виде окна (рис. 2.9).

import javaxeswing.*;,

public class helioworld {

public static void main (String[] args){

JOptionPane.showMessageDialog(null, "Привет, изучаем Java ");

 

 

Основные конструкции языка

Переменные и присвоение значений

 

Действие, которое в большинстве программ встречается чаще всего, - это присвоение значений переменным. Любой язык программирования обязательно содержит команду присваивания, а то и несколько. Язык Java - не исключение.

Под переменной понимается именованная область памяти, содержимое которой является значением этой переменной. В ходе работы программы значение переменной может многократно меняться. Способность менять значение - это отличительное свойство переменных.

Напишем пример, демонстрирующий объявление переменных и присвоение им значений (листинг 2.2).

 

Листинг 2.2 Использование переменных

// Пример присвоения значений переменным public class AssignExample {

public static void main(String[] args) {

// объявляем две переменные int varl; int var2;

// присваиваем им значения: varl = 4096; var2 = varl / 4;

/

// выводим текущие значения переменных System.out.printIn("varl = " + varl);

System.out.println("var2 = varl / 4 = " + var2);

} // main!)

} // AssignExample class

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

Ү:\>java AssignExample

varl = 4096

var2 = varl / 4 = 1024

Разберем листинг 2.2 построчно. Первая незакомментированная строка метода main () содержит объявление переменной с именем varl:

int varl;

Это переменная целого (int) типа. Объявление переменной определенного типа указывает компилятору, сколько памяти он должен зарезервировать для хранения значений этой переменной. В Java существует непреложное правило, согласно которому каждая переменная должна быть объявлена перед первым ее использованием. Подробнее о типах мы поговорим далее.

Примечание

Программисты на C/C++ могли бы возразить, что в данном случае речь идет не об объявлении, а об определении переменной; поскольку под нее выделяется память. Однако в языке Java различия между этими двумя понятиями не существует, и закрепился термин «объявление переменной».

В следующей строке листинга точно так же объявляется переменная целого типа var2. Далее переменной varl присваивается целочисленная константа:

 

varl = 4096;

 

Действие присваивания обозначается в языке Java символом «=». Символы или группы символов, которые служат для обозначения различных видов операций, называются операторами. Таким образом, символ «=» - это оператор присваивания. Далее в этой главе мы рассмотрим другие операторы.

 

var2 = varl / 4;

 

В этой строке переменной var2 присваивается значение не константы, а выражения. Значение вычисленного арифметического выражения становится значением переменной var2, при этом значение переменной varl не изменяется.

Арифметические операции в языке Java обозначаются общепринятыми символами (+,-,*,/ и т. п.).

 

System.out.printIn("varl ="+ varl);

 

В этой строке значение переменной выводится на консоль с помощью уже знакомого вам метода print Ln (). Новое для вас здесь - подготовка строки к выводу: результирующая строка формируется из текста в кавычках и преобразованного к строковому виду значения переменной var1. Оператор «+» здесь служит не для сложения чисел, а для слияния строк.

 

Типы данных

Тип данных - это характеристика переменной или константы, опреде­ляющая, какого рода значение хранится в отведенной для нее области памяти: числовое (целое или вещественное), символьное, логическое, объект какого-либо класса или другое.

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

Напомним, что Java - строго типизированный язык, из чего следует, в числе прочего, что любая переменная перед ее использованием должна быть объявлена с указанием ее типа.

Встроенные типы данных Java делятся на две категории: простые (primitive) и ссылочные (reference). К ссылочным типам относятся массивы, классы, интерфейсы и перечисления. Простые типы данных делятся на числовые (целые и вещественные) и логические, причем символьный тип относится к числовым.

Примечание

Такие естественные для программистов на других языках типы данных, как строковый и дата/время, реализованы в Java как ссылочные: классами string и Date.

Целочисленные типы

Для хранения целых чисел в Java предусмотрены четыре типа данных (табл. 2.1). Все они хранят целые числа со знаком. Беззнаковых числовых типов, как в C/C+ +, в языке Java нет.

Характеристики целочисленных типов данных Таблица 2.1
Тип Разрядность Диапазон значений
byte 8 битов -128...127
short 16 битов -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

 

 

Тип int (integer) используется чаще всего. Обычно именно этот тип имеют переменные цикла, индексы массива и т. п. Тип long предназначен для хранения чисел, выходящих за пределы диапазона int.

Меньше всего памяти занимает число типа byte - один байт. Это единственный тип данных в языке Java, который используется для побайтовой обработки двоичных данных.

Последний тип, short, отличается тем, что старший байт двухбайтового числа хранится в памяти первым. Так хранились целые числа на 16-разрядных компьютерах, а в наше 32-разрядное время этот тип данных почти вышел из употребления.

Символьный тип

К целочисленным типам относится и тип char, предназначенный для представления одного символа.

К хранению символов национальных алфавитов разработчики Java отнеслись с особым вниманием, потому что приложения, написанные на Java, должны были работать по всему миру. В отличие от большинства других языков, где символ занимает один байт, размер типа char в Java составляет 2 байта. Такой размер необходим для хранения символа по стандарту Unicode.

Unicode - это стандарт кодирования множества национальных алфавитов, видов письма, технических и математических символов, разработанный для того, чтобы разрешить проблемы интернационализации в многоязычной компьютерной среде. Более ранний стандарт ASCII, в котором каждый символ представлен одним байтом, был пригоден только для европейских языков. Таблица ASCII вошла в набор Unicode как его подмножество.

Собственно Unicode - это набор (последовательность) символов, который можно закодировать разными способами. Язык Java использует кодировку UTF-8, которая отводит по одному байту для букв западно-европейских алфавитов, по два байта - для восточноевропейских, а для алфавитов экзотических языков - три и более байтов. При этом строки, содержащие только 7-битные символы из первой половины таблицы ASCII, имеют одинаковое представление как в ASCII, так и в UTF-8.

Переменной типа char можно присвоить в качестве значения одиночный символ - как печатный, так и управляющий. Например, переменной ch можно присвоить букву L:

 

char ch; ch = 'L';

 

Вывести на консоль значение переменной типа char можно с помощью метода print In ();

 

System.out.printIn("Значение переменной ch равно " + ch);

 

Поскольку тип данных char относится к целочисленным, над ним можно выполнять арифметические операции. Следующий пример демонстрирует применение операторов инкремента + + и декремента -.

Листинг 2.6. Операции инкремента и декремента над переменной символьного типа

// сохраните исходный код в файле с именем CharArithDemo.java public class CharArithDemo {

public static void main(String[] args) { char ch;

ch = 'L';

System.out.printing"ch равно " + ch); ch++;

System.out.printIn("значение ch изменилось на ", + ch);

ch = 'Д'; ch--;

System.out.println("значение ch снова изменилось

и равно " + ch);

} // main(String[])

} // CharArithDemo class

 

Эта программа выведет следующие строки:

ch равно L

значение ch изменилось на М значение ch снова изменилось и равно Г

Важное замечание: символ (‘А’) и строка из одного символа («А») — это совершенно разные вещи с точки зрения языка Java. Данные символьного и строкового типа хранятся в памяти по-разному.

Типы данных для вещественных чисел

Вещественное число, как известно, состоит из целой и дробной части, разделенных десятичной точкой. Для представления вещественных чисел Java располагает двумя типами данных: float и double. Первый из них предназначен для хранения чисел с 7-8 значащими цифрами, второй - для чисел с двойной точностью (15-16 значащих цифр).

Характеристики вещественных типов данных Таблица 2.2
Тип Разрядность Диапазон значений
float 32 бита 3.4е-38... 3.4е+38
double 64 бита 1,7е-308... 1,7е+308

 

Тип данных double используется гораздо чаще, чем float. С ним работают все математические функции библиотек Java. Например, метод sqrt (), определенный в классе Math и вычисляющий квадратный корень своего аргумента, принимает аргумент типа double и возвращает значение этого же типа. Следующий пример демонстрирует применение метода sqrt () для вычисления длины гипотенузы прямоугольного треугольника по теореме Пифагора.

Листинг 2.7. Пример работы с вещественными числами

// вычисление длины гипотенузы по теореме Пифагора public class HypotDemo {

public static void main(String[] args) {
double cathetusl, cathetus2, hypot;

cathetusl =3; // длина первого катета cathetus2 =4; // длина второго катета

hypot = Math.sqrt((cathetusl * cathetusl) +

(cathetus2 * cathetus2));

 

System.out.printIn("длина гипотенузы равна " + hypot); } // main(String[])

} // class HypotDemo

 

Логический тип

Переменная типа boolean (логического) может принимать всего два значения: true (истина) и false (ложь). Для наглядности приведем небольшой пример:

Листинг 2.8. Демонстрация переменных логического типа

// пример использования типа данных boolean // сохраните в файл BoolDemo.java public class BoolDemo { public static void main(String[] args) {

boolean b;

b = false;

System.out.printIn("b равно " + b);

b = true;

System.out.printIn("b равно "+ b);

// переменная логического типа может стоять // в условии оператора if

if (b) System.out.printIn("Как вы думаете, увидите ли вы эту строку?");

// операторы сравнения возвращают логическое значение

System.out.printIn("Выражение 10 > 9 имеет значение "

+ (10 > 9));

} // main(Stringf] args)

} // BoolDemo class

 

Когда вы запустите программу BoolDemo, вы можете заметить, что ме­тод println () выводит значение логического типа в виде строки true или false. Из листинга видно также, что при условном операторе не обязательно должно стоять логическое выражение - с таким же успехом интерпретатор Java может проверять значение переменной типа boolean. Благодаря этому отпадает необходимость писать громоздкие конструкции вроде:

 

if (b == true) System, out.println ("true")■;

/*хотя это тоже допустимо*/

 

В последней команде вывода метод print In () печатает значение не переменной, а логического выражения (10 > 9), возвращающего значение true. Забегая вперед, скажем, что выражение в данном случае должно быть взято в скобки, потому что оператор конкатенации строк «+» имеет более высокий приоритет, чем оператор сравнения «>».

 

Литералы и константы

 

Литерал - это постоянное значение, записанное в программе в читаемой форме. Например, число 100 - это литерал, одиночный символ и текстовая строка тоже могут быть литералами и т. д.

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

Counter= 1;

Textstr = "Произвольная строка";

ch = '?';

А = 4е-1;

Здесь Counter, Textstr, S, А – это переменные, а 1, "Произвольная строка", '? ', 4е-1 - литералы.

Литерал может иметь значение любого простого типа данных. Тип литерала определяется формой его записи. Например, '?' - это литерал символьного типа, а «?» - строкового; 10 - типа int, а 10.0 - типа double. Вещественные числа записываются либо с десятичной точкой, либо в так называемой научной (экспоненциальной) нотации с указанием степени числа 10: 4е-1 - то же самое, что 0.4.

Для того, чтобы заставить компилятор считать литерал, опознаваемый им как данные одного типа, данными другого типа, служат модификаторы типа. Символ L (заглавный или строчный) превращает литерал типа int в литерал типа long:

 

int nl = 24;

long n2 = 24L;

 

Вещественные литералы имеют по умолчанию тип данных double. Чтобы его поменять на float, добавьте к присваиваемому значению символ F:

 

float fl = 12.34F;

 

Целочисленные литералы распознаются как тип int, но их можно присваивать также переменным других целых типов: short, byte и char - при условии, что значение литерала не выходит за пределы диапазона для соответствующего типа, а переменной типа long - без всяких условий.

Шестнадцатеричные и восьмеричные литералы

Если вы уже когда-нибудь писали программы, то знаете, что нередко при­ходится работать с числами, которые удобнее представлять не в десятичной записи. Язык Java позволяет без труда использовать восьмеричную и шестнадцатеричную формы записи:

 

hex = OxFF // в десятичной системе соответствует числу 255

oct = 01l //в десятичной системе соответствует числу 9

 

Если запись числа начинается с нуля, то число понимается как восьме­ричное; если в префиксе «Ох», то - как шестнадцатеричное.

 

Специальные символы (Esc-последовательности)

Как уже сказано, переменной типа char можно присваивать в качестве зна­чения не только алфавитно-цифровой символ, но и такой, который нельзя ввести с клавиатуры - например, символы, посылаемые клавишами «Таb» или «Backspace». Для того, чтобы использовать такие символы в литералах, служат так называемые Esc-последовательности, то есть символ обратного слэша, за которым следует код вводимого символа (табл. 2.3).

Esc-последовательности в языке Java Таблица 2.3  

 

 

Примеры:

char ch;

ch = '\t'; // знак табуляции

ch ='\ ''; // символ апострофа

 

Строковые литералы

Распространенной разновидностью литерала в языке Java является строка - последовательность символов, заключенная в кавычки:

 

System.out.println("Это строковый литерал");

 

А что делать, если внутри самой строки встречается кавычка? Не будет ли она воспринята как символ завершения строки? Будет, если ее не экранировать с помощью Esc-последовательности:

 

System.out.println("0\'Key"); // строка с апострофом

System.out.println("Строка с \"кавычками\"");

 

Часто строковые литералы используются для указания пути к некоторому файлу. В ОС Windows символом-разделителем пути служит обратный слэш. Его тоже необходимо экранировать с помощью Esc-последовательности:

 

String filename = "с:\\project\\helloworld\\HelloWorld.java";

 

Примечание

В ОС семейства Unix для разделения пути служит прямой слэш (/). Интерпретатор Java позволяет использовать этот символ и на платформе Windows. Рекомендуется для единообразия всегда писать пути через прямой слэш. Экранировать этот символ не нужно.

Следующий пример показывает, как использовать Esc-последовательности для представления специальных символов внутри строки.

 

Листинг 2.9. Символы форматирования текста

public class StrDemo { public static void main(String[] args) {

// для перевода каретки (начала новой строки)

// служит код \п

System.out.println("Первая строкаХпВторая строка");

// знак табуляции помогает оформить выводимый текст // в колонки. Он вводится с помощью кода \t System.out.println("A\tB\tC");

System.out.println("D\tE\tF");

} // main(String[]) method }

// StrDemo class

 

 



Поделиться:




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

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


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