Interview 20-40 Flashcards
Co to jest klasa Wrapper w Javie?
Wrapper, ogólnie mówiąc, odnosi się do większej jednostki, która otacza mniejszą jednostkę. W Javie klasa Wrapper jest klasą obiektową, która otacza typy danych prymitywnych.
Typy danych prymitywne to te, z których mogą być tworzone inne typy danych. Na przykład, liczby całkowite mogą prowadzić do tworzenia typu long, byte, short itp. Z kolei typ String nie jest prymitywny, ponieważ nie można z niego stworzyć innych typów danych.
Wracając do klasy Wrapper, Java zawiera 8 klas Wrapper: Boolean, Byte, Short, Integer, Character, Long, Float i Double. Dodatkowo, w Javie można tworzyć własne klasy Wrapper, które są podobne do struktury w języku C. Tworzymy własną klasę Wrapper z odpowiednimi typami danych.
Dlaczego potrzebujemy klas Wrapper?
Klasy Wrapper są finalne i niemutowalne.
Udostępniają metody takie jak valueOf(), parseInt() itp.
Zapewniają funkcje autoboxingu i unboxingu.
Różnice między zmiennymi instancyjnymi a lokalnymi.
Zmienna instancyjna:
Deklarowana poza metodą, bezpośrednio wywoływana przez metodę. Ma wartość domyślną. !!! Może być używana w całej klasie.
Zmienna lokalna:
Deklarowana wewnątrz metody. Nie ma wartości domyślnej. Zakres jej użycia jest ograniczony do metody.
Jakie są wartości domyślne przypisane do zmiennych i instancji w Javie?
W Javie, gdy nie zainicjalizujemy zmiennych instancyjnych, kompilator przypisuje im wartości domyślne. Wartości domyślne zależą od typów danych. Oto niektóre powszechne typy domyślnych wartości:
Dla typów numerycznych (byte, short, int, long, float, double) wartość domyślna to 0. Dla typu boolean wartość domyślna to false. Dla typów obiektowych (klas, interfejsów i tablic) wartość domyślna to null. Dla typu char wartość domyślna to znak null (”\u0000”).
Co to zmienna klasowa?
class GFG {
public static int ctr = 0;
public GFG() { ctr++; }
public static void main(String[] args)
{
GFG obj1 = new GFG();
GFG obj2 = new GFG();
GFG obj3 = new GFG();
System.out.println(“Number of objects created are “
+ GFG.ctr);
}
}
W Javie zmienna klasowa Class Variable (znana także jako zmienna statyczna) to zmienna zadeklarowana w obrębie klasy, ale poza metodą, konstruktorem lub blokiem. Zmienne klasowe są deklarowane za pomocą słowa kluczowego static, a są one wspólne dla wszystkich instancji (obiektów) klasy oraz samej klasy. Niezależnie od liczby utworzonych obiektów, zmienna klasowa istnieje tylko raz.
Jaką wartość domyślną przechowują zmienne lokalne?
Zmiennym lokalnym nie przypisywana jest żadna wartość domyślna. Przypisanie wartości do zmiennych lokalnych jest obowiązkowe przed ich użyciem. Zmienne prymitywne i obiektowe nie mają żadnych wartości domyślnych.
Wyjaśnij różnicę między zmienną instancyjną a zmienną klasową.
Zmienna instancyjna:
Zmienna bez modyfikatora static znana jest jako zmienna instancyjna. Jest dzielona przez wszystkie instancje klasy, ale każda instancja może mieć różne wartości.
Zmienna klasowa:
Zmienna klasowa jest deklarowana przy użyciu słowa kluczowego static. Jest dzielona przez wszystkie obiekty klasy, posiada jedną wartość dla wszystkich obiektów.
Co to jest zmienna statyczna?
Zmienne statyczne są zmiennymi, które są wspólne dla wszystkich obiektów danej klasy. Po zadeklarowaniu zmiennej jako static, tworzona jest tylko jedna kopia tej zmiennej, która jest dzielona przez wszystkie obiekty klasy.
Jaka jest różnica między System.out, System.err i System.in?
System.out – Jest to strumień PrintStream, który jest używany do wypisywania danych na konsolę (CLI).
System.err – Używany do wypisywania komunikatów o błędach. Różni się od System.out tym, że zazwyczaj wyświetlane są w czerwonym kolorze w większości IDE.
System.in – Jest to strumień wejściowy (InputStream), używany do odczytu danych z terminala. Zwykle używa się klasy Scanner, aby z niego korzystać
Co rozumiesz przez strumień I/O?
W Javie strumienie wprowadzają i wyprowadzają dane do i z programów. Strumienie te obsługują różne typy danych, obiektów i plików, pozwalając na pełne operacje we/wy.
Jaka jest różnica między hierarchią klas Reader/Writer a hierarchią klas InputStream/OutputStream?
Podstawowa różnica między nimi polega na tym, że klasy InputStream/OutputStream służą do odczytu i zapisu danych w postaci bajtów, podczas gdy klasy Reader/Writer obsługują znaki. Klasy Reader/Writer akceptują tablice znaków jako parametry, natomiast metody klas InputStream/OutputStream przyjmują tablice bajtów. W porównaniu do klas InputStream/OutputStream, klasy Reader/Writer są bardziej wydajne, obsługują wszystkie znaki Unicode i są przydatne do internacjonalizacji. Klasy Reader/Writer powinno się używać zamiast danych binarnych (np. zdjęć), chyba że zachodzi taka potrzeba.
import java.io.*;
class GFG {
public static void main(String[] args) {
try {
// Zapisywanie danych binarnych do pliku za pomocą OutputStream
byte[] data = {(byte) 0xe0, 0x4f, (byte) 0xd0, 0x20, (byte) 0xea};
OutputStream os = new FileOutputStream(“data.bin”);
os.write(data);
os.close();
// Odczyt danych binarnych z pliku za pomocą InputStream InputStream is = new FileInputStream("data.bin"); byte[] newData = new byte[5]; is.read(newData); is.close(); // Wydruk odczytanych danych for (byte b : newData) { System.out.print(b + " "); } } catch (IOException e) { e.printStackTrace(); } } }
Jakie są najwyższe klasy dla wszystkich strumieni?
Wszystkie klasy strumieni w Java dzielą się na dwie główne kategorie: klasy ByteStream i klasy CharacterStream. Klasy ByteStream dzielą się na InputStream i OutputStream, natomiast klasy CharacterStream dzielą się na Reader i Writer. Klasa nadrzędna dla wszystkich klas InputStream to java.io.InputStream, a dla wszystkich klas OutputStream to java.io.OutputStream. Podobnie, dla wszystkich klas Reader nadrzędną klasą jest java.io.Reader, a dla klas Writer jest java.io.Writer.
Co to są FileInputStream i FileOutputStream?
W Java, FileInputStream służy do odczytu danych z pliku w postaci strumienia bajtów. Jest używany głównie do odczytu danych binarnych, takich jak obrazy, pliki audio lub obiekty zapisane w formacie binarnym.
Przykład:
File file = new File(“path_of_the_file”);
FileInputStream inputStream = new FileInputStream(file);
FileOutputStream służy do zapisu danych do pliku bajt po bajcie. Zwykle jest używany do zapisywania surowych danych binarnych, takich jak obrazy, w pliku.
Przykład:
File file = new File(“path_of_the_file”);
FileOutputStream outputStream = new FileOutputStream(file);
Jaki jest cel używania klas BufferedInputStream i BufferedOutputStream?
Kiedy pracujemy z plikami lub strumieniami, aby zwiększyć wydajność operacji we/wy, używamy klas BufferedInputStream i BufferedOutputStream. Obie klasy oferują możliwość buforowania, co oznacza, że dane są przechowywane w buforze przed zapisaniem do pliku lub odczytem z strumienia. Zmniejsza to liczbę interakcji z systemem operacyjnym, co pozwala na szybszą obsługę dużych ilości danych.
Przykład:
BufferedInputStream(InputStream inp);
BufferedOutputStream(OutputStream output);
Co to są FilterStreams?
Filtry strumieni (FilterStreams) to strumienie, które zwracają nowy strumień zawierający elementy spełniające określony predykat. Kiedy używamy filter(), nie wykonuje ono faktycznego filtrowania, lecz tworzy nowy strumień, który po przejściu zawiera tylko elementy pasujące do danego predykatu.
Przykład:
FileInputStream fis = new FileInputStream(“file_path”);
FilterInputStream filterStream = new BufferedInputStream(fis);