Основные вопросы по Java, которые вы должны знать

Java

предисловие

Как у вас обстоят дела с Java? Многие студенты скажут: «Моя основа Java неплохая!» Действительно ли ваша база хороша? Вы тоже можете попробовать посмотреть вопросы в моей статье, если вы сможете правильно на них ответить, то я могу вам только сказать: одноклассник, у вас очень хорошая основа, ставьте палец вверх! Несколько дней назад я просмотрел материалы и увидел много базовых вопросов по Java, которые я видел раньше.Хотя это действительно базовые, но есть и много «ям».Далее мы войдем в тему, и студенты, которые будет делать это будет рассматриваться как закрепление очков знаний.Студенты, которые не знают, должны усердно учиться, это самые базовые знания!

float f=3.4, это правильно?

Ответ: Неправильно. Поскольку 3.4 является числом с двойной точностью, присвоение типа с двойной точностью (double) типу с плавающей запятой (float) приводит к нисходящему приведению (также известному как сужение), что приведет к потере точности, поэтому его необходимо привести для float f = ( float)3.4 или записать как float f =3.4f;

короткий s1 = 1; s1 = s1 + 1; неправильно? короткий s1 = 1; s1 += 1; неправильный?

Ответ: Для короткого s1 = 1; s1 = s1 + 1; поскольку 1 имеет тип int, результат операции s1+1 также имеет тип int, поэтому вам нужно привести тип, чтобы присвоить его короткому типу; и короткий s1 = 1; s1 += 1; компилируется правильно, поскольку s1+= 1; эквивалентно s1 = (short(s1 + 1); с неявным приведением.

Вы знаете разницу между операторами & и &&, | и ||?

Ответ: & является побитовым оператором И, только когда соответствующие два двоичных числа равны 1, бит результата равен 1. Например: 1&1 = 1, 1&0 = 0, 0&1 = 0, 0&0 = 0. | Побитовый оператор ИЛИ, когда один из них равен 1, результирующий бит равен 1. Например: 1|1 = 1, 1|0 = 1, 0|1 = 1, 0|0 = 0.

И &, и && могут реализовывать операции AND. Отличие: & работает с обеих сторон, тогда как && сначала вычисляет левую часть &&. Если левая часть ложна, то правая сторона не работает. Рекомендуется использовать && в операторе суждения, что более эффективно.

​| и || могут быть реализованы или работать, разница в следующем: || Пока выполняется первое условие, следующие условия не будут оцениваться, в то время как | нужно оценивать все условия.

​&& и || называются операторами короткого замыкания.

Вы понимаете битовые операции? Вычислите 2 раза по 8 наиболее эффективным способом

Ответ: 2

Емкость HashMap по умолчанию в обычном исходном коде JDK составляет 16. int DEFAULT_INITIAL_CAPACITY = 1

Каковы основные типы данных в Java?

Ответ: восемь основных типов данных: byte, short, int, long, float, double, char, boolean.

В чем разница между == и equals?

Ответ. При сравнении примитивных типов данных используйте == для определения равенства. При сравнении ссылочного типа данных data: == сравнивает, совпадают ли адреса памяти и отличаются ли адреса памяти разных объектов; equals сравнивает конкретное содержимое.

String str = new String("abc"); Сколько объектов создается?

О: Вы можете создать один объект, а можете создать два объекта, что необходимо обсуждать в каждом конкретном случае.

Создайте объект: когда существует постоянный пул, объект является непосредственно новым. Создайте два объекта: если пул констант не существует, создайте объект в пуле констант и создайте объект в куче.

О примере сравнения адресов памяти

String str1= new String("abc"); String str2= "abc"; String str3= "abc"; System.out.println(str1 == str2) //false System.out.println(str2 == str3) //true

отвечать: Первый ложный: новый создает новый объект, открывает новое пространство, поэтому адрес не тот. Верно второе: все получены из пула констант, а "abc" существует в пуле констант.

В чем разница между String, StringBuffer и StringBuilder? Каковы их сценарии использования?

Ответ: Все три являются окончательными и не могут быть унаследованы, по сути, все они реализованы символьными массивами char[]. Среди String, StringBuffer и StringBuilder String является неизменяемым объектом, а StringBuffer и StringBuilder — изменяемыми. StringBuilder более эффективен, потому что он не требует блокировки и не является многопоточным.Метод работы в StringBuffer использует синхронизированный, который относительно менее эффективен и ориентирован на потоки; ​ используемые сцены:

  • String используется для работы с небольшим объемом данных, но лучше не использовать String, когда содержимое часто меняется и данных операций много, потому что производительность каждого поколения промежуточных объектов будет снижаться.​
  • StringBuilder используется для обработки большого количества строк в одном потоке, хотя он и не является потокобезопасным, но не влияет.
  • Для работы с большим количеством строк в многопоточном режиме и необходимости обеспечения безопасности потоков используйте StringBuffer.

Финал для чего?

отвечать: Используется для украшения классов, свойств и методов;

  • Класс, измененный с помощью final, не может быть унаследован
  • Метод, измененный final, не может быть переопределен
  • Переменные, измененные с помощью final, не могут быть изменены.
  • Что является неизменным при окончательной модификации, так это ссылка на переменную, а не содержимое, на которое указывает ссылка.Содержимое, на которое указывает ссылка, может быть изменено.

final окончательно доработать в чем разница?

отвечать:

  • Final может изменять классы, переменные и методы.Измененный класс означает, что класс не может быть унаследован, модифицированный метод означает, что метод не может быть переопределен, а измененная переменная означает, что переменная является константой и не может быть переназначена.
  • Наконец, обычно действует в блоке кода try-catch.При работе с исключениями мы обычно помещаем метод кода, который должен быть выполнен, в блоке кода finally, указывая, что блок кода будет выполняться независимо от того, есть исключение или нет, и обычно используется для хранения некоторых закрытых ресурсов кода.
  • finalize — это метод, который принадлежит классу Object, а класс Object является родительским классом для всех классов. Этот метод обычно вызывается сборщиком мусора. Когда мы вызываем метод System.gc(), сборщик мусора вызывает finalize. (), сборка мусора, окончательное решение о том, подлежит ли объект переработке.

Каковы четыре характеристики объектной ориентации?

Ответ: абстракция, инкапсуляция, наследование, полиморфизм

Аннотация: класс, объявленный с помощью ключевого слова abstract, называется абстрактным классом, а метод, объявленный с помощью abstract, называется абстрактным методом. Если класс содержит один или несколько абстрактных методов, класс должен быть обозначен как абстрактный класс.Абстрактный метод — это специальный метод только с одним объявлением и без тела метода.

Инкапсуляция: инкапсуляция заключается в том, чтобы окружить процесс и данные. Доступ к данным может быть достигнут только через определенный интерфейс, то есть метод.В java ключевые слова private, protected и public используются для достижения инкапсуляции. Инкапсуляция объединяет все компоненты объекта.Инкапсуляция определяет, как программа обращается к данным объекта.Фактически инкапсуляция использует методы для сокрытия данных класса и управления степенью, в которой пользователи могут изменять класс и получать доступ к данным. Надлежащая инкапсуляция может упростить понимание и поддержку кода, а также повысить безопасность кода. Общая инкапсуляция классов и инкапсуляция методов.

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

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

Разница между перегрузкой и переопределением?

отвечать: Перегрузка. Указывает, что в одном классе может быть несколько методов с одинаковыми именами, но списки параметров этих методов различаются, а количество или типы параметров различаются. Переопределить Переопределить: переопределить метод в родительском классе, указав, что метод в подклассе может иметь то же имя и параметры, что и метод в родительском классе.

Может ли интерфейс наследовать интерфейс? Поддерживает ли интерфейс множественное наследование? Поддерживают ли классы множественное наследование?

отвечать:

  • Интерфейс может иметь статические методы и тела методов.
  • Все методы в интерфейсе должны быть абстрактными методами (не после JDK8).
  • Интерфейсы не наследуются классами, а реализуются классами
  • Интерфейс поддерживает множественное наследование, класс не поддерживает множественное наследование классов

Написать метод для передачи в него двух ненулевых значений int и реализовать обмен переменными.Сколько есть способов?

A: Три способа перечислены ниже: Первый (самый распространенный):

 public static void swap(int a, int b){
	System.out.printf("a=%d, b=%d",a,b);
        int temp;
        temp=a ;
        a = b;
        b=temp;
        System.out.printf("\na=%d, b=%d",a,b);
}

Секунда:

  public static void swap(int a, int b){
        System.out.printf("a=%d, b=%d",a,b);
        a = a + b;
        b = a - b ;
        a = a - b;
        System.out.printf("\na=%d, b=%d",a,b);
}

Третий тип (операция XOR, число дважды объединяется XOR с другим числом, а результат XOR числа и самого себя равен 0):

 public static void swap2(int a, int b){
     System.out.printf("a=%d, b=%d",a,b);
     a = a^b; 
     b = b^a;   
     a = a^b;   
     System.out.printf("\na=%d, b=%d",a,b);

}

Эпилог

Конечно, вышеприведенная часть — это лишь верхушка айсберга основных вопросов по Java. Знать эти вопросы далеко не достаточно. Если вы хотите продолжать совершенствоваться, вы должны продолжать учиться и решать вопросы. Примечание. Если у вас есть какие-либо вопросы по поводу вопроса, оставьте сообщение, чтобы исправить его!