1. Почему Java является независимым от платформы языком?
Язык Java был разработан таким образом, что он не зависит ни от какого аппаратного или программного обеспечения благодаря тому, что компилятор компилирует код, а затем преобразует его в платформо-независимый байт-код, который может быть запущен на нескольких системах.
- Единственным условием для запуска этого байт-кода является наличие на машине установленной среды выполнения (JRE).
2. Почему Java не является чисто объектно-ориентированным языком?
Java поддерживает примитивные типы данных — byte, boolean, char, short, int, float, long и double, и, следовательно, это не чистый объектно-ориентированный язык.
3. Разница между кучей и стековой памятью в java. И как java использует это.
Память стека — это часть памяти, которая была назначена каждой отдельной программе. И это было исправлено. С другой стороны, куча памяти — это часть, которая не была выделена для программы Java, но она будет доступна для использования программой Java, когда это потребуется, в основном во время выполнения программы.
Пример. Рассмотрите приведенную ниже Java-программу:
class Main { public void printArray(int[] array){ for(int i : array) System.out.println(i); } public static void main(String args[]) { int[] array = new int[10]; printArray(array); } }
Для этой Java-программы. Память стека и кучи, занимаемая java, -
Main и PrintArray — это метод, который будет доступен в области стека, а также объявленные переменные, которые также будут находиться в области стека.
И объект (целочисленный массив размером 10), который мы создали, будет доступен в области кучи, потому что это пространство будет выделено программе во время выполнения.
4. Можно ли назвать Java полным объектно-ориентированным языком программирования?
Мы не ошибемся, если заявим, что Java — это полный объектно-ориентированный язык программирования. Потому что все в Java находится под классами. И мы можем получить к этому доступ, создав объекты.
Но также, если мы скажем, что java не является полностью объектно-ориентированным языком программирования, потому что он поддерживает примитивные типы данных, такие как int, float, char, boolean, double и т. д.
Теперь вопрос: Является ли java полностью объектно-ориентированным языком программирования? Можно сказать, что — Java не является чисто объектно-ориентированным языком программирования, потому что он имеет прямой доступ к примитивным типам данных. И эти примитивные типы данных не относятся напрямую к классам Integer.
5. Чем Java отличается от C++?
- C++ — это только компилируемый язык, тогда как Java компилируется так же, как и интерпретируемый язык.
- Программы на Java не зависят от машины, тогда как программа на С++ может работать только на той машине, на которой она скомпилирована.
- C++ позволяет пользователям использовать указатели в программе. В то время как java этого не позволяет. Java внутренне использует указатели.
- C++ поддерживает концепцию множественного наследования, тогда как Java этого не поддерживает. И это связано с тем, чтобы избежать сложности двусмысленности имени, которая вызывает проблему алмаза.
6. Указатели используются в C/C++. Почему Java не использует указатели?
Указатели довольно сложны и небезопасны для начинающих программистов. Java фокусируется на простоте кода, а использование указателей может усложнить его. Использование указателя также может привести к потенциальным ошибкам. Кроме того, безопасность также подвергается риску, если используются указатели, поскольку пользователи могут напрямую обращаться к памяти с помощью указателей.
Таким образом, определенный уровень абстракции обеспечивается отсутствием указателей в Java. Более того, использование указателей может сделать процедуру сборки мусора довольно медленной и ошибочной. Java использует ссылки, поскольку ими нельзя манипулировать, в отличие от указателей.
7. Что вы понимаете под переменной экземпляра и локальной переменной?
Переменные экземпляра — это переменные, доступные для всех методов класса. Они объявляются вне методов и внутри класса. Эти переменные описывают свойства объекта и остаются привязанными к нему любой ценой.
Все объекты класса будут иметь свою копию переменных для использования. Если в эти переменные будут внесены какие-либо изменения, то это повлияет только на этот экземпляр, а все остальные экземпляры класса останутся незатронутыми.
Пример:
class Athlete { public String athleteName; public double athleteSpeed; public int athleteAge; }
Локальные переменные — это те переменные, которые присутствуют в блоке, функции или конструкторе и доступны только внутри них. Использование переменной ограничено рамками блока. Всякий раз, когда локальная переменная объявляется внутри метода, другие методы класса ничего не знают о локальной переменной.
Пример:
public void athlete() { String athleteName; double athleteSpeed; int athleteAge; }
8. Какие значения по умолчанию присваиваются переменным и экземплярам в java?
- В java нет значений по умолчанию для переменных. Нам нужно инициализировать значение перед его использованием. В противном случае будет выдана ошибка компиляции (Возможно, переменная не инициализирована).
- Но, например, если мы создадим объект, то значение по умолчанию будет инициализировано конструктором по умолчанию в зависимости от типа данных.
- Если это ссылка, то ей будет присвоено значение null.
- Если он числовой, то ему будет присвоено значение 0.
- Если это логическое значение, то ему будет присвоено значение false. И т. д.
9. Что вы подразумеваете под инкапсуляцией данных?
- Инкапсуляция данных — это концепция объектно-ориентированного программирования, заключающаяся в сокрытии атрибутов данных и их поведения в одном блоке.
- Это помогает разработчикам следовать модульности при разработке программного обеспечения, гарантируя, что каждый объект независим от других объектов, имея свои собственные методы, атрибуты и функции.
- Он используется для защиты частных свойств объекта и, следовательно, служит для сокрытия данных.
10. Расскажите нам что-нибудь о JIT-компиляторе.
- JIT расшифровывается как Just-In-Time и используется для повышения производительности во время выполнения. Он выполняет задачу одновременной компиляции частей байтового кода, имеющих сходную функциональность, тем самым сокращая время компиляции для запуска кода.
- Компилятор — это не что иное, как транслятор исходного кода в машинно-исполняемый код. Но что особенного в компиляторе JIT? Давайте посмотрим, как это работает:
- Во-первых, преобразование исходного кода Java (.java) в байтовый код (.class) происходит с помощью компилятора javac.
- Затем файлы .class загружаются JVM во время выполнения и с помощью интерпретатора преобразуются в понятный машинному коду.
- Компилятор JIT является частью JVM. Когда компилятор JIT включен, JVM анализирует вызовы методов в файлах .class и компилирует их, чтобы получить более эффективный и собственный код. Это также гарантирует, что приоритетные вызовы методов оптимизированы.
- После выполнения вышеуказанного шага JVM выполняет оптимизированный код напрямую, а не снова интерпретирует код. Это увеличивает производительность и скорость выполнения.
11. Можете ли вы сказать, в чем разница между методом equals() и оператором равенства (==) в Java?
Мы уже знакомы с оператором (==) equals. Что мы использовали это, чтобы сравнить равенство значений. Но когда мы говорим о терминах объектно-ориентированного программирования, мы имеем дело со значениями в форме объектов. И этот объект может содержать несколько типов данных. Поэтому использование оператора (==) в этом случае не работает. Поэтому нам нужно использовать метод .equals().
Обе основные функции [(==) и .equals()] предназначены для сравнения значений, но второстепенные функции различаются.
Итак, чтобы лучше понять это, давайте рассмотрим это на примере -
String str1 = "SoftwareTechIT"; String str2 = "SoftwareTechIT"; System.out.println(str1 == str2);
Этот код будет печатать true. Мы знаем, что обе строки равны, поэтому будет напечатано true. Но здесь (==) операторы в этом случае не сравнивают каждый символ. Он сравнивает расположение памяти. А поскольку строка использует постоянный пул для хранения значений в памяти, обе строки str1 и str2 хранятся в одной и той же ячейке памяти. См. подробное объяснение в вопросе № 73: Ссылка.
Теперь, если мы немного изменим программу с помощью -
String str1 = new String("SoftwareTechIT");
Строка str2 = «SoftwareTechIT»;
System.out.println(str1 == str2);
Тогда в этом случае он напечатает false. Потому что здесь больше не используются концепции постоянного пула. Здесь выделяется новая память. Итак, здесь адрес памяти другой, поэтому ( == ) Оператор возвращает false. Но фишка в том, что значения одинаковы в обеих строках. Итак, как сравнить значения? Здесь используется метод .equals().
Метод .equals() сравнивает значения и возвращает соответствующий результат. Если мы изменим приведенный выше код с помощью -
System.out.println(str1.equals(str2));
Затем он возвращает истину.
equals() ==Это метод, определенный в классе Object. Это бинарный оператор в Java. Метод .equals() присутствует в классе Object, поэтому мы можем переопределить наш пользовательский метод .equals() в пользовательском классе для сравнения объектов. Его нельзя изменить. Они всегда сравнивают HashCode. Этот метод используется для проверки равенства содержимого между двумя объектами в соответствии с указанной бизнес-логикой. Этот оператор используется для сравнения адресов (или ссылок), т.е. проверяет, указывают ли оба объекта на одну и ту же память. расположение.
Примечание.
- В тех случаях, когда метод equals не переопределен в классе, класс использует реализацию метода equals по умолчанию, наиболее близкую к родительскому классу.
- Класс объекта считается родительским классом всех классов Java. Реализация метода equals в классе Object использует оператор == для сравнения двух объектов. Эта реализация по умолчанию может быть переопределена в соответствии с бизнес-логикой.
12. Как объявляется бесконечный цикл в Java?
Бесконечные циклы — это такие циклы, которые выполняются бесконечно без каких-либо условий прерывания. Некоторые примеры сознательного объявления бесконечного цикла:
- Использование цикла:
for (;;) { // Business logic // Any break logic }
- Использование цикла while:
while(true){ // Business logic // Any break logic }
- Использование цикла do-while:
do{ // Business logic // Any break logic }while(true);