{"id":3230,"date":"2018-04-01T21:43:07","date_gmt":"2018-04-02T02:43:07","guid":{"rendered":"https:\/\/www.manualjava.net\/?p=3230"},"modified":"2018-04-07T12:38:45","modified_gmt":"2018-04-07T17:38:45","slug":"paquetes","status":"publish","type":"post","link":"https:\/\/www.manualjava.net\/?p=3230","title":{"rendered":"Paquetes"},"content":{"rendered":"<p><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-3232\" src=\"https:\/\/www.manualjava.net\/wp-content\/uploads\/2018\/04\/java56.png\" alt=\"\" width=\"211\" height=\"87\" \/><\/p>\n<p><span style=\"color: #000000;\">Los paquetes es la forma que tiene Java de organizar los archivos con las clases necesarias para construir las aplicaciones. Java incorpora varios paquetes, por ejemplo java.lang, java.io, o java.util con las clases b\u00e1sicas para construir programas: System, String, Integer, Scanner . . .\u00a0<\/span><!--more--><\/p>\n<h2><span style=\"color: #000000;\"><strong>Sentencia package<\/strong><\/span><\/h2>\n<p><span style=\"color: #000000;\">\u00bfC\u00f3mo se puede definir un paquete?, la sentencia package se utiliza para este cometido. En primer lugar se debe incluir la sentencia package como primera l\u00ednea del archivo fuente de cada una de las clases del paquete. Por ejemplo, si las clases Lapiz, Boligrafo y Folio se van a organizar formando el paquete escritorio, el esquema a seguir es el siguiente:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\/\/ archivo fuente <strong>Lapiz.java<\/strong><\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0package escritorio;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Lapiz{<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ miembros de clase Lapiz<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\/\/ archivo fuente <strong>Boligrafo.java<\/strong><\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0package escritorio;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Boligrafo{<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ miembros de clase Boligrafo<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0\/\/ archivo fuente <strong>Folio.java<\/strong><\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0package escritorio;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Folio{<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ miembros de clase Folio<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Formato<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0package NombrePaquete;<\/span><\/p>\n<p><span style=\"color: #000000;\">En segundo lugar, una vez creado el archivo fuente de cada clase del paquete, se deben ubicar estos en un subdirectorio con el mismo nombre que el del paquete. En el esquema anterior se ubicar\u00e1n los archivos Lapiz.java, Boligrafo.java, y Folio.java en el path escritorio.\u00a0El uso de paquetes tiene dos beneficios importantes:<\/span><\/p>\n<ol>\n<li><span style=\"color: #000000;\">Las restricciones de visibilidad son menores entre clases que est\u00e1n dentro del mismo paquete. Desde cualquier clase de un paquete, los miembros protected y los miembros sin modificador de visibilidad son accesibles; sin embargo no lo son desde clases de otros paquetes.<\/span><\/li>\n<li><span style=\"color: #000000;\">La selecci\u00f3n de las clases de un paquete se puede abreviar con la sentencia import del paquete.<\/span><\/li>\n<\/ol>\n<h2><strong><span style=\"color: #000000;\">import<\/span><\/strong><\/h2>\n<p><span style=\"color: #000000;\">Las clases que se encuentran en los paquetes se identifican utilizando el nombre del paquete, el selector punto (.) y a continuaci\u00f3n el nombre de la clase. Por ejemplo, la declaraci\u00f3n de la clase Arte con atributos de la clase PrintStream (paquete java.io) y Lapiz (paquete escritorio):<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Arte{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private java.io.PrintStream salida;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private escritorio.Lapiz p;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">La sentencia import facilita la selecci\u00f3n de una clase, permite escribir \u00fanicamente su nombre, evitando el nombre del paquete. La declaraci\u00f3n anterior se puede abreviar:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0import java.io.PrintStream;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0import escritorio.*;<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0public class Arte{<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private PrintStream salida;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 private Lapiz p;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">La sentencia import debe aparecer antes de la declaraci\u00f3n de las clases, a continuaci\u00f3n de la sentencia package. Tiene dos formatos:<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Formato<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0import identificadorpaquete.nombreClase;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0import identificadorpaquete.*;<\/span><\/p>\n<p><span style=\"color: #000000;\">El primer formato especifica una clase concreta. El segundo formato especifica que para todas las clases del paquete no hace falta cualificar el nombre de la clase con el nombre del paquete.<\/span><\/p>\n<p><span style=\"color: #000000;\">Con frecuencia se utiliza el formato .* . Tiene la ventaja de poder simplificar cualquier clase del paquete, se pueden se\u00f1alar los siguientes problemas:<\/span><\/p>\n<ul>\n<li><span style=\"color: #000000;\">Se desconoce qu\u00e9 clases concretas del paquete se est\u00e1n utilizando. Por contra, con una sentencia\u00a0<strong>import\u00a0<\/strong>por cada clase se conocen las clases utilizadas.<\/span><\/li>\n<li><span style=\"color: #000000;\">Puede haber colisiones entre nombres de clases declaradas en el archivo y nombres de clases del paquete.<\/span><\/li>\n<li><span style=\"color: #000000;\">Mayor tiempo de compilaci\u00f3n debido a que el compilador busca la existencia de cualquier clase en el paquete.<\/span><\/li>\n<\/ul>\n<h3><span style=\"color: #000000;\"><strong>Nota<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">\u00a0Aunque aparezca la sentencia import paquete.*, el compilador genera\u00a0<strong>bytecode\u00a0<\/strong>solo para las clases utilizadas.<\/span><\/p>\n<h3><span style=\"color: #000000;\"><strong>Ejemplo<\/strong><\/span><\/h3>\n<p><span style=\"color: #000000;\">Se crea el paquete num\u00e9rico con la clase Random y se utiliza la clase en una aplicaci\u00f3n.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0package numerico;<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0public class Random{<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ . . .<\/span><br \/>\n<span style=\"color: #000000;\"> \u00a0 \u00a0 \u00a0 \u00a0}<\/span><\/p>\n<p><span style=\"color: #000000;\">Al utilizar la clase en otro archivo:<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0import java.util.*;<\/span><br \/>\n<span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0import numerico.*;<\/span><\/p>\n<p><span style=\"color: #000000;\">En el paquete java.util se encuentra la clase Random, entonces se produce una ambig\u00fcedad con la clase Random del paquete num\u00e9rico. Es necesario cualificar completamente el nombre de la clase Random de, por ejemplo, java.util.<\/span><\/p>\n<p><span style=\"color: #000000;\">\u00a0 \u00a0 \u00a0 \u00a0java.util.Random aleatorio;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\/\/ define una referencia<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los paquetes es la forma que tiene Java de organizar los archivos con las clases necesarias para construir las aplicaciones. Java incorpora varios paquetes, por ejemplo java.lang, java.io, o java.util con las clases b\u00e1sicas para construir programas: System, String, Integer, Scanner . . .\u00a0<\/p><p><a class=\"more-link btn\" href=\"https:\/\/www.manualjava.net\/?p=3230\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":3232,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"_links":{"self":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3230"}],"collection":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3230"}],"version-history":[{"count":20,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3230\/revisions"}],"predecessor-version":[{"id":3258,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/posts\/3230\/revisions\/3258"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=\/wp\/v2\/media\/3232"}],"wp:attachment":[{"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.manualjava.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}