|
||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Вопрос 1.5Дан код: public class Quest5{ public static void main(){ System.out.print("А"); } public static void main(String args){ System.out.print("Б"); } public static void main(String[] args){ System.out.print("В"); } } Что будет выведено в результате компиляции и запуска: 1) ошибка компиляции; 2) Б; 3) ВБА; 4) В; 5) АБВ. ТИПЫ ДАННЫХ И ОПЕРАТОРЫ Любая программа манипулирует информацией (простыми данными и объектами) с помощью операторов. Каждый оператор производит результат из значений своих операндов или изменяет непосредственно значение операнда. Базовые типы данных и литералы В языке Java используются базовые типы данных, значения которых размещаются в стековой памяти (stack). Эти типы обеспечивают более высокую производительность вычислений по сравнению с объектами. Кроме этого, для каждого базового типа имеются классы-оболочки, которые инкапсулируют данные базовых типов в объекты, располагаемые в динамической памяти (heap). Определено восемь базовых типов данных, размер каждого из которых остается неизменным независимо от платформы. Беззнаковых типов в Java не существует. Каждый тип данных определяет множество значений и их представление в памяти. Для каждого типа определен набор операций над его значениями.
В Java используются целочисленные литералы, например: 35 – целое десятичное число, 071 – восьмеричное значение, 0х51 – шестнадцатеричное значение. Целочисленные литералы по умолчанию относятся к типу int. Если необходимо определить длинный литерал типа long, в конце указывается символ L (например: 0xffffL). Если значение числа больше значения, помещающегося в int (2147483647), то Java автоматически предполагает, что оно типа long. Литералы с плавающей точкой записываются в виде 1.618 или в экспоненциальной форме 0.112E-05 и относятся к типу double, таким образом, действительные числа относятся к типу double. Если необходимо определить литерал типа float, то в конце литерала следует добавить символ F. Символьные литералы определяются в апострофах ('a', '\n', '\141', '\u005a'). Для размещения символов используется формат Unicode, в соответствии с которым для каждого символа отводится два байта. В формате Unicode первый байт содержит код управляющего символа или национального алфавита, а второй байт соответствует стандартному ASCII коду, как в C++. Любой символ можно представить в виде '\u code ', где code представляет двухбайтовый шестнадцатеричный код символа. Java поддерживает управляющие символы, не имеющие графического изображения; '\n' – новая строка, '\r' – переход к началу, '\f' – новая страница, '\t' – табуляция, '\b' – возврат на один символ, '\uxxxx' – шестнадцатеричный символ Unicode, '\ddd' – восьмеричный символ и др. Начиная с J2SE 5.0 используется формат Unicode 4.0. Поддержку четырехбайтным символам обеспечивает наличие специальных методов в классе Character. К литералам относятся булевские значения true и false, а также null – значение по умолчанию для ссылки на объект. При инициализации строки всегда создается объект класса String – это не массив символов и не строка. Строки, заключенные в двойные апострофы, считаются литералами и размещаются в пуле литералов, но в то же время такие строки представляют собой объекты. В арифметических выражениях автоматически выполняются расширяющие преобразования типа byte à short à int à long à float à byte b = (byte)128; //преобразование int в byte Указанное в данном примере преобразование необязательно, так как в операциях присваивания литералов при инициализации преобразования выполняются автоматически. При инициализации полей класса и локальных переменных с использованием арифметических операторов автоматически выполняется приведение литералов к объявленному типу без необходимости его явного указания, если только их значения находятся в допустимых пределах, кроме инициализации объектов классов-оболочек. Java не позволяет присваивать переменной значение более длинного типа, в этом случае необходимо явное преобразование типа. Исключение составляют операторы инкремента (++), декремента (--) и сокращенные операторы (+=, /= и т.д.). При явном преобразовании (тип)значение возможно усечение значения. Имена переменных не могут начинаться с цифры, в именах не могут использоваться символы арифметических и логических операторов, а также символ ‘ # ’. Применение символов ‘ $ ’ и ‘ _ ’ допустимо, в том числе и в первой позиции имени. /* пример # 1: типы данных, литералы и операции над ними:TypeByte.java */ package chapt02; public class TypeByte { public static void main(String[] args) { byte b = 1, b1 = 1 + 2; final byte B = 1 + 2; //b = b1 + 1; //ошибка приведения типов /* b1 – переменная, и на момент выполнения кода b = b1 + 1; может измениться, и выражение b1 + 1 может превысить допустимый размер byte- типа */ b = (byte)(b1 + 1); b = B + 1; // работает /* B - константа, ее значение определено, компилятор вычисляет значение выражения B + 1, и если его размер не превышает допустимого для byte типа, то ошибка не возникает */ //b = -b; //ошибка приведения типов b = (byte) -b; //b = +b; //ошибка приведения типов b = (byte) +b; int i = 3; //b = i; //ошибка приведения типов, int больше чем byte b = (byte) i; final int I = 3; b = I; // работает /*I –константа. Компилятор проверяет, не превышает ли ее значение допустимый размер для типа byte, если не превышает, то ошибка не возникает */ final int I2 = 129; //b=I2; //ошибка приведения типов, т.к. 129 больше, чем 127 b = (byte) I2;
b += i++; // работает b += 1000; // работает b1 *= 2; // работает float f = 1.1f; b /= f; // работает /* все сокращенные операторы автоматически преобразуют результат выражения к типу переменной, которой присваивается это значение. Например, b /= f; равносильно b = (byte)(b / f); */ } } Переменная базового типа, объявленная как член класса, хранит нулевое значение, соответствующее своему типу. Если переменная объявлена как локальная переменная в методе, то перед использованием она обязательно должна быть проинициализирована, так как она не инициализируется по умолчанию нулем. Область действия и время жизни такой переменной ограничена блоком {}, в котором она объявлена. Документирование кода В языке Java используются блочные и однострочные комментарии /* */ @author – задает сведения об авторе; @version – задает номер версии класса; @exception – задает имя класса исключения; @param – описывает параметры, передаваемые методу; @return – описывает тип, возвращаемый методом; @deprecated – указывает, что метод устаревший и у него есть более совершенный аналог; @since – с какой версии метод (член класса) присутствует; @throws – описывает исключение, генерируемое методом; @see – что следует посмотреть дополнительно. Из java-файла, содержащего такие комментарии, соответствующая утилита javadoc.exe может извлекать информацию для документирования классов В качестве примера можно рассмотреть снабженный комментариями слегка измененный класс User из предыдущей главы. package chapt02;
public class User { /** * personal user's code */ private int numericCode; /** * user's password */ private String password; /** * see also chapter #3 "Classes" */ public User() { password = "default"; } /** * @return the numericCode * return the numericCode */ public int getNumericCode() { return numericCode; } /** * @param numericCode the numericCode to set * parameter numericCode to set */ public void setNumericCode(int numericCode) { this. numericCode = numericCode; } /** * @return the password * return the password */ public String getPassword() { return password; } /** * @param password the password to set * parameter password to set */ public void setPassword(String password) { this. password = password; } } Сгенерированный для этого класса HTML-документ будет иметь вид: Рис. 2.1. Фрагмент документации для класса User Операторы Операторы Java практически совпадают с операторами C++ и имеют такой же приоритет. Поскольку указатели в Java отсутствуют, то отсутствуют операторы *, &, ->, delete для работы с ними. Операторы работают с базовыми типами и объектами классов-оболочек над базовыми типами. Операторы + и += производят также действия с по конкатенации с операндами типа String. Логические операторы ==, != и оператор присваивания = применимы к операндам любого объектного и базового типов, а также литералам. Применение оператора присваивания Операции над числами: +, –, *, %, /, ++, –– а также битовые операции &, |, ^, ~ и операции сдвига аналогичны операциям C++. Деление на ноль целочисленного типа вызывает исключительную ситуацию, переполнение не контролируется. Операции над числами с плавающей запятой практически те же, что и в других алгоритмических языках, но по стандарту IEEE 754 введены понятие бесконечности +Infinity и –Infinity и значение NaN (Not a Number), которое может быть получено, например, при извлечении квадратного корня из отрицательного числа. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.013 сек.) |