Программирование на Java
Сертификат появляется в профиле ресурса INTUIT, и Вы можете заказать его бумажную версию на сайте INTUIT.
Внимание !
Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier!
Что означает термин «строгая типизация»?
переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной
переменная связывается с типом в момент объявления и тип не может быть изменён позже
тип переменной может изменяться в процессе работы программы
переменная имеет тип, известный уже на момент компиляции
ничего из перечисленного
Какое утверждение относительно языка Java верно?
он является только компилируемым
он является только интерпретируемым
он является и компилируемым, и интерпретируемым
ни одно из перечисленных
Какие утверждения относительно языка Java верны:
язык Java является объектно-ориентированным
Java является расширением HTML
язык Java является кроссплатформенным
синтаксис языка Java не похож на синтаксис языка C
язык Java имеет открытую спецификацию
Отметьте верное утверждение относительно языков Java и JavaScript:
оба языка кроссплатформенны
их спецификации являются закрытыми
JavaScript является синонимом Java
Какое из следующих утверждений верно?
в Java можно использовать множественное наследование реализаций
в Java можно создавать многопоточные приложения
в Java можно вручную освобождать память, выделенную под объекты
ничего из перечисленного
Какие из следующих утверждений верны?
в Java существует всего 8 типов данных, которые не являются объектами
в Java все типы данных являются объектами
простые типы могут быть объектами
ссылочные типы могут быть объектами
примитивные типы являются аналогом ссылочных типов
Какие из следующих утверждений верны?
язык Java обладает встроенной и прозрачной моделью безопасности
язык Java не является объектно-ориентированным
язык Java прост в освоении
язык Java ориентирован на сетевые распределенные приложения
язык Java не является переносимым
Виртуальная машина Java (Java Virtual Machine) это —
специальная операционная система
единая среда исполнения для Java-приложений, которая пишется специально для каждой реальной платформы
библиотека, предоставляющая единый API для разных платформ
ничего из перечисленного
Какие утверждения относительно виртуальной машины Java (Java Virtual Machine) верны?
позволяет отсекать опасный код на каждом этапе работы
периодически запускает сборщик мусора
для запуска приложения на языке Java на какой-либо операционной системе, для нее должна быть создана виртуальная машина
поддерживает запуск приложений из файлов с расширением .java
Какие утверждения относительно компилятора JIT (Just in Time) верны?
он транслирует байт-код программы в «родной» код операционной системы
увеличивает время запуска
замедляет выполнение программы
может быть отключен
Какие утверждения относительно Java Development Kit (JDK) и Java Runtime Environment (JRE) верны?
JRE включает в себя средства разработки
JDK включает в себя компилятор
JDK не позволяет запускать программы
JRE является минимальной реализацией виртуальной машины
JRE включает в себя JDK
Что означает выражение deprecated?
используемые функции устарели, но поддерживаются в целях совместимости
используемые функции работают неэффективно
используемые функции не поддерживаются
используемые функции работают неправильно
Какие из перечисленных свойств являются общими для программ, написанных на C++ и Java?
поддерживают обращения к физической памяти
компилируются в машинные коды
имеют схожий синтаксис
являются процедурными
На какие направления разделяется платформа Java 2?
Standard Edition
Extended Edition
Enterprise Edition
Micro Edition
Minimal Edition
Какие меры позволяют Java обеспечивать безопасность?
правила работы с памятью
наличие виртуальной машины-интерпретатора
наличие JIT-компилятора
сертификаты для приложений, загружаемых по сети
Какие меры позволяют Java обеспечивать безопасность?
наличие сборщика мусора
сертификаты для приложений, загружаемых по сети
наличие JIT-компилятора
политики (policy) и разрешения (permission)
встроенные ограничения в стандартных библиотеках
Какие меры позволяют Java обеспечивать безопасность?
наличие выражения deprecated
сертификаты для приложений, загружаемых по сети
политики (policy) и разрешения (permission)
наличие JIT-компилятора
Какое утверждение относительно автоматического сборщика мусора (garbage collector) верно?
позволяет управлять выделением памяти
является отдельным приложением
удаляет объекты, когда не остается ни одной ссылки на них
ничего из перечисленного
Автоматический сборщик мусора (garbage collector) в Java – это механизм, который:
удаляет объекты, когда заканчивается доступная оперативная память
удаляет объекты, когда не остается ни одной ссылки на них
удаляет объекты, которые давно не используются
удаляет объекты, которые программист помечает для удаления
Какие утверждения относительно автоматического сборщика мусора (garbage collector) верны?
это отдельное приложение, запускаемое виртуальной машиной
это процесс, периодически запускаемый виртуальной машиной
можно напрямую влиять на алгоритм сборки мусора из программы
можно инициировать проход сборщика мусора из программы
Что из перечисленного является преимуществом ООП?
обеспечение возможности модификации отдельных компонентов программного обеспечения без изменения остальных его компонентов
обеспечение возможности создавать не зависящие от платформы программы
повышение скорости выполнения программ
обеспечение возможности повторного использования отдельных компонентов программного обеспечения
Почему объектно-ориентированное программирование пришло на смену процедурному программированию?
программы, написанные с использованием ООП, выполняются на компьютере быстрее
использование ООП позволяет создавать не зависящие от платформы программы
ООП позволяет уменьшить сложность создания ПО
ООП позволяет увеличить надежность создаваемого ПО
Что из перечисленного является недостатком ООП?
неэффективность в смысле распределения памяти
унификация программ за счет стандартных компонентов
излишняя универсальность
неэффективность в смысле модификации отдельных компонентов
Какая из приведенных ниже UML-диаграмм является правильной диаграммой наследования?
Какие утверждения относительно поведения объекта верны?
это то, что отличает объект от других объектов
это действия и реакции объекта
не влияет на состояние объекта
это видимая извне и воспроизводимая активность объекта
Что такое класс?
семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых объектом
конструкция , позволяющая содержать в себе набор переменных различных типов
некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением
шаблон поведения объектов определенного типа с заданными параметрами, определяющими состояние
Какие утверждения относительно объектов верны?
объект — это понятие, абстракция или любой предмет с четко очерченными границами
объекты могут быть неуникальными
объект имеет определенное время жизни
объект имеет состояние
объекты можно создавать, но нельзя уничтожить
Какие утверждения относительно состояния объекта верны?
состояние объекта всегда постоянно
это совокупный результат поведения объекта
в любой момент времени включает в себя значения свойств объекта
не зависит от свойств объекта
Что используется для описания поведения объекта?
Зачем нужен полиморфизм?
полиморфизм используется для написания общего кода, который будет одинаково работать с разными типами данных (объектами разных классов), при условии, что классы, от которых созданы эти объекты, имеют общего предка
полиморфизм позволяет создавать в одном классе несколько переменных с одинаковыми именами, но с разным типами данных
полиморфизм необходим в любой программе, использующей ООП. Без него невозможно написать программу на объектно-ориентированном языке программирования
без полиморфизма нельзя реализовать инкапсуляцию
Какое утверждение относительно полиморфизма верно?
позволяет скрывать реализацию класса
используется для написания общего кода, который будет одинаково работать с разными типами данных (объектами разных классов), при условии, что классы, от которых созданы эти объекты, имеют общего предка
позволяет отделять внутреннее представление класса от внешнего
Что такое агрегация?
отношение между классами типа «реализует»
отношение между классами типа «наследует»
отношение между классами типа «содержит»
отношение между классами типа «является»
Какие возможны отношения между классами?
агрегация
Какие отношения невозможны между классами?
Какие утверждения относительно наследования верны?
позволяет отделять внутреннее представление класса от внешнего
позволяет скрывать реализацию класса
может быть множественным
способствует уменьшению количества кода, созданного для описания схожих сущностей
Множественным наследованием называют:
ситуацию, когда у некоторого класса есть более чем один непосредственный наследник
наследование, в котором участвует множество классов (более двух)
отношение наследования, когда некоторый класс наследует свойства и методы сразу нескольких классов
отношение наследования, когда класс-наследник также имеет наследников
Наследование это:
сокрытие реализации класса и отделение его внутреннего представления от внешнего (интерфейса)
отношение между классами, при котором класс использует структуру или поведение другого класса
возможность объектов с одинаковой спецификацией иметь различную реализацию
ничего из перечисленного
Какие преимущества дает обеспечение доступа к свойствам класса только через его методы?
можно контролировать корректные значения полей класса
способствует уменьшению количества кода, созданного для описания схожих сущностей
можно изменить способ хранения данных
программный код, написанный с использованием данного принципа, легче отлаживать
облегчает реализацию полиморфизма
Какие утверждения относительно инкапсуляции верны?
позволяет контролировать корректные значения полей класса
способствует уменьшению количества кода, созданного для описания схожих сущностей
позволяет скрывать реализацию класса
позволяет изменять способ хранения данных
позволяет объектам с одинаковой спецификацией иметь различную реализацию
Инкапсуляция это:
объединение данных и обрабатывающего их программного кода в одной логической структуре (классе)
сокрытие реализации класса и отделение его внутреннего представления от внешнего
одно из базовых понятий ООП, которое позволяет расширять функциональность программы, не расширяя объектную модель этой программы
возможность объектов с одинаковой спецификацией иметь различную реализацию
отделение внутреннего представления класса от внешнего
Метакласс это:
базовый класс в дереве наследования. Все потомки этого класса расширяют или замещают его функциональность
некоторый шаблон, который описывает свойства и поведение класса, подобно тому, как класс описывает свойства и поведение объекта
класс, от которого наследуются все классы в дереве наследования. Любой из классов в программе обязательно является наследником этого класса (пример java.lang.Object)
некоторый шаблон, который описывает поведение класса, но не описывает его свойства
Какие утверждения относительно метакласса верны?
можно создавать собственные метаклассы
это шаблон, задающий различные классы
в Java есть метакласс Class
в Java есть метакласс Meta
без метакласса нельзя реализовать наследование
Какой класс в Java является метаклассом?
Meta
Class
Metaclass
Super
в Java нет метакласса
Сколько комментариев в следующем примере кода:
int x = 0; /* text // text /*
int y=1; // text */ // text */
1 блочный, 0 строчных
1 блочный, 1 строчный
1 блочный, 2 строчных
2 блочных, 3 строчных
Как записать в Java-программе символ с кодом546 (код символа десятичный)?
Какие утверждения относительно кодировки Unicode верны?
представляет символы кодом из 2 байт
является синонимом кодировки ASCII
представляет символы кодом из 1 байта
значение \u1B05 является допустимым значением Unicode
значение ‘ub105’ является допустимым значением Unicode
Какой из вариантов является блочным комментарием?
// комментарий
/* комментарий */
/** комментарий */
//* комментарий
/* коментарий 1
коментарий 2 */
Какие из вариантов являются строчными комментариями?
/* комментарий
//* комментарий */
// комментарий
/** комментарий */
Какой из вариантов является строчным комментарием?
// комментарий
/* комментарий
/* комментарий */
/** комментарий */
ни один из перечисленных
Укажите варианты кода, которые будут скомпилированы без ошибок
circle.get/*комментарий*/Radius();
circle./*комментарий*/getRadius();
int/*комментарий*/x=1;
in/*комментарий*/t x=1;
int x/*комментарий*/=1;
Сколько комментариев в следующем примере кода:
int x = 0; /* комментарий // комментарий */
String s = «text/*комментарий*/»;
1 блочный, 0 строчных
1 блочный, 1 строчный
1 блочный, 2 строчных
2 блочных, 0 строчных
2 блочных, 1 строчный
Сколько комментариев в следующем примере кода:
int x = 0; /* комментарий // комментарий /*
int y = 1; // комментарий */ // комментарий */
1 блочный, 0 строчных
1 блочный, 1 строчный
1 блочный, 2 строчных
2 блочных, 3 строчных
2 блочных, 1 строчный
Отметьте символьные литералы языка Java:
Отметьте дробные литералы языка Java:
Отметьте целочисленные литералы языка Java:
Отметьте строковые литералы языка Java:
Какие операторы есть в языке Java:
Какие операторы есть в языке Java:
Какие из перечисленных идентификаторов являются корректными?
_
3
const
temp
_do
Какие из перечисленных идентификаторов являются корректными?
Какие из перечисленных идентификаторов являются корректными?
Какой вариант кода выведет на экран значение true?
int x=0;
System.out.println(++x==++x);
int x=0;
System.out.println(++x==x);
int x=0;
System.out.println(x==x++);
int x=0;
System.out.println(x++==x++);
int x=0;
System.out.println(x++==++x);
Каким будет результат следующих действий?
System.out.println(1/0);
System.out.println(/0);
System.out.println(1/0.);
System.out.println(/0.);
System.out.println(‘\n’+’\r’);
все 4 операции деления вызовут ошибку деления на 0, сложение даст «\n\r»
результатом всех 4 операций деления будетPOSITIVE_INFINITY, сложение даст ‘\n\r’
операция 1/0 приведет к арифметической ошибке;следующие 3 операции будут иметь результат POSITIVE_INFINITYпоследнее сложение даст 23
операция 1/0 приведет к арифметической ошибке;следующие 3 операции будут иметь результат POSITIVE_INFINITYпоследнее сложение даст ‘\n\r’
Какие варианты объявления дробной переменной верны (никакие переменные предварительно не объявлены)?
float a;
float a = «4»;
float a = 5, b = a;
float a = b = 5;
Какие варианты объявления целочисленной переменной верны (никакие переменные предварительно не объявлены)?
int a = b
int a;
int a = 5;
int a = b = 5;
int a = 5, b = a;
Какие варианты объявления булевой переменной верны (никакие переменные предварительно не объявлены)?
boolean a;
boolean a = ‘5’;
boolean a = true;
boolean a = 5;
boolean a = (5==6);
Укажите результат выполнения следующего фрагмента кода:
int a = 5;
int b = 6;
++a = b++;
System.out.println(a);
5
6
7
будет выдано сообщение об ошибке
ничего из перечисленного
Укажите результат выполнения следующего фрагмента кода:
int a = 5, b = 6;
a = b++;
System.out.println(a);
5
6
7
будет выдано сообщение об ошибке
ничего из перечисленного
Укажите результат выполнения следующего фрагмента кода:
int a = 5, b = 6;
a = b++;
System.out.println(++a == b++);
true
false
будет выдано сообщение об ошибке
ничего из перечисленного
Дан следующий класс:
class abc.Point <
abc.Point(int a, int b) <
x = a;
y = b;
>
int x, y;
.
>
Укажите результат выполнения следующего фрагмента кода:
abc.Point p = new abc.Point(5,3), p1 = p;
System.out.println(p1 == p);
true
false
будет выдано сообщение об ошибке
ничего из перечисленного
Дан следующий класс:
class abc.Point <
abc.Point(int a, int b) <
x = a;
y = b;
>
int x, y;
.
>
Укажите результат выполнения следующего фрагмента кода:
abc.Point p = new abc.Point(5,3), p1;
System.out.println(p1 == p);
true
false
будет выдано сообщение об ошибке
ничего из перечисленного
Дан следующий класс:
class abc.Point <
abc.Point(int a, int b) <
x = a;
y = b;
>
int x, y;
.
>
Укажите результат выполнения следующего фрагмента кода:
abc.Point p = new abc.Point(5,3), p1 = p;
p.x = 4;
System.out.println(px);
3
4
5
будет выдано сообщение об ошибке
ничего из перечисленного
Какие существуют примитивные целочисленные типы?
byte
float
char
short
boolean
Какие значения может принимать переменная булева типа?
Какие существуют примитивные дробные типы?
Какой тип должна иметь переменная d в следующем фрагменте:
int a = 1;
short b = 1;
long c = 1;
? d = a + b;
Какой тип должна иметь переменная d в следующем фрагменте:
int a = 1;
short b = 1;
long c = 1;
? d = a + b + c;
Какой тип должна иметь переменная d в следующем фрагменте:
int a = 1;
short b = 1;
long c = 1;
c = (d = a + c) ? a : b;
Дан следующий класс:
class abc.Point <
abc.Point(int a, int b) <
x = a;
y = b;
>
int x, y;
.
>
Укажите результат выполнения следующего фрагмента кода:
abc.Point p = new abc.Point(5,3), p1;
p1 = p;
p = null;
System.out.println(p.x);
3
4
5
будет выдано сообщение об ошибке
ничего из перечисленного
Дан следующий класс:
class abc.Point <
abc.Point(int a, int b) <
x = a;
y = b;
>
int x, y;
.
>
Укажите результат выполнения следующего фрагмента кода:
abc.Point p = new abc.Point(5,3), p1;
p1 = p;
p = null;
System.out.println(px);
3
4
5
будет выдано сообщение об ошибке
ничего из перечисленного
Дан следующий класс:
class abc.Point <
abc.Point(int a, int b) <
x = a;
y = b;
>
int x, y;
.
>
Каков будет результат следующего примера?
abc.Point p1 = new abc.Point(3, 4);
abc.Point p2 = p1;
px = 5;
p1 = new abc.Point(4, 4);
System.out.print(px — px);
-1
0
1
будет выдано сообщение об ошибке
ничего из перечисленного
Даны следующие классы:
class abc.SomeClass <>
class abc.SomeClass2 extends abc.SomeClass <>
Что будет выведено на экран в следующем фрагменте кода:
abc.SomeClass x1 = new abc.SomeClass();
abc.SomeClass2 x2 = new abc.SomeClass2();
System.out.println((x1 instanceof abc.SomeClass) + » » + (x2 instanceof abc.SomeClass));
false false
true false
true true
false true
Даны следующие классы:
class SomeClass <>
class SomeClass2 extends abc.SomeClass <>
Что будет выведено на экран в следующем фрагменте кода:
SomeClass x1 = new SomeClass();
SomeClass2 x2 = new SomeClass2();
System.out.println((x1 instanceof SomeClass2) + » » + (x2 instanceof SomeClass2));
false false
true false
true true
false true
Даны следующие классы:
class abc.SomeClass <>
class abc.SomeClass2 extends abc.SomeClass <>
Что будет выведено на экран в следующем фрагменте кода:
abc.SomeClass x1 = new abc.SomeClass();
abc.SomeClass2 x2 = new abc.SomeClass2();
System.out.println((x1 instanceof abc.SomeClass) + » » + (x2 instanceof abc.SomeClass2));
false false
true true
true false
false true
Какие утверждения относительно метода public boolean equals(Object obj) класса java.lang.Object верны
не может быть переопределен
в классе java.lang.Object метод public boolean equals(Object obj) возвращает результат сравнения по ссылке
может быть переопределен для сравнения по значению
всегда возвращает результат сравнения по ссылке
Какие утверждения относительно класса java.lang.String верны
породив объект, содержащий некое значение-строку, мы можем изменить данное значение
строковый литерал имеет примитивный тип
экземпляры только этого класса можно создавать без использования ключевого слова new
это единственный класс, который не наследует классу java.lang.Object
каждый строковый литерал порождает экземпляр java.lang.String
Какие утверждения относительно класса java.lang.Object верны
у этого класса нет суперкласса
нельзя явно наследовать этот класс
у этого класса нет полей
любой класс напрямую, или через своих родителей, является наследником Object
нельзя явно переопределять методы этого класса
Какое из перечисленных ниже имен является простым?
Какое из перечисленных ниже имен является составным?
Какое из перечисленных ниже имен является простым?
MyClass
MyClass.name
MyClass.name.toString()
MyClass.name.toString().hashCode()
ни один из перечисленных
Какие утверждения относительно пакетов в Java верны?
разные пакеты могут разделять одно пространство имен
пакет может содержать интерфейс и класс с одинаковыми именами
пакеты, вложенные в один и тот же пакет, не имеют никаких дополнительных связей между собой
пакеты, вложенные в один и тот же пакет, имеют дополнительные связи между собой
Какие утверждения относительно пакетов в Java верны?
элементами пакета являются вложенные пакеты и типы
пакет может включать вложенные пакеты
пакет, содержащий класс, не может содержать вложенные пакеты
пакет, содержащий вложенный пакет, не может содержать интерфейсы
каждый пакет имеет свое пространство имен
Какие утверждения относительно пакетов в Java верны?
каждый пакет может включать вложенные пакеты
пакет, содержащий вложенный пакет, не может содержать классы
пакеты могут содержать классы и интерфейсы
каждый пакет имеет свое пространство имен
разные пакеты могут разделять одно пространство имен
Вы создали класс Animal в пакете ru.animal. Где будет хранится бинарный код класса в файловой системе?
Вы создали класс Animal в пакете ru.animal. Где будет храниться исходный код класса в файловой системе?
Вы создали класс Animal в пакете ru.animal. Где будет хранится исходный код класса в файловой системе?
Внимание !
Вопросы к тесту выложены исключительно в ознакомительных целях: количество вопросов может не совпадать с действительным, актуальность не поддерживается,- за решением теста Welcome to the cashier!
Какие утверждения относительно модуля компиляции верны?
в модуле компиляции должно быть хотя бы одно import-выражение
объявления верхнего уровня содержат объявления одного или нескольких типов
объявление пакета записывается с помощью ключевого слова package
если в модуле компиляции есть объявление пакета и import-выражения — import-выражения будут идти после объявления пакета
Какие утверждения относительно модуля компиляции верны?
хранится в текстовом .java-файле
отсутствие объявления пакета в модуле компиляции вызовет ошибку компиляции
объявления верхнего уровня содержат объявление только одного типа
если в модуле компиляции есть объявление пакета — оно будет первым выражением
import-выражения позволяют импортировать типы в модуль компиляции и далее обращаться к ним по простым именам
Какие утверждения относительно модуля компиляции верны?
import-выражения необязательны
если объявление пакета отсутствует, то модуль компиляции будет принадлежать безымянному пакету
хранится в текстовом .class-файле
в модуле компиляции может быть больше одного объявления пакета
объявления верхнего уровня позволяют обращаться к типам из других пакетов по их простым именам
Какие утверждения относительно импорт-выражений верны?
выражение, позволяющее импортировать пакет целиком имеет вид import <полное имя пакета>;
выражение, импортирующее один тип, записывается с помощью ключевого слова import и простого имени типа
можно импортировать один тип
если тип явно импортирован, то невозможно ни объявление нового типа с таким же именем, ни доступ по простому имени к одноименному типу в текущем пакете
import-выражения не позволяют импортировать типы в модуль компиляции и далее обращаться к ним по простым именам
Какие утверждения относительно импорт-выражений верны?
позволяют импортировать типы в модуль компиляции
можно импортировать один тип
нельзя импортировать пакет целиком
выражение, импортирующее один тип, записывается с помощью ключевого слова import и полного имени типа
import-выражения обязательно всегда является первым в модуле компиляции
Какие утверждения относительно импорт-выражений верны?
если импортируются типы с одинаковыми простыми именами из разных пакетов, то такая ситуация породит ошибку компиляции
нельзя импортировать один тип
объявления верхнего уровня содержат объявление только одного типа
можно импортировать пакет целиком
выражение, позволяющее импортировать пакет целиком имеет вид import <полное имя пакета>.*;
Ниже приведено несколько вариантов записи модуля компиляции. Какой из них корректен, если предполагается описать класс abc.Point из пакета test.demo, причем класс активно использует классы ru.additional.abc.Pointи несколько классов из пакета java.net?
package test.demo;
import java.net.*;
import ru.additional.abc.Point;
package test.demo;
import java.net.*;
import ru.additional.abc.*;
package test.demo;
import ru.additional.abc.Point;
import java.net;
package test.demo.*;
import java.net.*;
import ru.additional.abc.Point;
ни один из перечисленных
Ниже приведено несколько вариантов записи модуля компиляции. Какой из них корректен, если предполагается описать класс abc.Point из пакета test.demo, причем класс активно использует классы ru.additional.abcи несколько классов из пакета java.net?
package test.demo.*;
import java.net.*;
import ru.additional.abc.*;
package test.demo;
import java.net;
import ru.additional.abc.*;
package test.demo;
import java.net.*;
import ru.additional.abc.Point;
package test.demo;
import java.net.*;
import ru.additional.abc.*;
ни один из перечисленных
Ниже приведено несколько вариантов записи модуля компиляции. Какой из них корректен, если предполагается описать класс ABCPoint из пакета test.demo, причем класс активно использует класс Ru.Additional.ABCPointи несколько классов из пакета java.net?
package test.demo;
import ru.additional.abc.Point;
import java.net.*;
import ru.additional.*;
import java.net.*;
package test.demo;
package test.demo;
import java.net;
import ru.additional.abc.Point;
package test.demo.*;
import java.net.*;
import ru.additional.abc.*;
ни один из перечисленных
Корректен ли объявленный ниже класс? Если нет, то как его можно исправить?
class Box <
private int weight=0;
public int getWeight() <
return weight;
>
void setWeight(int weight) <
this.weight=weight;
>
>
пример корректен, ничего исправлять не нужно
пример некорректен, конфликт имен в методе setWeightтребует переименования поля или аргумента
пример корректен, однако конфликт имен в методе setWeightтребует переименования поля или аргумента
пример корректен, однако конфликт имен в методе setWeightтребует переименования поля или аргумента, либо использования ключевого слова this
пример корректен, однако конфликт имен в методе setWeightтребует переименования поля или аргумента, либо использования ключевого слова this или super
Корректен ли объявленный ниже класс? Если нет, то как его можно исправить?
class Box <
private int weight=0;
public int getWeight() <
return weight;
>
void setWeight(int weight) <
weight=weight;
>
>
пример корректен, ничего исправлять не нужно
пример некорректен, конфликт имен в методе setWeightтребует переименования поля или аргумента
пример корректен, однако конфликт имен в методе setWeightтребует переименования поля или аргумента
пример корректен, однако конфликт имен в методе setWeightтребует переименования поля или аргумента, либо использования ключевого слова this
пример корректен, однако конфликт имен в методе setWeightтребует переименования поля или аргумента, либо использования ключевого слова this или super
Что будет выведено на экран в результате выполенения следующего кода?
import java.awt.Point;
public class Obscuring <
static Point Test = new Point(3,2);
public static void main (String s[]) <
System.out.println(Test.x);
>
>
class Test <
static int x = -5;
>
-5
2
3
будет выдано сообщение об ошибке
Какие формальные нарушения соглашений по именованию присутствуют в следующем примере:
public class Flat<
private int floor_number;
private int roomNumber;
public int rooms() <
return roomNumber;
>
public int getFloorNumber() <
return floor_number;
>
>
имя поля roomNumber необходимо заменить на r
класс назван с заглавной буквы, должно быть flat
имя поля floor_numberсодержит два слова, разделенных знаком подчеркивания, должно быть floorNumber
имя метода rooms() необходимо изменить на getRoomNumber()
нет методов, с помощью которых можно изменить значения переменных
Какие формальные нарушения соглашений по именованию присутствуют в следующем примере:
public class flat<
private int floorNumber;
private int roomNumber;
public int rooms() <
return roomNumber;
>
public int GetFloorNumber() <
return floorNumber;
>
>
имя метода rooms() необходимо изменить на getRoomNumber()
имя поля roomNumber необходимо заменить на r
класс назван со строчной буквы, должно быть Flat
нет методов, с помощью которых можно изменить значения переменных
имя метода GetFloorNumber() необходимо изменить на getFloorNumber()
Какие формальные нарушения соглашений по именованию присутствуют в следующем примере:
public class flat<
private int floor_number;
private int r; // количество комнат
public int getR() <
return r;
>
public int getFloorNumber() <
return floor_number;
>
>
класс назван со строчной буквы, должно быть Flat
имя поля floor_numberсодержит два слова, разделенных знаком подчеркивания, должно быть floorNumber
имя поля r состоит из одной буквы, а оно должно быть более понятным, например, rooms или roomsNumber
переменные недостаточно описывают класс
нет методов, с помощью которых можно изменить значения переменных
Какие модификаторы позволяют обращаться к элементу класса из классов-наследников в другом пакете?
Какие модификаторы позволяют обращаться к элементу класса из классов, не являющимися наследниками того же пакета?
Какие модификаторы позволяют обращаться к элементу класса из классов-наследников того же пакета?
Для каких элементов в Java можно указать модификатор доступа?
для конструкторов класса
для элементов ссылочных типов
для пакетов
для типов (классов и интерфейсов) объявления верхнего уровня
Какие модификаторы доступа можно применить для типов объявления верхнего уровня?
Какой модификатор доступа можно применить для пакета?
Какие утверждения относительно заголовка класса верны?
допустимые модификаторы доступа для класса — public или default
класс может быть объявлен как final
допустимо наследовать final-класс
допустима следующая цепочка наследования: A наследует классу B, B наследует классу C, C наследует классу A
если не указан класс-предок класса, то это означает, что класс наследует от java.lang.Object
Какие утверждения относительно полей класса верны?
числовое поле ссылочного типа имеет значение по умолчанию null
идентификатор при объявлении становится составным именем поля
идентификатор поля при объявлении становится простым именем поля
final-поле может быть проинициализировано в конструкторе
поля не могут иметь модификатор доступа protected
Что будет выведено на экран в результате выполнения следующего фрагмента кода:
public class SomeClass <
public static void main(String args[]) <
SomeClass s = new SomeClass();
System.out.println(s.x + «, » + s.y);
>
int getX() <
return x;
>
int y = getX();
int x = 3;
>
3, 3
3, 0
0, 0
сообщение об ошибке компиляции
ничего из перечисленного
Какие утверждения относительно полей класса верны?
допускаются поля с одинаковыми именами, но с разными типами
объявление полей начинается с перечисления модификаторов
поле может быть проинициализировано только в конструкторе
допускается инициализация final полей в конструкторе класса
Укажите правильные варианты объявления метода.
void doSomething(int x, y);
void doSomething(int x, int y);
void doSomething(int x, double y);
void doSomething(int x; double y);
void doSomething(int x; y);
Какие утверждения относительно методов класса верны?
методы не могут иметь модификатор доступа default
к методу, объявленному с модификаторами public final, нельзя обратиться из класса-наследника
метод, объявленный с модификатором native, должен быть написан на другом языке программирования
идентификатор метода при объявлении становится составным именем метода/
метод, объявленный с модификатором final, не может быть переопределен в классе-наследнике
Какие утверждения относительно конструкторов класса верны?
чтобы обратиться к конструктору родительского класса необходимо использовать ключевое слово super
в одном классе допускается любое количество конструкторов, если у них различные сигнатуры
конструктор не может генерировать исключения
выражение super может стоять на любой строке конструктора
если в классе не объявлен ни один конструктор, компилятор добавляет один по умолчанию
Какие утверждения относительно конструкторов класса верны?
конструктор может иметь модификатор доступа final
имя конструктора должно совпадать с названием класса
если конструктор выполнился без ошибок, то объект гарантированно создается
конструктор не может содержать return-выражение
чтобы обратиться к конструктору родительского класса необходимо использовать ключевое слово this
Какие утверждения относительно инициализаторов класса верны?
инициализаторы могут быть унаследованы
если в классе есть несколько инициализаторов, то порядок их вызова не определен
если в классе есть два конструктора и один из них вызывается из второго, то инициализатор будет вызван только один раз
при вызове конструктора сначала выполняется код инициализатора, а потом код конструктора
инициализатор может иметь имя
Какие утверждения относительно инициализаторов класса верны?
инициализаторы не имеют имен
если в классе есть два конструктора и один из них вызывается из второго, то инициализатор будет вызван дважды
при вызове конструктора сначала выполняется код конструктора, а потом код инициализатора
при вызове конструктора сначала выполняется код инициализатора, а потом код конструктора
Укажите правильный вариант объявления метода main — точку входа в программу на языке Java.
public void main(String args[])
public static void main(String args)
public void main(String args)
public static void main(String[] args)
public static void main()
Укажите правильные варианты объявления перегруженных методов.
public int doSomething(int a)
public double doSomething()
public int doSomething(int a)
public double doSomething(int a)
public int doSomething(int a)
private double doSomething(int b)
public int doSomething(int a)
private double doSomething(int a, int b)
Укажите количество преобразований, которые будут сделаны в следующем коде:
long a = 3;
a = 5 + a;
System.out.print(«a a a»;
byte c = (long)50;
Какие из следующих присвоений корректны?
SomeClass c = 1;
Object o = 1;
int i = 1;
String s = 1;
byte b = (byte) 1;
Какие из следующих присвоений корректны?
short s = (short)(2 + 3);
byte b2 = 200;
byte c = (int)150 + ‘a’;
char c = (byte)5 + ‘a’;
byte c = (char)5 + ‘a’;
Вы можете обратится к нам напрямую, через:
По Skype: molodoyberkut
По Telegram: @MolodoyBerkut
По ICQ: 657089516
Name already in use
JavaExercises / TestTasks / geekbrains.ru / java2a.test
- Go to file T
- Go to line L
- Copy path
- Copy permalink
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Как сравнить строки в Java?
Я использовал оператор == в моей программе, чтобы сравнить все мои строки. Однако я столкнулся с ошибкой, вместо этого изменил одну из них на .equals() , и она исправила ошибку.
== плохо? Когда это должно и не должно быть использовано? Какая разница?
17 ответов
Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; метод equals() выполняет посимвольное сравнение содержимого.
Когда вы вызываете new для a и b , каждый получает новую ссылку, которая указывает на «foo» в таблице строк. Ссылки разные, но содержание одинаковое.
== сравнивает ссылки на объекты в Java , и это не исключение для String объектов.
Для сравнения фактического содержимого объектов (включая String ) необходимо использовать метод equals .
Если сравнение двух String объектов, использующих == , оказывается true , то это потому, что объекты String были интернированы, а виртуальная машина Java имеет несколько точек ссылки к тому же экземпляру String . Не следует ожидать, что при сравнении одного String объекта, содержащего то же содержимое, что и другой String объект, используя == для оценки как true .
У Java есть пул String, в котором Java управляет выделением памяти для объектов String. Видеть Струнные бассейны на Яве
Когда вы проверяете (сравниваете) два объекта с помощью оператора == , он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса адресов, он возвращает true , иначе false . Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals .
equals на самом деле является методом класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.
Но учтите, что это относится к делу String. Если вы хотите сравнить без учета регистра, вы должны перейти к методу equalsIgnoreCase класса String.
Если метод equals() присутствует в классе java.lang.Object , и ожидается, что он проверит эквивалентность состояния объектов! Это означает, что содержимое объектов. Принимая во внимание, что оператор == должен проверять, являются ли фактические экземпляры объекта одинаковыми или нет.
Рассмотрим две разные ссылочные переменные, str1 и str2 :
Если вы используете equals()
Вы получите вывод как TRUE , если будете использовать == .
Теперь вы получите FALSE в качестве выходных данных, потому что оба str1 и str2 указывают на два разных объекта, даже если оба они имеют одинаковое строковое содержимое. Именно из-за new String() каждый раз создается новый объект.
Я думаю, что когда вы определяете String , вы определяете объект. Так что вам нужно использовать .equals() . Когда вы используете примитивные типы данных, вы используете == , но с String (и любым объектом) вы должны использовать .equals() .
== сравнивает эталонное значение объектов, тогда как метод equals() , представленный в классе java.lang.String , сравнивает содержимое объекта String (с другим объектом).
Да, == плохо подходит для сравнения строк (любые объекты на самом деле, если только вы не знаете, что они канонические). == просто сравнивает ссылки на объекты. .equals() тесты на равенство. Для строк часто они будут одинаковыми, но, как вы обнаружили, это не гарантируется всегда.
Строки в Java неизменны. Это означает, что всякий раз, когда вы пытаетесь изменить / модифицировать строку, вы получаете новый экземпляр. Вы не можете изменить исходную строку. Это было сделано для кэширования этих экземпляров строк. Типичная программа содержит много строковых ссылок, и кэширование этих экземпляров может уменьшить объем используемой памяти и повысить производительность программы.
При использовании оператора == для сравнения строк вы не сравниваете содержимое строки, а фактически сравниваете адрес памяти. Если они оба равны, он вернет true и false в противном случае. Принимая во внимание, что равно в строке сравнивает содержимое строки.
Таким образом, вопрос в том, все ли строки кэшированы в системе. Почему == возвращает false, а equals возвращает true? Ну, это возможно. Если вы создаете новую строку, такую как String str = new String(«Testing») , вы в конечном итоге создаете новую строку в кеше, даже если кеш уже содержит строку с таким же содержимым. Короче говоря, «MyString» == new String(«MyString») всегда будет возвращать false.
Java также говорит о функции intern (), которая может использоваться в строке, чтобы сделать ее частью кэша, поэтому «MyString» == new String(«MyString»).intern() вернет true.
Примечание: оператор == намного быстрее, чем равен, просто потому, что вы сравниваете два адреса памяти, но вы должны быть уверены, что код не создает новые экземпляры String в коде. В противном случае вы столкнетесь с ошибками.
== проверяет ссылки на объекты, .equals() проверяет строковые значения.
Иногда это выглядит так, как будто == сравнивает значения, потому что Java делает некоторые закулисные вещи, чтобы убедиться, что идентичные строки в действительности являются одним и тем же объектом.
Но остерегайтесь нулей!
== прекрасно обрабатывает null строки, но вызов .equals() из пустой строки вызовет исключение:
Так что, если вы знаете, что fooString1 может быть нулевым, скажите читателю, что, написав
Ниже короче, но менее очевидно, что он проверяет на ноль (из Java 7):
Оператор == проверяет, являются ли две строки одним и тем же объектом.
Метод .equals() проверит, имеют ли две строки одинаковое значение.
== выполняет проверку на равенство ссылка , ссылаются ли два объекта (в данном случае на строки) на один и тот же объект в памяти.
Метод equals() проверит, являются ли содержимое или состояния 2 объектов одинаковыми.
Очевидно, == быстрее, но во многих случаях (может) даст ложные результаты, если вы просто захотите узнать, содержат ли 2 String один и тот же текст.
Определенно рекомендуется использовать метод equals() .
Не беспокойтесь о производительности. Некоторые вещи, которые следует поощрять с помощью String.equals() :
-
Реализация String.equals() сначала проверяет равенство ссылок (используя == ), и если две строки одинаковы по ссылке, дальнейшие вычисления не выполняются! Если 2 строковые ссылки не совпадают, String.equals() затем проверит длину строк. Это также быстрая операция, потому что класс String хранит длину строки, не нужно подсчитывать символы или кодовые точки. Если длины различаются, дальнейшая проверка не выполняется, мы знаем, что они не могут быть равны.
- Только если мы дошли до этого уровня, содержимое 2 строк будет фактически сопоставлено, и это будет кратким сравнением: не все символы будут сравниваться, если мы обнаружим несовпадающий символ (в той же позиции в 2 строках ), дальнейшие символы проверяться не будут.
Когда все сказано и сделано, даже если у нас есть гарантия того, что строки являются интернами, использование метода equals() по-прежнему не так затратно, как можно подумать, определенно рекомендуемый способ. Если вам нужна эффективная проверка ссылок, используйте перечисления, если в спецификации и реализации языка гарантируется, что одно и то же значение перечисления будет одним и тем же объектом (посредством ссылки).
Если вы похожи на меня, когда я впервые начал использовать Java, я хотел использовать оператор «= = foo»; String string2 = «FOO»; if (string1.equals(string2)) < // this line will not print because the // java string equals method returns false: System.out.println("The two strings are the same.") >
Но когда две строки содержат одинаковую строку символов, метод equals вернет true, как в этом примере:
Вариант 2. Сравнение строк с помощью метода equalsIgnoreCase
В некоторых тестах сравнения строк вы захотите игнорировать, являются ли строки прописными или строчными. Если вы хотите проверить строки на равенство таким образом, без учета регистра, используйте метод equalsIgnoreCase класса String, например:
Вариант 3: сравнение строк Java с помощью метода compareTo
Существует также третий, менее распространенный способ сравнения строк Java, это метод класса String compareTo. Если две строки одинаковы, метод compareTo вернет значение 0 (ноль). Вот быстрый пример того, как выглядит этот подход сравнения строк:
Хотя я пишу об этой концепции равенства в Java, важно отметить, что язык Java включает метод equals в базовый класс Java Object. Всякий раз, когда вы создаете свои собственные объекты и хотите предоставить средство, чтобы увидеть, равны ли два экземпляра вашего объекта, вы должны переопределить (и реализовать) этот метод equals в вашем классе (так же, как язык Java обеспечивает это равенство / поведение сравнения в методе String equals).
Вы также можете использовать метод compareTo() для сравнения двух строк. Если результат CompareTo равен 0, тогда две строки равны, иначе сравниваемые строки не равны.
== сравнивает ссылки и не сравнивает фактические строки. Если вы создали каждую строку с помощью new String(somestring).intern() , то вы можете использовать оператор == для сравнения двух строк, в противном случае можно использовать только методы equals () или compareTo.
Все объекты гарантированно имеют метод .equals() , так как Object содержит метод .equals() , который возвращает логическое значение. Задача подкласса — переопределить этот метод, если требуется дополнительное определение. Без этого (то есть используя == ) только адреса памяти проверяются между двумя объектами на равенство. Строка переопределяет этот метод .equals() и вместо использования адреса памяти возвращает сравнение строк на уровне символов для равенства.
Ключевым моментом является то, что строки хранятся в одном единственном пуле, поэтому после создания строки она всегда сохраняется в программе по одному и тому же адресу. Строки не меняются, они неизменны. Вот почему плохая идея использовать обычную конкатенацию строк, если у вас есть серьезный объем обработки строки. Вместо этого вы должны использовать предоставленные классы StringBuilder . Помните, что указатели на эту строку могут измениться, и если вам интересно узнать, совпадают ли два указателя == , было бы неплохо. Сами струны нет.
Я согласен с ответом от zacherates.
Но то, что вы можете сделать, это вызвать intern() для ваших не-литеральных строк.
Из примера zacherates:
Если вы интернируете, не буквальное равенство строк равно true
== означает, что ваши две строковые ссылки — это точно один и тот же объект. Возможно, вы слышали, что это так, потому что Java хранит своего рода буквальную таблицу (что она делает), но это не всегда так. Некоторые строки загружаются по-разному, создаются из других строк и т. Д., Поэтому вы никогда не должны предполагать, что две одинаковые строки хранятся в одном месте.
1 Вариант Часть 1 1.Какое утверждение относительно треугольника со сторонами 5,9,15 верно? а)тр.остроугольный 2)тр.тупоугольный
Мы отправили письмо со ссылкой на смену пароля на username@mail.ru.
Если письма нет, проверь папку «Спам».
Чтобы вопрос опубликовался, войди или зарегистрируйся
Нужна регистрация на Учи.ру
«Ваш урок» теперь называется Учи.Ответы. Чтобы зайти на сайт, используй логин и пароль от Учи.ру. Если у тебя их нет, зарегистрируйся на платформе.