Importar paquetes en Java

Una de las preguntas que me hice cuando comenze a utilizar Java como lenguaje de programacion era que la mayoria de las personas a la hora de que necesitaban importar alguna clase especifica de un paquete, estas no se complicaban e importaban todo el paquete, mientras en los IDEs , importaba especificamente la clase que se necesitaba, y si importaban varias clases era una larga lista ya que hacian una linea por cada clase que necesitaban importar.

Aqui hay un par de ejemplos para poder explicarlo de una mejor manera.

A este ejemplo lo llamaremos A. Esto es lo que la mayoria de personas siempre hace.


import java.io.*;
import java.util.*;
import javax.swing.*;
.
.
.

A este ejemplo lo llamaremos B.Mientras algunas otras personas y la mayoria de los IDES hacen esto por ejemplo.


import java.io.BuffferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Date;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
.
.
.

Ahora veamos realmente cual es la diferencia entre importar las clases de las 2 maneras.

El ejemplo A se diria a simple vista que podria causar que el archivo creciera porque se esta importando todas las clases de ese paquete, y por lo tanto el archivo en el cual son llamados creceria mucho, mientras en el ejemplo B como solo estamos llamando a las clases que se necesitan el archivo no creceria mucho.

Pero en realidad lo que sucede es que si compilamos los 2 archivos medirian exactamente la misma cantidad de bytes , entonces que sucede?

La unica diferencia entre los 2 ejemplos es que el ejemplo A tarda mas tiempo en compilar que el ejemplo B ya esto es solo una referencia para el compilador de donde debe de ir a buscar la clase a la cual estamos llamando y por esto es que el compilador se tarda un poco mas en compilar el ejemplo B que el ejemplo A.

Otra simple curiosidad es que si importamos estos 2 paquetes.

A la hora de compilarlo nos daria un error , ya que la clase Date existe en ambos paquetes por lo tanto esa declaracion del objeto Date se vuelve ambiguo para el compilador , y lo unico que hay que hacer para resolver este conflicto es declarar explicitamente a que clase estamos haciendo referencia, ya sea


java.sql.Date d = new Date();
o
java.util.Date d = new Date();

Y de esta manera nos evitamos cualquier tipo de ambiguedad que pueda surgir.