{"id":2352,"date":"2016-02-22T06:48:29","date_gmt":"2016-02-22T05:48:29","guid":{"rendered":"http:\/\/karstieltopia.com\/?p=2352"},"modified":"2016-02-26T06:33:30","modified_gmt":"2016-02-26T05:33:30","slug":"que-es-un-constructor","status":"publish","type":"post","link":"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/","title":{"rendered":"\u00bfQu\u00e9 es un constructor?"},"content":{"rendered":"

Ya sabemos como crear objetos a trav\u00e9s de la definici\u00f3n de la clase pero \u00bfqu\u00e9 hechizo de primer nivel necesitas para crearlo? Una vez que lo sepas no lo olvidar\u00e1s, \u00a1su nombre es constructor!<\/p>\n

<\/p>\n

Cuando hayas construido una buena definici\u00f3n de una clase, lo que querr\u00e1s hacer es usarla y para ello necesitas tener un constructor, por ejemplo como las siguientes l\u00edneas de c\u00f3digo Java:<\/p>\n

public class HelloWorld {\r\n    HelloWorld () {\r\n        System.out.println (\"Hello World\");\r\n    }\r\n}<\/pre>\n

\u00bfPuedes ver un m\u00e9todo que se llama\u00a0“HelloWorld ()”? \u00bfS\u00ed? Pues ya has visto tu primer constructor.<\/p>\n

B\u00e1sicamente un constructor es algo como un m\u00e9todo que tiene el mismo nombre de la clase (si te est\u00e1s preguntando que es un m\u00e9todo, quiz\u00e1s le puedes echar un vistazo a la entrada que escrib\u00ed<\/a>), que no devuelve ning\u00fan valor (es m\u00e1s, si os fij\u00e1is, no hay definido nada como valor de retorno) y ser\u00e1 llamado cada vez que un objeto se inicializa, es decir, en el principio de su vida.<\/p>\n

\u00bfPara que sirve un constructor? Pues es muy \u00fatil para inicializar procesos, controlar algo, etc. Piensa un poco sobre ello y ver\u00e1s que siempre hay alg\u00fan objeto que necesita hacer cosas antes de empezar a operar con \u00e9l.<\/p>\n

Para ver con m\u00e1s profundidad como funciona un constructor, vamos a cambiar un poco nuestro ejemplo anterior:<\/p>\n

public class HelloWorld {\r\n    \r\n    HelloWorld(int number) {\r\n        System.out.println(\"Hello World \" + number);\r\n    }\r\n    \r\n    public void saySomething () {\r\n        System.out.println(\"Something\");\r\n    }\r\n\r\n    public static void main(String []args){\r\n        System.out.println(\"Beginning\");\r\n        \r\n        HelloWorld h = new HelloWorld(1);\r\n        h.saySomething();\r\n        \r\n        System.out.println(\"Ending\");\r\n    }\r\n}\r\n<\/pre>\n

Una peque\u00f1a nota que necesitas saber y es que si quieres llamar a tu clase como un programa, es decir, que puedas ejecutarlo directamente desde el sistema operativo que tengas, necesitas que esa clase tenga un m\u00e9todo est\u00e1tico con el nombre de “main”, siendo esto un est\u00e1ndar en Java. Entonces, si tenemos un m\u00e9todo llamado main, que sea est\u00e1tico y ejecutas el programa desde el sistema operativo, el contenido de ese m\u00e9todo ser\u00e1 ejecutado.<\/p>\n

Despu\u00e9s de esta explicaci\u00f3n un tanto rara (como en otras ocasiones, lo veremos en m\u00e1s profundidad en otra entrada), aqu\u00ed vamos a ver la salida del programa:<\/p>\n

Beginning                                                                                                                                                                 \r\nHello World 1                                                                                                                                                              \r\nSomething                                                                                                                                                                 \r\nEnding<\/pre>\n

Primero vemos “Beginning” porque el m\u00e9todo main se llama en primer lugar porque suponemos que llamamos a la clase desde el sistema opeativo. Entonces vemos que tenemos el mensaje de “Hello World 1” porque hemos creado el objeto en el m\u00e9todo main con la instrucci\u00f3n “new HelloWorld(1)” y, como hemos visto anteriormente, lo primero que hace un objeto al nacer es llamar a su constructor. Despu\u00e9s de eso, vemos el mensaje “saySomething” porque hemos llamado a ese m\u00e9todo y finalmente el “Ending” del m\u00e9todo main. \u00bfA qu\u00e9 es sencillo?<\/p>\n

Quiz\u00e1s te est\u00e9n preguntando porque en otras entradas en este blog hemos creado objetos sin haber definido un constructor. Lo primero es decir que Java intenta ser vuestro amigo y se preocupa de un mont\u00f3n de cosas, con lo que si no defines un constructor \u00e9l crear\u00e1 uno por defecto que no tendr\u00e1 ning\u00fan par\u00e1metro ni har\u00e1 nada… pero estar\u00e1 ah\u00ed en las sombras y todo funcionar\u00e1 correctamente; pero recordar un detalle, si creas un constructor a mano, no tendr\u00e1s el constructor por defecto y eso tiene repercusiones. Si volv\u00e9is a mirar el ejemplo anterior, si pusi\u00e9ramos “new HelloWorld()” sin par\u00e1metros, la compilaci\u00f3n fallar\u00eda porque no existe ese constructor y \u00bfpor qu\u00e9? Pues porque hemos definido ya uno con un par\u00e1metro.<\/p>\n

Y esto ha sido todo por ahora. Ya pod\u00e9is utilizar vuestros nuevos amigos sin problemas.<\/p>\n

 <\/p>\n","protected":false},"excerpt":{"rendered":"

Ya sabemos como crear objetos a trav\u00e9s de la definici\u00f3n de la clase pero \u00bfqu\u00e9 hechizo de primer nivel necesitas para crearlo? Una vez que lo sepas no lo olvidar\u00e1s, \u00a1su nombre es constructor!<\/p>\n","protected":false},"author":1,"featured_media":2347,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[22],"tags":[994],"jetpack_featured_media_url":"https:\/\/i1.wp.com\/karstieltopia.com\/wp-content\/uploads\/2016\/02\/constructor.jpg?fit=500%2C374","jetpack_publicize_connections":[],"yoast_head":"\n\u00bfQu\u00e9 es un constructor? - Karstieltopia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00bfQu\u00e9 es un constructor? - Karstieltopia\" \/>\n<meta property=\"og:description\" content=\"Ya sabemos como crear objetos a trav\u00e9s de la definici\u00f3n de la clase pero \u00bfqu\u00e9 hechizo de primer nivel necesitas para crearlo? Una vez que lo sepas no lo olvidar\u00e1s, \u00a1su nombre es constructor!\" \/>\n<meta property=\"og:url\" content=\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/\" \/>\n<meta property=\"og:site_name\" content=\"Karstieltopia\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-22T05:48:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-02-26T05:33:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/karstieltopia.com\/wp-content\/uploads\/2016\/02\/constructor.jpg?fit=500%2C374\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"374\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@karstiel\" \/>\n<meta name=\"twitter:site\" content=\"@karstiel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/karstieltopia.com\/#website\",\"url\":\"http:\/\/karstieltopia.com\/\",\"name\":\"Karstieltopia\",\"description\":\"Programaci\\u00f3n, tecnolog\\u00eda y a\\u00f1adidos\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/karstieltopia.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/#primaryimage\",\"inLanguage\":\"es\",\"url\":\"https:\/\/i1.wp.com\/karstieltopia.com\/wp-content\/uploads\/2016\/02\/constructor.jpg?fit=500%2C374\",\"width\":500,\"height\":374,\"caption\":\"Constructor\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/#webpage\",\"url\":\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/\",\"name\":\"\\u00bfQu\\u00e9 es un constructor? - Karstieltopia\",\"isPartOf\":{\"@id\":\"http:\/\/karstieltopia.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/#primaryimage\"},\"datePublished\":\"2016-02-22T05:48:29+00:00\",\"dateModified\":\"2016-02-26T05:33:30+00:00\",\"author\":{\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/karstieltopia.com\/programacion\/java\/que-es-un-constructor\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\",\"name\":\"karstiel\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6AuIG-BW","_links":{"self":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/2352"}],"collection":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/comments?post=2352"}],"version-history":[{"count":3,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/2352\/revisions"}],"predecessor-version":[{"id":2391,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/2352\/revisions\/2391"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/media\/2347"}],"wp:attachment":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/media?parent=2352"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/categories?post=2352"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/tags?post=2352"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}