АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Java chapt01.FirstProgram

Здесь к имени приложения FirstProgram.class добавляется имя пакета chapt01, в котором он расположен.

Чтобы выполнить приложение, необходимо загрузить и установить последнюю версию пакета, например с сайта java.sun.com. При инсталляции рекомендуется указывать для размещения корневой каталог. Если JDK установлена
в директории (для Windows) c:\jdk1.6.0, то каталог, который компилятор Java будет рассматривать как корневой для иерархии пакетов, можно вручную задавать с помощью переменной среды окружения СLASSPATH в виде:

СLASSPATH=.;c:\jdk1.6.0\

Переменной задано еще одно значение ‘. ’ для использования текущей директории, например с:\temp, в качестве рабочей для хранения своих собственных приложений.

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

PATH=c:\jdk1.6.0\bin

Этот путь указывает на месторасположение файлов javac.exe и java.exe. В различных версиях операционных систем путь к JDK может указываться различными способами.

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

Следующая программа отображает в окне консоли аргументы командной строки метода main(). Аргументы представляют последовательность строк, разделенных пробелами, значения которых присваиваются объектам массива String[] args. Объекту args[0] присваивается значение первой строки и т.д. Количество аргументов определяется значением args.length.

/* пример # 4: вывод аргументов командной строки: OutArgs.java */

package chapt01;

 

public class OutArgs {

public static void main(String[] args) {

for (String str: args)

System. out. printf("Aрг-> %s%n", str);

}

}

В данном примере используется новый вид цикла версии Java 5.0 for языка Java и метод форматированного вывода printf(). Тот же результат был бы получен при использовании традиционного цикла

for (int i = 0; i < args.length; i++)

System. out. println("Aрг-> " + args[i]);

Запуск этого приложения осуществляется с помощью следующей командной строки вида:

java chapt01.OutArgs 2007 Mustang "Java SE 6"

что приведет к выводу на консоль следующей информации:

Арг-> 2007

Арг-> Mustang

Арг-> Java SE 6

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

Классы и объекты

Классы в языке Java объединяют поля класса, методы, конструкторы и логические блоки. Основные отличия от классов C++: все функции определяются внутри классов и называются методами; невозможно создать метод, не являющийся методом класса, или объявить метод вне класса; ключевое слово inline, как в C++, не поддерживается; спецификаторы доступа public, private, protected воздействуют только на те объявления полей, методов и классов, перед которыми они стоят, а не на участок от одного до другого спецификатора, как в С++; элементы по умолчанию не устанавливаются в private, а доступны для классов из данного пакета. Объявление класса имеет вид:

[спецификаторы] class ИмяКласса [extends СуперКласс]

[implements список_интерфейсов]{/*определение класса*/}

Спецификатор доступа к классу может быть public (класс доступен в данном пакета и вне пакета), final (класс не может иметь подклассов), abstract (класс может содержать абстрактные методы, объект такого класса создать нельзя). По умолчанию спецификатор устанавливается в дружественный (friendly). Такой класс доступен только в текущем пакете. Спецификатор friendly при объявлении вообще не используется и не является ключевым словом языка. Это слово используется, чтобы как-то определить значение по умолчанию.

Любой класс может наследовать свойства и методы суперкласса, указанного после ключевого слова extends, и включать множество интерфейсов, перечисленных через запятую после ключевого слова implements. Интерфейсы пред­ставляют собой абстрактные классы, содержащие только нереализованные методы.

// пример # 5: простой пример Java Beans класса: User.java

package chapt01;

public class User {

public int numericCode; //нарушение инкапсуляции

private String password;

 

public void setNumericCode(int value) {

if (value > 0) numericCode = value;

else numericCode = 1;

}

public int getNumericCode() {

return numericCode;

}

public void setPassword(String pass) {

if (pass!= null) password = pass;

else password = "11111";

}

public String getPassword() {

//public String getPass() {//некорректно – неполное имя метода

return password;

}

}

