{"id":91547,"date":"2022-10-11T23:19:36","date_gmt":"2022-10-12T04:19:36","guid":{"rendered":"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/"},"modified":"2022-10-11T23:19:36","modified_gmt":"2022-10-12T04:19:36","slug":"vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den","status":"publish","type":"post","link":"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/","title":{"rendered":"Vad \u00e4r en konstrukt\u00f6r i Java och hur anv\u00e4nder du den?"},"content":{"rendered":"<div>\n<p>I objektorienterad programmering \u00e4r en konstruktor en speciell funktion som du anropar f\u00f6r att skapa ett objekt.  Konstrukt\u00f6rer har flera unika funktioner som g\u00f6r att de kan arbeta.<\/p>\n<p>I Java d\u00f6per du en konstruktor efter dess klass.  En konstruktor \u00e4r en metod, definierad i den klass den g\u00e4ller.  Java-konstrukt\u00f6rer kan anv\u00e4nda \u00f6verbelastning f\u00f6r att tillhandah\u00e5lla alternativt beteende.  Konstrukt\u00f6rer i Java kan ocks\u00e5 anv\u00e4nda arv f\u00f6r att \u00e5teranv\u00e4nda kod.<\/p>\n<h2 id=\"why-do-you-need-constructors-anyway\"><span class=\"ez-toc-section\" id=\"Varfor_behover_du_konstruktorer\"><\/span>  Varf\u00f6r beh\u00f6ver du konstrukt\u00f6rer?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Konstrukt\u00f6rer \u00e4r en st\u00f6ttepelare i objektorienterad programmering, och Java \u00e4r inget undantag.  Det h\u00e4r exemplet visar hur du kan definiera en grundl\u00e4ggande Circle-klass med en dataegenskap och en metod:<\/p>\n<pre>public class Circle {<br\/>public double radius;<br\/>public double area() { return 3.14159 * radius * radius; }<br\/>}<\/pre>\n<p>Du kan sedan skapa en instans av den h\u00e4r klassen och interagera med den:<\/p>\n<pre>Circle c = new Circle();<br\/>c.radius = 2;<br\/>System.out.println(c.area()); \/\/ 12.56636<\/pre>\n<p>Men det h\u00e4r \u00e4r mindre bekv\u00e4mt och robust \u00e4n det skulle kunna vara.  Det \u00e4r god objektorienterad praxis att kapsla in data och skydda dem fr\u00e5n obeh\u00f6rig \u00e5tkomst:<\/p>\n<pre>public class Circle {<br\/><strong>private<\/strong> double radius;<br\/>public double area() { return 3.14159 * radius * radius; }<br\/><strong>public void setRadius(double r) { radius = r; }<\/strong> <br\/>}<\/pre>\n<p>Nu kan samtalskoden anv\u00e4nda <strong>setRadius<\/strong> metod och inte beh\u00f6va oroa dig f\u00f6r dess implementeringsdetaljer:<\/p>\n<pre>Circle c = new Circle();<br\/><strong>c.setRadius(2);<\/strong><\/pre>\n<p>Konstrukt\u00f6rer erbjuder ett \u00e4nnu b\u00e4ttre s\u00e4tt att leverera data till ett objekt n\u00e4r du skapar det.  De anv\u00e4nds mycket ofta f\u00f6r initiering av egenskaper, s\u00e5som <strong>radie<\/strong> h\u00e4r.<\/p>\n<h2 id=\"examples-of-simple-constructors\"><span class=\"ez-toc-section\" id=\"Exempel_pa_enkla_konstruktorer\"><\/span>  Exempel p\u00e5 enkla konstrukt\u00f6rer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Den mest grundl\u00e4ggande konstruktorn \u00e4r en utan argument, som inte g\u00f6r n\u00e5got:<\/p>\n<pre>public class Circle {<br\/><strong>public Circle() {}<\/strong> <br\/>}<\/pre>\n<p>Om du inte definierar en konstruktor kommer Java att tillhandah\u00e5lla en standard som beter sig p\u00e5 samma s\u00e4tt.<\/p>\n<p>Notera ett par saker:<\/p>\n<ol>    Namnet p\u00e5 konstrukt\u00f6ren matchar klassnamnet.  Denna konstrukt\u00f6r anv\u00e4nder <strong>offentlig<\/strong> \u00e5tkomstmodifierare, s\u00e5 vilken annan kod som helst kan kalla den.  En konstrukt\u00f6r inkluderar inte en returtyp.  Till skillnad fr\u00e5n andra metoder kan konstrukt\u00f6rer inte returnera ett v\u00e4rde.  <\/ol>\n<p>Konstrukt\u00f6rer utf\u00f6r vanligtvis n\u00e5gon form av initiering.  Observera att koden ovan inte initierar radiev\u00e4rdet.  I det h\u00e4r fallet kommer spr\u00e5ket automatiskt att nollst\u00e4lla det.  Den h\u00e4r klassen f\u00f6rv\u00e4ntar sig att en anv\u00e4ndare ska anv\u00e4nda <strong>setRadius()<\/strong>.  F\u00f6r att anv\u00e4nda en mer anv\u00e4ndbar standard \u00e4n 0, kan du tilldela den i konstruktorn:<\/p>\n<pre>public class Circle {<br\/><strong>public Circle() { radius = 1; }<\/strong> <br\/>}<\/pre>\n<p>Cirklar skapade med den h\u00e4r klassen kommer \u00e5tminstone nu att ha ett verkligt omr\u00e5de!  Den som ringer kan fortfarande anv\u00e4nda <strong>setRadius()<\/strong> f\u00f6r att ge en annan radie \u00e4n 1. Men konstrukt\u00f6ren kan vara \u00e4nnu v\u00e4nligare:<\/p>\n<pre>public class Circle {<br\/><strong>public Circle(double r) { radius = r; }<\/strong> <br\/>}<\/pre>\n<p>Nu kan du skapa cirklar med en specifik radie redan fr\u00e5n f\u00f6dseln:<\/p>\n<pre>Circle c = new Circle(2);<br\/>System.out.println(c.area()); <em>\/\/ 12.56636<\/em><\/pre>\n<p>Detta \u00e4r en mycket vanlig anv\u00e4ndning f\u00f6r konstrukt\u00f6rer.  Du kommer ofta att anv\u00e4nda dem f\u00f6r att initiera variabler till parameterv\u00e4rden.<\/p>\n<h2 id=\"constructor-overloading\"><span class=\"ez-toc-section\" id=\"Konstruktor_overbelastning\"><\/span>  Konstrukt\u00f6r \u00f6verbelastning<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Du kan ange mer \u00e4n en konstruktor i en klassdefinition:<\/p>\n<pre>public Circle() { radius = 1; }<br\/>public Circle(double r) { radius = r; }<\/pre>\n<p>Detta ger anropskoden ett val av hur man konstruerar objekt:<\/p>\n<pre>Circle c1 = new Circle(2);<br\/>Circle c2 = new Circle();<br\/>System.out.println(c1.area() + \", \" + c2.area()); \/\/ 12.56636, 3.14159<\/pre>\n<p>Med en lite mer komplex cirkel kan du utforska mer intressanta konstrukt\u00f6rer.  Denna version lagrar sin position:<\/p>\n<pre>public class Circle {<br\/>public double <strong>x, y,<\/strong> radius;<br\/>public Circle() { radius = r; }<br\/>public Circle(double r) { radius = r; }<br\/><strong>public Circle(double x, double y, double r) {<br\/>this.x = x; this.y = y; radius = r;<br\/>}<\/strong> <br\/>public double area() { return 3.14159 * radius * radius; }<br\/>}<\/pre>\n<p>Du kan nu skapa en cirkel utan argument, en enda radie eller x- och y-koordinater l\u00e4ngs radien.  Detta \u00e4r samma typ av \u00f6verbelastning som Java st\u00f6der f\u00f6r alla metoder.<\/p>\n<h2 id=\"constructor-chaining\"><span class=\"ez-toc-section\" id=\"Konstruktorskedja\"><\/span>  Konstrukt\u00f6rskedja<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Vad s\u00e4gs om att skapa en cirkel, baserad p\u00e5 en annan?  Detta skulle ge oss m\u00f6jligheten att enkelt kopiera cirklar.  Observera f\u00f6ljande block:<\/p>\n<pre>public Circle(Circle c) {<br\/>this.x = c.x;<br\/>this.y = c.y;<br\/>this.radius = c.radius;<br\/>}<\/pre>\n<p>Detta kommer att fungera, men det upprepar en del kod i on\u00f6dan.  Eftersom Circle-klassen redan har en konstruktor som hanterar de individuella egenskaperna kan du anropa det ist\u00e4llet med hj\u00e4lp av <strong>detta<\/strong> nyckelord:<\/p>\n<pre>public Circle(Circle c) {<br\/>this(c.x, c.y, c.radius);<br\/>}<\/pre>\n<p>Detta \u00e4r en form av konstrukt\u00f6rskedja, som anropar en konstrukt\u00f6r fr\u00e5n en annan.  Den anv\u00e4nder mindre kod och hj\u00e4lper till att centralisera en operation snarare \u00e4n att duplicera den.<\/p>\n<h2 id=\"calling-the-parent-constructor\"><span class=\"ez-toc-section\" id=\"Ringer_foraldrakonstruktoren\"><\/span>  Ringer f\u00f6r\u00e4ldrakonstrukt\u00f6ren<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Den andra formen av konstruktorkedjning uppst\u00e5r n\u00e4r en konstrukt\u00f6r anropar en konstrukt\u00f6r av sin \u00f6verordnade klass.  Detta kan vara antingen explicit eller implicit.  F\u00f6r att uttryckligen anropa en \u00f6verordnad konstruktor, anv\u00e4nd <strong>super<\/strong> nyckelord:<\/p>\n<pre>super(x, y);<\/pre>\n<p>F\u00f6rest\u00e4ll dig en Shape-klass som fungerar som f\u00f6r\u00e4lder till cirkeln:<\/p>\n<pre>public class Shape {<br\/>double x, y;<br\/>public Shape(double _x, double _y) { x = _x; y = _y; }<br\/>}<\/pre>\n<p>Den hanterar gemensam positionering f\u00f6r alla former eftersom detta \u00e4r funktionalitet som de alla delar.  Nu kan Circle-klassen delegera positionshantering till sin f\u00f6r\u00e4lder:<\/p>\n<pre>public class Circle <strong>extends Shape<\/strong> {<br\/>double radius;<br\/>public Circle(double r) { super(0, 0); radius = r; }<br\/>public Circle(double x, double y, double r) {<br\/><strong>super(x, y);<\/strong> <br\/>radius = r;<br\/>}<br\/>}<\/pre>\n<p>Superklasskonstruktion \u00e4r en mycket viktig aspekt av arv i Java.  Spr\u00e5ket uppr\u00e4tth\u00e5ller det som standard om du inte uttryckligen ringer <strong>super<\/strong> i dina konstrukt\u00f6rer.<\/p>\n<h2 id=\"access-modifiers-on-constructors\"><span class=\"ez-toc-section\" id=\"Atkomstmodifierare_pa_konstruktorer\"><\/span>  \u00c5tkomstmodifierare p\u00e5 konstrukt\u00f6rer<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Konstrukt\u00f6rer kan inkludera en \u00e5tkomstmodifierare i sin signatur.  Liksom andra metoder definierar detta vilka typer av anropare som kan komma \u00e5t konstruktorn:<\/p>\n<pre>public class Test {<br\/>private static Test uniqueInstance = new Test();<br\/><strong>private Test() { }<\/strong> <br\/>public static Test getInstance() {<br\/>return uniqueInstance;<br\/>}<br\/>}<\/pre>\n<p>Det h\u00e4r \u00e4r ett mer komplicerat exempel, s\u00e5 var noga med att f\u00f6rst\u00e5 det:<\/p>\n<p>  Klassen \u00e4r inte abstrakt, s\u00e5 det \u00e4r m\u00f6jligt att instansiera fr\u00e5n den.  Konstrukt\u00f6ren \u00e4r privat s\u00e5 endast den h\u00e4r klassen sj\u00e4lv kan skapa en ny instans.  Via en statisk egenskap och metod exponerar klassen en enda unik instans av sig sj\u00e4lv f\u00f6r anropare.  <\/p>\n<h2 id=\"use-constructors-in-java-to-create-objects\"><span class=\"ez-toc-section\" id=\"Anvand_konstruktorer_i_Java_for_att_skapa_objekt\"><\/span> Anv\u00e4nd konstrukt\u00f6rer i Java f\u00f6r att skapa objekt<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Konstrukt\u00f6rer \u00e4r avg\u00f6rande f\u00f6r objektorienterad programmering.  De l\u00e5ter dig skapa objekt, vilket \u00e4r viktigt!<\/p>\n<p>I Java ser konstrukt\u00f6rer ut som andra metoder och fungerar ungef\u00e4r p\u00e5 samma s\u00e4tt.  Du b\u00f6r komma ih\u00e5g de speciella reglerna kring standardkonstrukt\u00f6rer, \u00f6verbelastning och konstruktorkedja.  Om konstrukt\u00f6rer \u00e4r nya f\u00f6r dig kanske du vill l\u00e4sa om de andra centrala Java-koncepten du b\u00f6r l\u00e4ra dig n\u00e4r du b\u00f6rjar.<\/p>\n<p>    <strong class=\"section-sub-title\">Om f\u00f6rfattaren<\/strong><\/p>\n<p>            <strong class=\"bio-title\">Bobby Jack (65 artiklar publicerade)<br \/><\/strong><\/p>\n<p>Bobby \u00e4r en teknikentusiast som arbetat som mjukvaruutvecklare under de flesta av tv\u00e5 decennier.  Han brinner f\u00f6r spel, arbetar som chefredakt\u00f6r p\u00e5 Switch Player Magazine och \u00e4r f\u00f6rdjupad i alla aspekter av onlinepublicering och webbutveckling.<\/p>\n<p>                            Mer fr\u00e5n Bobby Jack<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Prenumerera_pa_vart_nyhetsbrev\"><\/span>Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>G\u00e5 med i v\u00e5rt nyhetsbrev f\u00f6r tekniska tips, recensioner, free e-b\u00f6cker och exklusiva erbjudanden!<\/p>\n<p>Klicka h\u00e4r f\u00f6r att prenumerera<\/p>\n<\/p><\/div>\n  <div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Varfor_behover_du_konstruktorer\" >Varf\u00f6r beh\u00f6ver du konstrukt\u00f6rer?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Exempel_pa_enkla_konstruktorer\" >Exempel p\u00e5 enkla konstrukt\u00f6rer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Konstruktor_overbelastning\" >Konstrukt\u00f6r \u00f6verbelastning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Konstruktorskedja\" >Konstrukt\u00f6rskedja<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Ringer_foraldrakonstruktoren\" >Ringer f\u00f6r\u00e4ldrakonstrukt\u00f6ren<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Atkomstmodifierare_pa_konstruktorer\" >\u00c5tkomstmodifierare p\u00e5 konstrukt\u00f6rer<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Anvand_konstruktorer_i_Java_for_att_skapa_objekt\" >Anv\u00e4nd konstrukt\u00f6rer i Java f\u00f6r att skapa objekt<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blogging-techies.com\/sw\/vad-ar-en-konstruktor-i-java-och-hur-anvander-du-den\/#Prenumerera_pa_vart_nyhetsbrev\" >Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n ","protected":false},"excerpt":{"rendered":"<p>I objektorienterad programmering \u00e4r en konstruktor en speciell funktion som du anropar f\u00f6r att skapa ett objekt. Konstrukt\u00f6rer har flera unika funktioner som g\u00f6r att de kan arbeta. I Java d\u00f6per du en konstruktor efter dess klass. En konstruktor \u00e4r en metod, definierad i den klass den g\u00e4ller. Java-konstrukt\u00f6rer kan anv\u00e4nda \u00f6verbelastning f\u00f6r att tillhandah\u00e5lla [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":91548,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[5],"tags":[16,24,122,27,6155,45259,26,23],"class_list":["post-91547","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bloggar","tag-anvander","tag-ar","tag-den","tag-hur","tag-java","tag-konstruktor","tag-och","tag-vad"],"_links":{"self":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/91547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/comments?post=91547"}],"version-history":[{"count":0,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/91547\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media\/91548"}],"wp:attachment":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media?parent=91547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/categories?post=91547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/tags?post=91547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}