1 / 15

Effective Java items

Effective Java items. Orange gruppe Thuy , Janne, Mads T.P., Oliver og Sebastian. Item 22 - Favor static members classes over nonstatic 1/2.

hamlin
Download Presentation

Effective Java items

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian

  2. Item 22 - Favor static members classes over nonstatic 1/2 • Item 22 diskuterer hvornår og hvilke af de 4 forskellige typer nestedclasses man skal bruge og at man generelt burde foretrække static over nonstatic. • De 4 typer: • Staticmemberclasses • Nonstaticmemberclasses • Anonymousclasses • Local classes.

  3. Item 22 - Favor static members classes over nonstatic2/2 • Staticmemberclasses • Bruges til at være en “hjælper” klasse, som er til gavn i forhold til sin ydre klasse. Den har ikke brug for adgang til sin ydre klasse og spilder ikke plads på at have en ekstra og unødig reference til dens ydre klasse, f.eks: public classNestedClassTip {    private Stringname = "instancename";    private staticStringstaticName = "staticname";    public staticvoidmain(Stringargs[]) {NestedClassTipnt = new NestedClassTip();NestedClassTip.NestedOnenco = nt.newNestedOne();NestedClassTip.NestedTwonct = new NestedClassTip.NestedTwo();}classNestedOne {NestedOne() {System.out.println(name);System.out.println(staticName);        }}staticclassNestedTwo {NestedTwo() {System.out.println(staticName);        }    }}

  4. Item 30 – Brug enums i stedet for int konstanter 1/4 • I gamle dage… • Nu bruger man Enums Public static final int SEASON_WINTER = 0; Public static final int SEASON_SPRING = 1; Public static final int SEASON_SUMMER = 2; Public static final int SEASON_FALL = 3; public enum Seasons { WINTER, SPRING, SUMMER, FALL; }

  5. Item 30 – Brug enums i stedet for int konstanter 2/4 • Enum-værdier med forskelligadfærderikkegodt public enumTrafficLight{ RED, YELLOW, GREEN; void light(){ switch(this){ case RED: stop(); case YELLOW: lowerSpeed(); case GREEN: go(); } throw new AssertionError(“unknown color: ”+this); } }

  6. Item 30 – Brug enums i stedet for int konstanter 3/4 • Brug i stedet konstant-specifik metodeimplementationer public enumTrafficLight{ RED{ void light(){ stop(); } }, YELLOW{ void light(){ lowerSpeed(); } }, GREEN{ void light(){ go(); } }; abstract void light(); }

  7. Item 30 – Brug enums i stedet for int konstanter 4/4 • Hvorforsåbruge switch? • “Switches on enumsare good for augmenting external enum types with constant-specific behavior.” // Switch on an enum to simulate a missing method public static Operation inverse(Operation op) { switch(op) { case PLUS: return Operation.MINUS; case MINUS: return Operation.PLUS; case TIMES: return Operation.DIVIDE; case DIVIDE: return Operation.TIMES; default: throw new AssertionError("Unknown op: "+op); } }

  8. Item 38 – Check parameters for validity 1/2 • Hvad vil det sige? • At tjekke at alle parametre givet til konstruktorer og metoder er gyldige for at resultatet bliver korrekt. • Fx vil man ofte tjekke at at der ikke er angivet nogen null-pointere, da det vil give runtime fejl senere i metoden hvis der kaldes metoder på objektet. • En int parameter skal ofte have en værdi inden for et vist interval, eller fx bare være ikke-negativ (et index fx). • Hvorfor er det vigtigt? • Jo tidligere man kan opsnappe fejl, jo nemmere bliver det at finde årsagen til fejl. • Værre er det hvis der ikke opstår nogen direkte fejl, og metoden returnerer et forkert/ugyldigt resultat. Således vil problemet blive kastet videre. • Værst er det hvis man efterlader et objekt i en ugyldig tilstand. Fx kan et Month objekt pludselig have værdien 13. • Hvornår behøver man ikke gøre det? • Hvis tjekket er unødvendigt upraktisk. • Eller hvis selve udførslen af metoden vil opfange fejlen. • Hvis en metode fx sammenligner en række objekter, kræves det at objekterne er sammenlignelige. Der vil blive kastet en ClassCastException hvis der sker en ugyldig sammenligning.

  9. Item 38 – Check parameters for validity1/2 • To eksempler på gyldighedstjek af parametre: /* * @throws IndexOutOfBoundsException if index is out of bounds */ public ListItemgetItemAt(int index) { if (index < 0 || index > this.size()) { throw new IndexOutOfBoundsException(); } …continue method } /* * @throws IllegalArgumentException if one of the objects are null */ public double calculateDistance(Point p1, Point p2) { if (p1 == null || p2 == null) { throw new IllegalArgumentException(); } …continue method }

  10. Item 62 – Dokumenter alle exceptions kastet af hver metode 1/2 • Dokumenter altid checkedexceptions og uncheckedexceptions individuelt ved hver metode ved brug af javadoc@throwstag. • Programmøren bliver kendt med de fejl der kan laves og kan hermed undgå dem. • Samme exception i flere metoder, så er det fint nok bare at skrive i kommentarerne: • FxNullPointerException, “All methods in this class throw a NullPointerException if a null object reference is passed in any parameter,” ellerlign.

  11. Item 62 – Dokumenter alle exceptions kastet af hver metode 1/2 • Eksempel på dokumentation af exceptions

  12. Item 6 - Eliminate obsolete object references • Akaunintentionalobjectretention • Hvad er det ? • a reference which “is no longer reachable by the program, but still considered reachable by the garbage collector” • Eks. pop() • Hvornår skal man være opmærksom på memoryleak? • Hvordan eliminerer man obsolete object referencer? • Nulling • Minimaliserscope (Item 45 – gruppe rød) • Other sources for memory leak: caches, listeners and other callbacks

  13. Item 14 - In public classes, use accessor methods, not public fields • Jævnfør 1. forelæsning i Bosk om indkapsling • Hvornår er det mere i orden at bruge public felter? • Immutablefelter • Package-privateklasser • Private nested klasser

  14. Item 46 - Prefer for-each loops to traditional for loops • Hvorfor? • Pladsbesparelse og mindre mulighed for fejl • Hvorfor ikke? • Mindre fleksibilitet • Filtrering • Transformering • Parallel iteration

  15. Item 54 - Use native methods judiciously • Hvaderdet? • “Special methods written in native programming languages such as C or C++” • Hvorfor bliver de brugt? • Adgang til platform-specifikke faciliteter (registries og file locks). • Adgangtillibraries of legacy code • Forbedret performance. • Hvorfor skal man ikke bruge dem? • Mindresikkerhed -> memory corruption errors. • Mindre transportable • Svære at debugge • Det koster performance at gå ind og ud af nativecode • Kræver “gluecode”

More Related