Класс User содержит два поля numericCode и password, помеченные как public и private. Значение поля password можно изменять только при помощи методов, например setPassword(). Поле numericCode доступно непосредственно через объект класса User. Доступ к методам и public -полям данного класса осуществляется только после создания объекта данного класса.

/*пример # 6: создание объекта, доступ к полям

и методам объекта: UserView.java: Runner.java */

package chapt01;

 

class UserView {

public static void welcome(User obj) {

System. out. printf("Привет! Введен код: %d, пароль: %s",

obj.getNumericCode(), obj.getPassword());

}

}

public class Runner {

public static void main(String[] args) {

User user = new User();

user.numericCode = 71; //некорректно - прямой доступ

// user.password = null; // поле недоступно

user.setPassword("pass"); //корректно

UserView. welcome (user);

}

}

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

Привет! Введен код: 71, пароль: pass

Объект класса создается за два шага. Сначала объявляется ссылка на объект класса. Затем с помощью оператора new создается экземпляр объекта, например:

User user; //объявление ссылки

user = new User(); //создание объекта

Однако эти два действия обычно объединяют в одно:

User user = new User(); /*объявление ссылки и создание объекта*/

Оператор new вызывает конструктор, поэтому в круглых скобках могут стоять аргументы, передаваемые конструктору. Операция присваивания для объектов означает, что две ссылки будут указывать на один и тот же участок памяти.

Сравнение объектов

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

/* пример # 7: сравнение строк и объектов: ComparingStrings.java */

package chapt01;

 

public class ComparingStrings {

public static void main(String[] args) {

String s1, s2;

s1 = "Java";

s2 = s1; // переменная ссылается на ту же строку

System. out. println("сравнение ссылок "

+ (s1 == s2)); // результат true

// создание нового объекта добавлением символа

s1 += '2';

// s1-="a"; //ошибка, вычитать строки нельзя

// создание нового объекта копированием

s2 = new String(s1);

System. out. println("сравнение ссылок "

+ (s1 == s2)); // результат false

System. out. println("сравнение значений "

+ s1.equals(s2)); // результат true

}

}

Консоль

Взаимодействие с консолью с помощью потока System.in представляет собой один из простейших способов передачи информации в приложение. В следующем примере рассматривается ввод информации в виде символа из потока ввода, связанного с консолью, и последующего вывода на консоль символа и его числового кода.

// пример # 8: чтение символа из потока System.in: DemoSystemIn.java

package chapt01;

 

public class ReadCharRunner {

 

public static void main(String[] args) {

int x;

try {

x = System. in. read();

char c = (char)x;

System. out. println("Код символа: " + c + " =" + x);

} catch (java.io.IOException e) {

e.printStackTrace();

}

}

}

Обработка исключительной ситуации IOException, которая возникает в операциях ввода/вывода и в любых других взаимодействиях с внешними устройствами, осуществляется в методе main() с помощью реализации блока
try-catch.

Ввод блока информации осуществляется с помощью чтения строки из консоли. Далее строка может быть использована в исходном виде или преобразована к требуемому виду.

// пример # 9: чтение строки из консоли: ReadCharRunner.java

package chapt01;

import java.io.*; //подключение пакета классов

 

public class ReadCharRunner {

 

public static void main(String[] args) {

/* байтовый поток ввода System.in передается конструктору потока

чтения при создании объекта класса InputStreamReader */

InputStreamReader is =

new InputStreamReader(System. in);

/* производится буферизация данных, исключающая необходимость

обращения к источнику данных при выполнении операции чтения */

BufferedReader bis = new BufferedReader(is);

try {

System. out. println(

"Введите Ваше имя и нажмите <Enter>:");

/* чтение строки из буфера; метод readLine() требует обработки

возможной ошибки при вводе из консоли в блоке try */

String name = bis.readLine();

System. out. println("Привет, " + name);

} catch (IOException e) {

System. err. print("ошибка ввода " + e);

}

}

}

В результате запуска приложения будет выведено, например, следующее:

Введите Ваше имя и нажмите <Enter>:

Остап


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.015 сек.)