importowanie klas w javie

0

Witam mam takie małe pytanko. Jak się prawidłowo powinno importować w Javie i innych językach?

import javax.swing.*;

czy

import javax.swing.JLabel;
import javax.swing.JButton;

Jeśli będę w programie używam tylko klasy JButton oraz JLabel.
Wydaje mi się, że to drugie rozwiązanie jest prawidłowe. To pierwsze chyba tylko niepotrzebnie zwiększy objętość programu.

dodanie znaczników <code class="java"> - fp

0

Na logikę niby tak, ale w praktyce jednak wygląda to następująco... Prosta klasa:

import javax.swing.*;

public class Klasa {

     public static void main(String args[]) {
     
          System.out.println("Hello World!");
     
     }
}

Zajmuje 142 bajty przed kompilacją. Zmiana importu na javax.swing.JLabel zwiększy objętość pliku do 147 bajtów, na javax.swing.JButton na 148 bajtów, a wykorzystanie obu importów (JLabel + JButton) skutkuje zwiększeniem objętości pliku Klasa.java do 176 bajtów :) Dlaczego? Ilość znaków w wyrażeniu "import javax.swing.JButton" jest brana pod uwagę, a nie to, co ten pakiet w sobie zawiera itd. A teraz jak wygląda sprawa po kompilacji? Nieważne ile importów wklepiemy z pakietu javax.swing, to skompilowany plik (.class) będzie miał objętość 416 bajtów, dopóki nie utworzymy jakiegoś obiektu z zaimportowanych pakietów. Dlaczego? Bo instrukcja import umożliwia po prostu uwidacznianie konkretnych klas i pakietów, a także jest prawdę mówiąc pomocą jedynie dla programisty, bo nie musi być stosowana jako taka. Z punktu widzenia samego języka nie trzeba jej stosować w żadnym z programów. Jednak, gdy korzysta się wielokrotnie podczas pisania z tych samych klas, to import pozwala zaoszczędzić sporo czasu na skrobaniu. Tak więc z uwagi na oszczędność w czasie stosuj skróty typu "import javax.swing.*;" :)

Pozdrawiam.

0

Drugie jest lepsze, ale nie z powodu mniejszego programu - wielkość programu jest praktycznie taka sama.

import java.util.*;
import javax.swing.*;
....
Timer timer = new Timer(...);

Kodu nie skompilujesz bo klasa Timer jest w pakiecie java.util, jest też w pakiecie javax.swing. W kodzie pisanym w notepad++ używam gorszego pierwszego rozwiązania, bo wymaga mniej pisania.

0

Nie dawno zacząłem używać IntelliJ i tam jak użyję jakiejś klasy z swinga i dam żeby ją dodało to dodaje:

import javax.swing.*;

A gościu w kursie swinga który oglądam używa Eclipsa i jemu dodaje pojedyncze klasy.

import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JButton;

I wydawało mi się, że taki zapis będzie tworzył po kompilacji mniejszy plik wynikowy. A dwa to chyba jest on bardziej przejrzysty bo widać jakie z czego klasy importowane są.

0

Dlaczego sądzisz, że drugi zapis da mniejszy plik wynikowy? Instrukcja importu niczego nie wstawia do pliku wynikowego, pozwala jedynie kompilatorowi uzupełnić krótką nazwę klasy do pełnej nazwy. Kody

import javax.swing.*;
...
JFrame okno = new JFrame();

import javax.swing.JFrame;
...
JFrame okno = new JFrame();

//bez żadnego importu
javax.swing.JFrame() okno = new javax.swing.JFrame();

są równoważne.

0

W pliku wynikowy i tak wszystkie użycia są zastępowane przez pełną nazwę klasy. Zatem czy napiszesz:

import javax.swing.*;

czy

import javax.swing.JLabel;

nie robi różnicy.

Ważniejszym aspektem jest funkcjonalność na poziomie IDE. Poza wspomnianym wyżej przez @bogdans-a konfliktem nazw przy imporcie z *. może się okazać, że np. podpowiadanie nazw będzie spamowało gigantycznymi listami z całych pakietów.
Osobiście wolę pełne nazwy właśnie z powodu znacznie lepiej działającego auto uzupełnia składni i podpowiadania nazw.

1 użytkowników online, w tym zalogowanych: 0, gości: 1