{"id":417,"date":"2011-11-05T08:23:55","date_gmt":"2011-11-05T06:23:55","guid":{"rendered":"http:\/\/www.kristiansborg.dk\/bibliotek\/?page_id=417"},"modified":"2011-11-05T08:27:19","modified_gmt":"2011-11-05T06:27:19","slug":"kapitel-10-dokumentation-af-kode","status":"publish","type":"page","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/","title":{"rendered":"Kapitel 10 Dokumentation af kode"},"content":{"rendered":"<p>Kode skrevet i et objektorienteret programmeringssprog som Java er let at genbruge. Man kan blot tage klassefilerne fra et projekt og bruge dem direkte i et andet uden at beh\u00f8ve rekompilering. Denne tidsbesparelse kan v\u00e6re mange penge v\u00e6rd p\u00e5 store projekter. Det eneste problem ved denne fremgangsm\u00e5de er, at det kan v\u00e6re sv\u00e6rt at huske, hvordan koden virker. Det kan godt v\u00e6re, at man kan se, at en funktion tager tre tekststrenge som parametre, men hvad hj\u00e6lper det, hvis man ikke aner, hvad de betyder? Problemet er endnu st\u00f8rre, hvis man udvikler frameworks, der skal s\u00e6lges til tredjepart, der slet ikke har noget kendskab til klasserne og deres metoder.<\/p>\n<div style=\"border: 1px solid red; color: red\">\n<b>Du l\u00e6ser en gammel bog<\/b><br \/>\nDen bog, du l\u00e6ser her, er fra 1998, og mange ting kan have \u00e6ndret sig siden da.<br \/>\nVi h\u00e5ber, at du stadig kan finde relevant information i den.<br \/>\nHvis du vil l\u00e6se aktuelle oplysninger om de avancerede dele af Java, anbefaler vi<br \/>\nbogen <a href=\"http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0132354799)\"  target=\"_blank\">Core Java &#8211; Advanced Features<\/a><img decoding=\"async\" src=\"http:\/\/impdk.tradedoubler.com\/imp?type(inv)g(19172914)a(2029446)\" \/>\n<\/div>\n<p>Der er s\u00e5ledes brug for en m\u00e5de at dokumentere koden p\u00e5. Det, der er behov for, er en beskrivelse af pakker, klasser og metoder. For hver metode er det endvidere \u00f8nskeligt, at parametrene er beskrevet.<\/p>\n<p>&nbsp;<\/p>\n<p>Med Java Development Kit f\u00f8lger et program, der kan oprette den slags dokumentation. Det hedder JavaDoc og arbejder ved at l\u00e6se kildeteksten igennem og kigge p\u00e5 de specielle JavaDoc-kommentarer, der kan inds\u00e6ttes. P\u00e5 baggrund af disse oprettes en r\u00e6kke HTML-dokumenter, der indeholder beskrivelser af klasserne og deres metoder. Dokumenterne indeholder ogs\u00e5 henvisninger til superklasser.<\/p>\n<p>&nbsp;<\/p>\n<p>JavaDoc er blandt andet brugt til at generere den beskrivelse af samtlige Java-pakker, der findes p\u00e5 JavaSofts hjemmeside.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1001.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-419\" title=\"1001\" src=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1001.png\" alt=\"\" width=\"480\" height=\"360\" srcset=\"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1001.png 800w, https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1001-300x225.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Figur 10-1: Sun bruger selv JavaDoc til at dokumentere kode.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.<\/p>\n<h1>Mulighederne i JavaDoc<\/h1>\n<p>JavaDoc giver mulighed for at h\u00e5ndtere f\u00f8lgende dokumentation:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Angivelse af klasser og interfaces programm\u00f8rer<\/li>\n<li>Angivelse af klasser og interfaces versionsnumre<\/li>\n<li>Beskrivelse af pakker<\/li>\n<li>Beskrivelse af klasser<\/li>\n<li>Beskrivelse af metoder<\/li>\n<li>Beskrivelse af metoders parametre<\/li>\n<li>Beskrivelse af metoders returv\u00e6rdi<\/li>\n<li>Beskrivelse af metoders exceptions<\/li>\n<li>Henvisning til andre metoder og\/eller klasser<\/li>\n<li>Angivelse af, at en metode eller klasse er for\u00e6ldet.<\/li>\n<li><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Angivelse af dokumentation i kildeteksten<\/h1>\n<p>&nbsp;<\/p>\n<p>Som n\u00e6vnt tidligere skal den dokumentation, JavaDoc skal arbejde p\u00e5, angives i kildeteksten. Det g\u00f8res ved hj\u00e6lp af bestemte kommandoer. Alle kommandoerne skal skrives i kommentarer, s\u00e5 de ikke forstyrrer den rigtige Java-kode. I mods\u00e6tning til almindelige kommentarer, der indledes med \/*, indledes JavaDoc-kommentarer med \/**. De afsluttes ligesom almindelige kommentarer med *\/. Nedenst\u00e5ende eksempel viser, hvordan man kan beskrive en metode i kildeteksten:<\/p>\n<p>&nbsp;<\/p>\n<p>public class Test<\/p>\n<p>{<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Beskrivelse af en metode<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>public void run()<\/p>\n<p>{<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Bem\u00e6rk, at alle linier i JavaDoc-kommentarer indledes med en stjerne. Den tekst, der bare skrives i JavaDoc-kommentaren, vil altid blive regnet for at v\u00e6re beskrivelse af den n\u00e6ste metode. For at angive andre oplysninger, skal man bruge de specielle JavaDoc-parametre. F\u00e6lles for alle parametrene, der ogs\u00e5 skrives i JavaDoc-kommentarer, er, at de indledes med @. Der findes f\u00f8lgende JavaDoc-parametre:<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>@author<br \/>\nNavnet p\u00e5 den eller de programm\u00f8rer, der har skrevet klassen.<\/li>\n<li>@version<br \/>\nKlassens versionsnummer og eventuelt dato.<\/li>\n<li>@param<br \/>\nBeskrivelse af en af parametrene i en metode.<\/li>\n<li>@return<br \/>\nBeskrivelse af en metodes returv\u00e6rdi.<\/li>\n<li>@exception<br \/>\nBeskrivelse af den eller de exceptions, der kan opst\u00e5 ved at bruge metoden.<\/li>\n<li>@see<br \/>\nHenvisning til en anden metode eller klasse.<\/li>\n<li>@since<br \/>\nDen version af produktet, metoden f\u00f8rst optr\u00e5dte i.<\/li>\n<li>@deprecated<br \/>\nAngivelse af at en metode er for\u00e6ldet, samt eventuelt hvilken metode, der skal bruges i stedet.<\/li>\n<\/ul>\n<p>Hvis klassens forfatter er ukendt, b\u00f8r den angives som unascribed. Det vil sige:<\/p>\n<p>\/**<\/p>\n<p>* @author unascribed<\/p>\n<p>*\/<\/p>\n<p>@deprecated bruges, n\u00e5r en metode er blevet for\u00e6ldet og erstattet af en nyere. Den besked, der skrives efter @deprecated, skal beskrive hvorfor funktionen er for\u00e6ldet, samt hvilken funktion man b\u00f8r bruge i stedet. @deprecated b\u00f8r efterf\u00f8lges af en @see, der angiver navnet p\u00e5 den nye metode.<\/p>\n<p>\/**<\/p>\n<p>* Starter udf\u00f8rslen af programmet<\/p>\n<p>*<\/p>\n<p>* @deprecated\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Denne funktion er ALT for langsom. Brug i stedet runMe()<\/p>\n<p>* @see\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 #runMe()<\/p>\n<p>*\/<\/p>\n<p>Hvis metoden ikke l\u00e6ngere er n\u00f8dvendig og derfor ikke er erstattet af en anden funktion, b\u00f8r @deprecated efterf\u00f8lges af No replacement. Der skal i s\u00e5 fald ikke v\u00e6re henvisninger til andre funktioner:<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Starter udf\u00f8rslen af programmet<\/p>\n<p>*<\/p>\n<p>* @deprecated\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 No replacement<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>Ved hj\u00e6lp af @see-parametren er det muligt at lave henvisninger b\u00e5de til klasser og til metoder. Det generelle format for @see er<\/p>\n<p>&nbsp;<\/p>\n<p>@see klasse#metode<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Hvis man vil lave en henvisning til en klasse, kan man n\u00f8jes med at skrive navnet p\u00e5 klassen. Vil man derimod lave en henvisning til en metode, skal b\u00e5de klasse og metodenavn skrives adskilt af en havel\u00e5ge (#). Henviser man til en metode i samme klasse som metoden selv, kan man n\u00f8jes med en havel\u00e5ge og funktionsnavnet. Man kan ogs\u00e5 lave en henvisning til en side, der ikke er genereret af JavaDoc. Det g\u00f8r man ved at skrive henvisningen som HTML-kode. Hvis man vil henvise til et dokument, der ikke findes online \u2013 for eksempel en bog \u2013 kan man g\u00f8re det, ved at angive navnet i anf\u00f8rselstegn. Nedenst\u00e5ende viser forskellige former for henvisninger:<\/p>\n<p>&nbsp;<\/p>\n<p>@see String<\/p>\n<p>@see String#toString<\/p>\n<p>@see #toString<\/p>\n<p>@see &lt;a href = \u201dhttp:\/\/www.javasoft.com\u201d&gt;JavaSoft&lt;\/a&gt;<\/p>\n<p>@see \u201dAvanceret Java-programmering\u201d<\/p>\n<p>&nbsp;<\/p>\n<p>Med tiden forventes det, at @return bliver til @returns, og at @exception bliver til @throws. Dette er endnu ikke sket i Java Development Kit 1.2.<\/p>\n<h2>Organisering af JavaDoc-kommentarer<\/h2>\n<p>&nbsp;<\/p>\n<p>JavaDoc-kommentarer skal altid placeres f\u00f8r den del af programmet, de beskriver. Det vil sige, at kommentarer, der beskriver en klasse, skal placeres f\u00f8r definitionen af klassen, ligesom kommentarer, der beskriver en metode, skal placeres f\u00f8r definitionen af metoden.<\/p>\n<p>&nbsp;<\/p>\n<p>Parametrenes r\u00e6kkef\u00f8lge er heller ikke helt ligegyldig. Generelt b\u00f8r de placeres i samme r\u00e6kkef\u00f8lge, som de er blevet gennemg\u00e5et i dette kapitel. Hvis den samme parameter skal bruges flere gange med forskellige v\u00e6rdier, b\u00f8r f\u00f8lgende regler iagttages:<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Ved flere programm\u00f8rer b\u00f8r programm\u00f8rerne angives i kronologisk orden. Det vil sige, at den programm\u00f8r, der oprettede klassen, st\u00e5r \u00f8verst.<\/li>\n<li>Ved flere parametre til en metode skal der oprettes en @param til hver. Parametrene angives i samme r\u00e6kkef\u00f8lge, som de st\u00e5r i metodens signatur.<\/li>\n<li>Hvis en metode kaster flere exceptions, angives disse med hver deres @exception i alfabetisk r\u00e6kkef\u00f8lge.<\/li>\n<li>Hvis der er flere henvisninger, angives disse med hver deres @see i alfabetisk orden.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>For at g\u00f8re JavaDoc-kommentaren mere overskuelig kan den opdeles i flere blokke. Der kan skabes afstand mellem to blokke i kommentaren ved at lave en linie, der kun indeholder en stjerne.<\/p>\n<h2>Brug af HTML-kode<\/h2>\n<p>Da JavaDoc genererer HTML-dokumenter, kan man ogs\u00e5 bruge HTML-kommandoer i kommentarerne. De bruges pr\u00e6cis som man ville bruge dem i et almindeligt HTML-dokument. Man b\u00f8r dog undlade at bruge &lt;H1&gt; og &lt;H2&gt;, da de bliver brugt af JavaDoc. Til geng\u00e6ld kan man med fordel<\/p>\n<p>&nbsp;<\/p>\n<p>bruge &lt;code&gt;\u2026&lt;\/code&gt; til at omkranse kodeeksempler og &lt;p&gt; til at adskille afsnit i en beskrivelse:<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Denne beskrivelse er temmelig lang<\/p>\n<p>* .<\/p>\n<p>* .<\/p>\n<p>* &lt;p&gt;<\/p>\n<p>* Derfor er det rart, at den er delt i flere afsnit<\/p>\n<p>*<\/p>\n<p>*<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>public class test<\/p>\n<p>{<\/p>\n<p>\u2026<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<h1>Brug af JavaDoc-programmet<\/h1>\n<p>&nbsp;<\/p>\n<p>N\u00e5r kildeteksten er dokumenteret, beh\u00f8ver man blot at bruge JavaDoc-programmet for at f\u00e5 genereret specifikationerne i HTML-format. JavaDoc-programmet ligger i bin-biblioteket i Java-installationen. Programmet har f\u00f8lgende syntaks:<\/p>\n<p>&nbsp;<\/p>\n<p>javadoc [-options] fil|pakke<\/p>\n<p>&nbsp;<\/p>\n<p>Som det ses, kan man v\u00e6lge at generere dokumentation for en enkelt fil eller for en hel pakke. For at give brugeren mulighed for f\u00e5 dokumentationen genereret pr\u00e6cis, som han vil have den, er det muligt at angive en r\u00e6kke options.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>-public<br \/>\nAngiver, at kun public klasser, metoder og attributter vises.<br \/>\n-protected<br \/>\nAngiver, at kun public eller protected klasser, metoder og attributter vises. Angives ingen options anvendes denne.<br \/>\n-package<br \/>\nAngiver, at kun pakker samt public eller protected klasser, metoder og attributter vises.<br \/>\n-private<br \/>\nAngiver, at alle klasser og alle metoder og attributter vises.<br \/>\n-J<em>flag<\/em><br \/>\nOverf\u00f8rer <em>flag <\/em>direkte til runtime-systemet.<br \/>\n-encoding <em>navn<br \/>\n<\/em>Angiver den m\u00e5de, kildeteksterne er kodet p\u00e5.<br \/>\n-docencoding <em>navn<\/em><em><br \/>\n<\/em>Angiver den m\u00e5de, HTML-filerne skal kodes p\u00e5.<br \/>\n-version<br \/>\nAngiver, at @version-parametre skal medtages. Angives \u2013version ikke, bliver disse udeladt.<\/li>\n<li><\/li>\n<li>-author<br \/>\nAngiver, at @author-parametre skal medtages. Angives \u2013author ikke, bliver disse udeladt.<br \/>\n-noindex<br \/>\nAngiver, at der ikke skal oprettes en liste over pakker.<br \/>\n-notree<br \/>\nAngiver, at der ikke skal oprettes en oversigt over klasser og interfaces.<br \/>\n-d <em>bibliotek<br \/>\n<\/em>Angiver det bibliotek, HTML-filerne skal gemmes i. Biblioteket kan angives som en absolut eller en relativ sti.<br \/>\n-verbose<br \/>\nAngiver, at JavaDoc-programmet skal generere mere output end s\u00e6dvanligt. Angives<br \/>\n-verbose ikke, vises kun en besked pr. fil. Hvis \u2013verbose angives, bliver det derudover ogs\u00e5 vist, hvor mange millisekunder, der er blevet brugt p\u00e5 at behandle hver java-fil.<br \/>\n-sourcepath <em>sti<\/em><br \/>\nAngiver den sti, der skal s\u00f8ges efter java-filer i. Hvordan stien angives afh\u00e6nger af, om man angiver java-filer eller pakker som parameter. N\u00e5r man angiver pakker, skal sourcepath v\u00e6re stien til den pakke, der ligger \u00f8verst i hierakiet. Hvis man vil dokumentere en pakke, der hedder java.tree, der ligger i biblioteket<br \/>\n\\prog\\java\\tree\\*.java<br \/>\nskal sourcepath s\u00e6ttes til<br \/>\n-sourcepath \\prog<br \/>\nN\u00e5r der genereres dokumentation for enkelte klasser, skal sourcepath angive det bibliotek, java-filerne ligger i. Det vil alts\u00e5 sige, at hvis man vil have genereret dokumentation for filen<br \/>\n\\prog\\java\\tree\\Tree.java<br \/>\nskal sourcepath s\u00e6ttes til<br \/>\n-sourcepath \\prog\\java\\tree<br \/>\nDet er ikke n\u00f8dvendigt at angive en sourcepath, hvis man starter JavaDoc-programmet fra det bibliotek, man ville have angivet som sourcepath.<br \/>\n-classpath <em>sti<br \/>\n<\/em>Som regel er det ikke n\u00f8dvendigt at bruge \u2013classpath. Hvis man vil angive placeringen af de java-filer, der skal dokumenteres, skal man bruge \u2013sourcepath i stedet (se ovenst\u00e5ende).<br \/>\nStien angivet efter \u2013classpath, angiver placeringen af de klassefiler, JavaDoc-programmet skal bruge. Hvis \u2013sourcepath ikke er angivet, angiver stien ogs\u00e5 placeringen af de filer, der skal dokumenteres.<br \/>\nAngives \u2013classpath ikke, s\u00e6ttes det til det aktuelle bibliotek plus de biblioteker, der r angives i CLASSPATH-variablen.<br \/>\n-nodeprecated<br \/>\nAngiver, at elementer markeret med @deprecated-parametren skal udelades.<br \/>\noverview <em>sti<br \/>\n<\/em>L\u00e6ser oversigt over dokumentationen fra en HTML-fil.<br \/>\nnodeprecatedlist<br \/>\nAngiver, at der ikke skal oprettes en oversigt over elementer markeret med @deprecated-parametren.<\/li>\n<li>-linkall<br \/>\nAngiver, at der skal oprettes henvisninger til klasser og pakker, selvom der ikke bliver genereret dokumentation for dem i denne omgang. Denne option g\u00f8r det muligt at generere en samlet dokumentation for flere projekter ad flere gange. Det g\u00f8r det ogs\u00e5 muligt at n\u00f8jes med at opdatere en del af dokumentationen, hvis man kun foretager \u00e6ndringer i nogle f\u00e5 klasser.<\/li>\n<li><\/li>\n<li>-breakindex<br \/>\nAngiver, at indeksfilen skal opdeles i flere filer. Hvis man genererer dokumentation for mange klasser, kan indeksfilen blive s\u00e5 stor, at den er tung at hente over Internet. I disse tilf\u00e6lde kan det anbefales, at bruge \u2013breakindex til oprette en indeksfil til hvert bogstav.<\/li>\n<li>-frame<br \/>\nAngiver, at dokumentationen skal organiseres ved hj\u00e6lp af HTML-frames. Med denne option sat, bliver der oprettet en frame med en oversigt over samtlige pakker. Der bliver ogs\u00e5 oprettet en frame med en oversigt over de klasser, der findes i pakken, mens hovedparten af vinduet bruges til en beskrivelse af den aktuelle klasse.<\/li>\n<li>-nohelp<br \/>\nAngiver, at der ikke skal oprettes et link til en hj\u00e6lpeside. Hj\u00e6lpesiden bliver ikke automatisk genereret af JavaDoc. Angives andet ikke med \u2013helpfile hedder hj\u00e6lpefilen help.html.<\/li>\n<li>-title <em>html-kode<br \/>\n<\/em>Angiver et stykke HTML-kode, der skal inds\u00e6ttes \u00f8verst p\u00e5 hver side.<\/li>\n<li>-footer <em>html-kode<br \/>\n<\/em>Angiver et stykke HTML-kode, der skal inds\u00e6ttes som bundtekst p\u00e5 hver side.<\/li>\n<li>-header <em>html-kode<\/em><br \/>\nAngiver et stykke HTML-kode, der skal inds\u00e6ttes som toptekst p\u00e5 hver side.<\/li>\n<li>-bottom <em>html-kode<\/em><em><br \/>\n<\/em>Angiver et stykke HTML-kode, der skal inds\u00e6ttes nederst p\u00e5 hver side.<\/li>\n<li>-helpfile <em>fil<\/em><em><br \/>\n<\/em>Angiver navnet p\u00e5 den fil, der skal bruges som hj\u00e6lpefil. Angives intet navn anvendes help.html. Hvis der slet ikke skal laves en henvisning til en hj\u00e6lpefil, skal man bruge \u2013nohelp.<\/li>\n<\/ul>\n<p><script type=\"text\/javascript\">\nvar uri = 'http:\/\/impdk.tradedoubler.com\/imp?type(js)g(19172330)a(2029446)' + new String (Math.random()).substring (2, 11);\ndocument.write('<sc'+'ript type=\"text\/javascript\" src=\"'+uri+'\" charset=\"\"><\/sc'+'ript>');\n<\/script><br \/>\n&nbsp;<\/p>\n<h1>Retningslininer for dokumentation<\/h1>\n<p>&nbsp;<\/p>\n<p>Form\u00e5let med dokumentationen er, at andre skal kunne bruge ens klasser, og at man selv kan bruge dem, ogs\u00e5 et par dage efter man har programmeret dem. Derfor er det en fordel, hvis man formulerer dokumentationen s\u00e5 klart som muligt. Det vil ogs\u00e5 lette arbejdet med at s\u00e6tte sig ind i flere klassers funktionalitet, hvis alle klasser er beskrevet p\u00e5 nogenlunde samme m\u00e5de. St\u00f8rre projektgrupper b\u00f8r have retningslinier for udarbejdelse af dokumentationen \u2013 det er vigtigt i retningslinierne at sikre, at dokumentationen bliver fyldestg\u00f8rende, men samtidig skal man v\u00e6re sikker p\u00e5, at det ikke bliver s\u00e5 kompliceret og tidskr\u00e6vende at skrive dokumentationen, at folk simpelthen lader v\u00e6re. Dette afsnit beskriver, hvordan s\u00e5danne retningslinier kan se ud.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2>Et eksempel p\u00e5 retningslinier<\/h2>\n<p>&nbsp;<\/p>\n<ul>\n<li>Den f\u00f8rste s\u00e6tning i dokumentet b\u00f8r v\u00e6re en opsummering, der indeholder en kort men komplet beskrivelse af API\u2019et. Denne s\u00e6tning afsluttes ved det f\u00f8rste punktum eller tvungne linieskift.JavaDoc kopierer denne f\u00f8rste s\u00e6tning til starten af dokumentet, s\u00e5 derfor er det vigtigt, at den er kort, men pr\u00e6cis. Det er ogs\u00e5 vigtigt, at kommentarerne g\u00f8r det muligt at skelne mellem overloadede metoder (metoder med samme navn, men med forskellig signatur).<\/li>\n<li>N\u00f8gleord og navne i API\u2019et omgives af &lt;code&gt;\u2026&lt;\/code&gt;.\u00a0 Navne p\u00e5 parametre angiver umiddelbart efter @param, skal ikke omgives af &lt;code&gt;\u2026&lt;\/code&gt;. Af de elementer, der skal markeres med &lt;code&gt;\u2026&lt;\/code&gt;, kan blandt andet f\u00f8lgende n\u00e6vnes:\n<ul>\n<li>Java n\u00f8gleord (void, class, osv.)<\/li>\n<li>Navne p\u00e5 pakker (java.lang, java.awt, osv.)<\/li>\n<li>Navne p\u00e5 klasser (String, Frame, osv.)<\/li>\n<li>Navne p\u00e5 metoder (main, setVisible, osv.)<\/li>\n<li>Navne p\u00e5 interfaces (Runnable, Remote, osv.)<\/li>\n<li>Navne p\u00e5 variable (count, visible, osv.)<\/li>\n<li>Navne p\u00e5 argumenter (args, title, osv.)<\/li>\n<li>Programeksempler.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li>Generelt bruges ikke parenteser efter navne p\u00e5 metoder og constructors. Det vil alts\u00e5 sige, at man skriver getName i stedet getName(). getName() bruges kun, hvis man vil understrege, at det er den getLabel-funktion, der ingen parametre tager, man refererer til.<\/li>\n<li>Hvis det er muligt, s\u00e5 brug udtryk i stedet for hele s\u00e6tninger, hvis meningen forbliver den samme. For eksempel@param title\u00a0\u00a0\u00a0 den titel, vinduet skal havei stedet for\n<p>@param title\u00a0\u00a0\u00a0 Title angiver navnet p\u00e5 vinduet.<\/li>\n<li>Man b\u00f8r bruge tredje person i stedet for anden person. For eksempelS\u00e6tter dette vindues titeli stedet for\n<p>S\u00e6t vinduets titel<\/li>\n<li>Da metoder angiver en handling, b\u00f8r beskrivelsen af dem starte med et udsagnsord. Dette inspirerer ogs\u00e5 folk til at bruge udtryk i stedet for hele s\u00e6tninger. Det vil sige, atS\u00e6tter dette vindues titel<br \/>\ner at foretr\u00e6kke, fremfor<br \/>\nDenne metode s\u00e6tter titlen p\u00e5 dette vindue.<\/li>\n<li>Ved beskrivelser af klasser, interfaces og felter, kan man undlade grundledet og i stedet bare beskrive objektet. For eksempel<br \/>\nEn knap<br \/>\ni stedet for<br \/>\nDette element er en knap.<\/li>\n<li>Mange funktionsnavne forklarer sig selv. I disse tilf\u00e6lde b\u00f8r man tilstr\u00e6be at beskrivelsen af funktionerne ikke bare gentager funktionsnavnet i en s\u00e6tning. For eksempel er beskrivelsen\/**<br \/>\n* S\u00e6tter vinduets titel<br \/>\n*<br \/>\n* @param title\u00a0\u00a0\u00a0 vinduets titel<br \/>\n* \/&nbsp;<\/p>\n<p>public void setWindowTitle (String title) { \u2026 }<\/p>\n<p>ikke meget v\u00e6rd. I stedet b\u00f8r man tilf\u00f8je noget information, man ikke umiddelbart kan se ud af signaturen:<\/li>\n<li> \/**<br \/>\n* S\u00e6tter en brugerdefineret titel. Titlen vises i vinduets<br \/>\n* titellinie.<br \/>\n* Indtil denne metode kaldes, er titlen \u201dJava vinduer\u201d.<br \/>\n*<br \/>\n* @param titel\u00a0\u00a0\u00a0 Den tekst, der skal skrives i titellinien.<br \/>\n* Hvis &lt;code&gt;null&lt;\/code&gt;angives \u00e6ndres titlen ikke.<br \/>\n*\/<\/li>\n<li>Udtryk, der bruges i stedet for hele s\u00e6tninger, skal ikke starte med stort bogstav og skal heller ikke afsluttes med et punktum:@param x\u00a0\u00a0\u00a0 x-koordinaten.<\/li>\n<li>S\u00e6tninger skal starte med et stort bogstav og skal ogs\u00e5 afsluttes med et punktum.<\/li>\n<li>Hvis en beskrivelse best\u00e5r af flere s\u00e6tninger, skal de generelle regler om tegns\u00e6tning benyttes.<\/li>\n<li>Hvis flere udtryk benyttes skal de adskilles med semikolon.<\/li>\n<li>Hvis man b\u00e5de benytter et udtryk og en s\u00e6tning, skal udtrykket ikke starte med stort, men skal afsluttes med et punktum for at adskille det fra s\u00e6tningen. S\u00e6tningen startes med stort begyndelsesbogstav og afsluttes med punktum.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1>Et eksempel<\/h1>\n<p>&nbsp;<\/p>\n<p>Dette afsnit vil vise et eksempel p\u00e5 brugen af JavaDoc. Eksemplet tager udgangspunkt i en graph-pakke, der indeholder forskellige grafiske klasser. I dette eksempel er klassen\u00a0 PieChart vist. Nedenfor er JavaDoc-koden til dokumentation af klassen vist:<\/p>\n<p>package graph;<\/p>\n<p>import java.util.Vector;<\/p>\n<p>import java.awt.Graphics;<\/p>\n<p>\/**<\/p>\n<p>* PieChart-klassen definerer et cirkeldiagram. Cirkeldiagrammet<\/p>\n<p>* er en cirkel, der er inddelt i skiver, hvor hver skive har en<\/p>\n<p>* st\u00f8rrelse svarende til den tilknyttede v\u00e6rdi.<\/p>\n<p>* &lt;p&gt;<\/p>\n<p>* Grafen kan \u2013 men beh\u00f8ver ikke at \u2013 have et 3D-udseende.<\/p>\n<p>*<\/p>\n<p>* @author\u00a0\u00a0\u00a0 Kristian Hansen<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>public class PieChart<\/p>\n<p>{<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Default constructor. Opretter et cirkeldiagram uden 3D-udseende.<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>public PieChart()<\/p>\n<p>{<\/p>\n<p>\/\/ &#8230;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Constructor, der tillader klienten at angive, om grafen skal have<\/p>\n<p>* et 3D-useende.<\/p>\n<p>*<\/p>\n<p>* @param is3D\u00a0\u00a0\u00a0 angiver om grafen skal have et 3D-udseende.<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>public PieChart (boolean is3D)<\/p>\n<p>{<\/p>\n<p>\/\/ &#8230;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Angiver de v\u00e6rdier, der bruges til at tegne grafen. V\u00e6rdierne gemmes i<\/p>\n<p>* en &lt;code&gt;Vector&lt;\/code&gt; og skal kunne castes til en &lt;code&gt;Integer&lt;\/code&gt;.<\/p>\n<p>*<\/p>\n<p>* @param values\u00a0\u00a0\u00a0 de v\u00e6rdier, der bruges, n\u00e5r grafen tegnes.<\/p>\n<p>*<\/p>\n<p>* @see java.lang.Integer<\/p>\n<p>* @see java.util.Vector<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>public void setValues (Vector values)<\/p>\n<p>{<\/p>\n<p>\/\/ &#8230;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* Tegner grafen p\u00e5 det angivne &lt;code&gt;Graphics&lt;\/code&gt; object.<\/p>\n<p>* Opdelingen af grafen bestemmes p\u00e5 baggrund af de v\u00e6rdier, der er angivet<\/p>\n<p>* med &lt;code&gt;setValues&lt;\/code&gt;-metoden.<\/p>\n<p>*<\/p>\n<p>* @param g\u00a0\u00a0\u00a0 Det &lt;code&gt;Graphics&lt;\/code&gt;-objekt, der skal tegnes p\u00e5<\/p>\n<p>*<\/p>\n<p>* @exception\u00a0 NoValuesException\u00a0\u00a0\u00a0 opst\u00e5r, hvis denne metode kaldes<\/p>\n<p>*\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 f\u00f8r &lt;code&gt;setValues&lt;\/code&gt;.<\/p>\n<p>* @see java.awt.Graphics<\/p>\n<p>* @see #setValues<\/p>\n<p>*\/<\/p>\n<p>&nbsp;<\/p>\n<p>public void draw (Graphics g)<\/p>\n<p>{<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ &#8230;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Dokumentationen er blevet genereret ved hj\u00e6lp af nedenst\u00e5ende kommando:<\/p>\n<p>&nbsp;<\/p>\n<p>javadoc -sourcepath . -d docs\\ -verbose -author -classpath %classpath% -J-mx32m -J-ms32m graph<\/p>\n<p>&nbsp;<\/p>\n<p>Kommandoen bruger det aktuelle katalog som sourcepath og kataloget docs\\ som output-katalog. For at kunne referere til klasser udenfor pakken, angives ogs\u00e5 classpath\u2019en. For at sikre at programmet har hukommelse nok at arbejde med, bruges \u2013J til at reservere 32 MB.<\/p>\n<p>&nbsp;<\/p>\n<p>Kommandoen resulterer i nogle HTML-dokumenter, der ser s\u00e5ledes ud:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1002.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-418\" title=\"1002\" src=\"http:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1002.png\" alt=\"\" width=\"480\" height=\"360\" srcset=\"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1002.png 800w, https:\/\/www.kristiansborg.dk\/bibliotek\/wp-content\/uploads\/2011\/11\/1002-300x225.png 300w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Figur 10-2: Dokumentationen til graph-eksemplet.<\/p>\n<p>&nbsp;<\/p>\n<h1>Sammenfatning<\/h1>\n<p>I dette kapitel er det blevet gennemg\u00e5et, hvordan man kan bruge programmet JavaDoc til at udarbejde dokumentation af et program. Mulighederne i JavaDoc er blevet beskrevet, og det er ligeledes gennemg\u00e5et, hvordan man skal angive kommentarerne i kildeteksten.<\/p>\n<h1>FAQ<\/h1>\n<p>&nbsp;<\/p>\n<p>Jeg har installeret JDK 1.2, men vil gerne generere JavaDoc-filer, der ligner de fra JKD1.2. Beh\u00f8ver jeg at installere JDK 1.1 for at kunne det?<\/p>\n<p>&nbsp;<\/p>\n<p>Nej, men man kan ikke bruge den JavaDoc, der ligger i bin-biblioteket. I stedet skal programmet OldJavaDoc bruges. Det er en kopi af det JavaDoc-program, der fulgte med tidligere versioner af JDK. Det betyder ogs\u00e5, at man skal v\u00e6re opm\u00e6rksom p\u00e5, at det ikke er alle de options, der er blevet gennemg\u00e5et i dette kapitel, der er implementeret.<\/p>\n<p>&nbsp;<\/p>\n<p><em>N\u00e5r jeg bruger OldJavaDoc<\/em><em> eller JavaDoc fra JDK 1.1, mangler der nogle billeder i dokumentationen. Hvorfor det, og hvor finder jeg billederne?<\/em><\/p>\n<p><em> <\/em><\/p>\n<p>JavaDoc fra JDK version 1.2 benytter sig af tabeller og forskellige skrifttyper for at lave et p\u00e6nt layout. I tidligere version blev gif-billeder<\/p>\n<p>&nbsp;<\/p>\n<p>brugt til at opn\u00e5 denne effekt. Disse billeder, bliver ikke leveret sammen med JavaDoc-programmet, men har man downloadet Suns dokumentation til den p\u00e5g\u00e6ldende JDK, kan man finde dem i biblioteket docs\\api\\images\\.<\/p>\n<p>&nbsp;<\/p>\n<p>Jeg har lige genereret dokumentation med JavaDoc, men n\u00e5r jeg klikker p\u00e5 en henvisning til en af klasserne i JDK, f\u00e5r jeg at vide, at den ikke kan finde filen. Hvad er der galt?<\/p>\n<p>&nbsp;<\/p>\n<p>JavaDoc antager, at al dokumentationen \u2013 det vil sige alle HTML-dokumenterne \u2013 befinder sig i det samme bibliotek. Er det ikke tilf\u00e6ldet, kan programmet ikke finde ud af at lave henvisningerne rigtigt.<\/p>\n<p>&nbsp;<\/p>\n<p>Med JavaDoc fra JDK version 1.0 eller 1.1 er l\u00f8sningen p\u00e5 problemet at generere dokumentationen for alle pakker samtidigt \u2013 det tager et stykke tid og kr\u00e6ver, at man har kildeteksten til alle klasser, men er desv\u00e6rre den eneste udvej.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Bruger man i stedet JavaDoc fra JDK version 1.2, kan man ved hj\u00e6lp af options som \u2013linkall og \u2013overview angive, hvordan JavaDoc skal h\u00e5ndtere henvisninger til dokumentation, der er genereret tidligere.<\/p>\n<p>&nbsp;<\/p>\n<p>Jeg kan ikke f\u00e5 JavaDoc til at generere dokumentation for al kildeteksten? Hvad kan jeg g\u00f8re for at f\u00e5 det til at virke?<\/p>\n<p><em> <\/em><\/p>\n<p>Hvis du bruger JavaDoc fra JDK version 1.1, kan det skyldes, at der er brugt navne, der indeholder understregninger eller andre tegn, der ligger udenfor A-Z, a-z, 0-9 og punktum.<\/p>\n<p>&nbsp;<\/p>\n<p>Jeg f\u00e5r en fejlmeddelelse om, at der ikke er tilstr\u00e6kkeligt hukommelse. Hvor meget hukommelse kr\u00e6ver JavaDoc?<\/p>\n<p><em> <\/em><\/p>\n<p>Sun siger, at JavaDoc version 1.1 brugte 40 MB til at generere dokumentationen til JDK version 1.1, mens JavaDoc version 1.2 brugte 70 MB til at generere dokumentationen til JDK version 1.2. Ved hj\u00e6lp af \u2013J kommandoen er det muligt at angive, hvor meget hukommelse JavaDoc skal reservere. Vil man reservere 40 MB, skal man skrive<\/p>\n<p>&nbsp;<\/p>\n<p>Javadoc \u2013Jms39m \u2013Jmx40m<\/p>\n<p>&nbsp;<\/p>\n<p>Der er en fejl i JavaDoc version 1.1.2, der g\u00f8r, at ms skal v\u00e6re mindre end (ikke lig med) mx. Denne fejl er rettet i version 1.2.<\/p>\n<p>&nbsp;<\/p>\n<p><em>JavaDoc version 1.1 ser ud til at blive k\u00f8rt succesfuldt, men indeks-siden er tom. Hvad sker der?<\/em><\/p>\n<p><em> <\/em><\/p>\n<p>Dette skyldes en fejl i JavaDoc version 1.1, og problemet opst\u00e5r ikke i JavaDoc 1.2. Den tomme indeksside opst\u00e5r, n\u00e5r man har et element i kildetekst, der starter med en understregning. For eksempel<\/p>\n<p>&nbsp;<\/p>\n<p>public class MinKlasse<\/p>\n<p>{<\/p>\n<p>protected int _integer;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>Problemet kan ogs\u00e5 opst\u00e5, hvis man har en klasse, der kun indeholder statisk kode. For eksempel<\/p>\n<p>&nbsp;<\/p>\n<p>public class EndnuEnKlasse<\/p>\n<p>{<\/p>\n<p>static<\/p>\n<p>{<\/p>\n<p>System.out.print(&#8220;Indl\u00e6ser\u2026&#8221;);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>I s\u00e5 fald har klassen ingen signatur, og det forvirrer JavaDoc.<\/p>\n<p>&nbsp;<\/p>\n<div style=\"border: 1px solid red; color: red\">\n<b>Du l\u00e6ser en gammel bog<\/b><br \/>\nDen bog, du l\u00e6ser her, er fra 1998, og mange ting kan have \u00e6ndret sig siden da.<br \/>\nVi h\u00e5ber, at du stadig kan finde relevant information i den.<br \/>\nHvis du vil l\u00e6se aktuelle oplysninger om de avancerede dele af Java, anbefaler vi<br \/>\nbogen <a href=\"http:\/\/clk.tradedoubler.com\/click?p(197229)a(2029446)g(19172914)url(http:\/\/www.adlibris.com\/dk\/product.aspx?isbn=0132354799)\"  target=\"_blank\">Core Java &#8211; Advanced Features<\/a><img decoding=\"async\" src=\"http:\/\/impdk.tradedoubler.com\/imp?type(inv)g(19172914)a(2029446)\" \/>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Kode skrevet i et objektorienteret programmeringssprog som Java er let at genbruge. Man kan blot tage klassefilerne fra et projekt og bruge dem direkte i et andet uden at beh\u00f8ve rekompilering. Denne tidsbesparelse kan v\u00e6re mange penge v\u00e6rd p\u00e5 store projekter. Det eneste problem ved denne fremgangsm\u00e5de er, at det kan v\u00e6re sv\u00e6rt at huske, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":332,"menu_order":100,"comment_status":"closed","ping_status":"open","template":"","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"class_list":["post-417","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"keywords\" content=\"java,javadoc,doclet,dokumentation\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Biblioteket | Samling af artikler og b\u00f8ger\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Dokumentation - JavaDoc | Biblioteket\" \/>\n\t\t<meta property=\"og:description\" content=\"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2011-11-05T06:23:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2011-11-05T06:27:19+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Dokumentation - JavaDoc | Biblioteket\" \/>\n\t\t<meta name=\"twitter:description\" content=\"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-10-dokumentation-af-kode\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"name\":\"B\\u00f8ger\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"position\":2,\"name\":\"B\\u00f8ger\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/#listItem\",\"name\":\"Avanceret Java-programmering\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/#listItem\",\"position\":3,\"name\":\"Avanceret Java-programmering\",\"item\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-10-dokumentation-af-kode\\\/#listItem\",\"name\":\"Kapitel 10 Dokumentation af kode\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/#listItem\",\"name\":\"B\\u00f8ger\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-10-dokumentation-af-kode\\\/#listItem\",\"position\":4,\"name\":\"Kapitel 10 Dokumentation af kode\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/#listItem\",\"name\":\"Avanceret Java-programmering\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-10-dokumentation-af-kode\\\/#webpage\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-10-dokumentation-af-kode\\\/\",\"name\":\"Dokumentation - JavaDoc | Biblioteket\",\"description\":\"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\\u00e6ttes i kildeteksten.\",\"inLanguage\":\"da-DK\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/b%c3%b8ger\\\/avanceret-java-programmering\\\/kapitel-10-dokumentation-af-kode\\\/#breadcrumblist\"},\"datePublished\":\"2011-11-05T08:23:55+02:00\",\"dateModified\":\"2011-11-05T08:27:19+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#website\",\"url\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/\",\"name\":\"Biblioteket\",\"description\":\"Samling af artikler og b\\u00f8ger\",\"inLanguage\":\"da-DK\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.kristiansborg.dk\\\/bibliotek\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Dokumentation - JavaDoc | Biblioteket","description":"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.","canonical_url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/","robots":"max-image-preview:large","keywords":"java,javadoc,doclet,dokumentation","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","position":1,"name":"Home","item":"https:\/\/www.kristiansborg.dk\/bibliotek","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","name":"B\u00f8ger"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","position":2,"name":"B\u00f8ger","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/#listItem","name":"Avanceret Java-programmering"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/#listItem","position":3,"name":"Avanceret Java-programmering","item":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/#listItem","name":"Kapitel 10 Dokumentation af kode"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/#listItem","name":"B\u00f8ger"}},{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/#listItem","position":4,"name":"Kapitel 10 Dokumentation af kode","previousItem":{"@type":"ListItem","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/#listItem","name":"Avanceret Java-programmering"}}]},{"@type":"Organization","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/"},{"@type":"WebPage","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/#webpage","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/","name":"Dokumentation - JavaDoc | Biblioteket","description":"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.","inLanguage":"da-DK","isPartOf":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website"},"breadcrumb":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/#breadcrumblist"},"datePublished":"2011-11-05T08:23:55+02:00","dateModified":"2011-11-05T08:27:19+02:00"},{"@type":"WebSite","@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#website","url":"https:\/\/www.kristiansborg.dk\/bibliotek\/","name":"Biblioteket","description":"Samling af artikler og b\u00f8ger","inLanguage":"da-DK","publisher":{"@id":"https:\/\/www.kristiansborg.dk\/bibliotek\/#organization"}}]},"og:locale":"da_DK","og:site_name":"Biblioteket | Samling af artikler og b\u00f8ger","og:type":"article","og:title":"Dokumentation - JavaDoc | Biblioteket","og:description":"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.","og:url":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/","article:published_time":"2011-11-05T06:23:55+00:00","article:modified_time":"2011-11-05T06:27:19+00:00","twitter:card":"summary","twitter:title":"Dokumentation - JavaDoc | Biblioteket","twitter:description":"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten."},"aioseo_meta_data":{"post_id":"417","title":"Dokumentation - JavaDoc | #site_title","description":"I dette kapitel beskrives, hvordan JavaDoc bruges, og hvordan JavaDoc-kommentarer inds\u00e6ttes i kildeteksten.","keywords":[{"label":"Java","value":"Java"},{"label":"JavaDoc","value":"JavaDoc"},{"label":"Doclet","value":"Doclet"},{"label":"Dokumentation","value":"Dokumentation"}],"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"location":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2020-12-21 06:59:15","updated":"2025-06-04 02:18:22","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/\" title=\"B\u00f8ger\">B\u00f8ger<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/\" title=\"Avanceret Java-programmering\">Avanceret Java-programmering<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tKapitel 10 Dokumentation af kode\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.kristiansborg.dk\/bibliotek"},{"label":"B\u00f8ger","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/"},{"label":"Avanceret Java-programmering","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/"},{"label":"Kapitel 10 Dokumentation af kode","link":"https:\/\/www.kristiansborg.dk\/bibliotek\/b%c3%b8ger\/avanceret-java-programmering\/kapitel-10-dokumentation-af-kode\/"}],"_links":{"self":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/417","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/comments?post=417"}],"version-history":[{"count":5,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/417\/revisions"}],"predecessor-version":[{"id":424,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/417\/revisions\/424"}],"up":[{"embeddable":true,"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/pages\/332"}],"wp:attachment":[{"href":"https:\/\/www.kristiansborg.dk\/bibliotek\/wp-json\/wp\/v2\/media?parent=417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}