CodeGym /Java-blogg /Tilfeldig /8 vanlige feil gjort av nybegynnerprogrammerere
John Squirrels
Nivå
San Francisco

8 vanlige feil gjort av nybegynnerprogrammerere

Publisert i gruppen
Hei! I dag skal vi se på 8 svært vanlige feil gjort av nybegynnere (og andre) Java-utviklere. Du finner mange slike lister på nettet: mange av dem ligner på hverandre. Da vi kompilerte listen vår, ble vi styrt av ett kriterium: om vi gjorde feilene selv under studiene eller jobben :) De er ikke sortert etter viktighet — de er like viktige for deg å forstå og huske.
  1. Sammenligne objekter ved å bruke == .

    Operatoren == sammenligner objektreferanser.

    Referanser peker på adresser i minnet. Hvis de er lagret på forskjellige adresser, vil sammenligning med == returnere false .

    
    public class Vehicle {
     
        String model;
        int maxSpeed;
        int yearOfManufacture;
     
        public Car(String model, int maxSpeed, int yearOfManufacture) {
            this.model = model;
            this.maxSpeed = maxSpeed;
            this.yearOfManufacture = yearOfManufacture;
        }
     
        public static void main(String[] args) {
            Car ferrari = new Car("Ferrari 360 Spider", 280, 1996);
            Car ferrariTwin = new Car("Ferrari 360 Spider", 280, 1996);
            System.out.println(ferrari == ferrariTwin);
        }
    }
    

    For å sammenligne objekter har Object- klassen en spesiell metode: equals() . For å være ærlig er standardimplementeringen ikke dårlig:

    
    public boolean equals(Object obj) {
        return (this == obj);
    }
    

    I selve Object- klassen er equals()- metoden implementert som en sammenligning av to referanser. I sin tur, for å sammenligne objekter riktig, må du omdefinere denne metoden i henhold til kriteriene som er relevante i ditt spesielle program for dine spesifikke objekter. Kriteriene for likestilling er opp til deg.

    Det eneste du ikke må glemme er listen over krav for riktig overstyring av equals() . Du kan enkelt finne dem på Internett.

  2. Bruk av ikke-statiske variabler i statiske metoder (og omvendt).

    Hvis du noen gang har sett meldingen "Ikke-statisk variabel x kan ikke refereres fra en statisk kontekst", velkommen til klubben :)

    Statiske metoder har ikke tilgang til ikke-statiske (forekomst) variabler.

    Dette gir mening: Tross alt kan en statisk metode kalles uten å lage et objekt av klassen, og alle felt tilhører spesifikke objekter. Og her ligger motsetningen som forårsaker feilen.

    Forresten, går den andre veien fungerer fint: du kan bruke statiske variabler i ikke-statiske metoder:

    
    public class Main {
     
        public int x = 10;
     
        public static int staticX = 100;
     
        public static void main(String[] args) {
     
            System.out.println(x); // Compilation error - you can't do this!
        }
     
        public void printX() {
     
            System.out.println(staticX); // But you can do this!
        }
    }
    

  3. Misforståelse av hvordan argumenter overføres til metoder: ved referanse eller etter verdi.

    Objekter og primitiver overføres til metoder på to forskjellige måter: for det første ved referanse; andre, etter verdi.

    Nybegynnere synes ofte det er vanskelig å forstå dette konseptet. Som et resultat oppfører koden deres uventet:

    
    public class Main {
     
        public static void main(String[] args) {
     
            int x = 7;
            incrementNumber(x);
            System.out.println(x);
     
            Cat cat = new Cat(7);
            catLevelUp(cat);
            System.out.println(cat.getAge());
     
        }
     
        public static void catLevelUp(Cat cat) {
     
            cat.setAge(cat.getAge()+1);
        }
     
        public static void incrementNumber(int x) {
            x++;
        }
    }
    

    Hvis du ikke vet nøyaktig hvilket tall som vil øke og ikke (det vanlige gamle tallet eller kattens alder), så les leksjonen vår om emnet på nytt .

  4. Ignorerer kodingsregler.

    Dette gjelder ikke bare etterlevelse av visse "tekniske" prinsipper, men også verdslige navnekonvensjoner.

    Alle disse reglene (hvordan man navngir variabler, hvordan man skriver metodenavn) ble oppfunnet av en grunn. De påvirker virkelig lesbarheten til koden

    Tross alt vil koden ikke alltid være din alene. Du kan bli overført til et annet prosjekt i bedriften din. Medarbeiderne dine som arver koden din vil åpenbart ikke bli glade når de ser noe slikt:

    
    public class Cat {
     
        private int S_O_M_E_T_H_I_N_G = 7;
        public String striiiiiiiiiiiiiing;
        protected double I_HAVE_NO_IDEA_WHAT_THIS_IS = 3.14;
        boolean random = Math.random() > 0.5;
     
    }
    

    Koden din kan ha genialt høy ytelse, men hvis det er umulig å lese og forstå hvordan den faktisk fungerer, så er den dessverre ikke mye verdt.

    Hvis du holder deg til kodestandarder, så selv om koden din er langt fra ideell, vil i det minste dine mer erfarne medarbeidere kunne fortelle deg hvordan den kan forbedres fra et teknisk synspunkt :)

  5. Misforståelse av String- klassen

    
    public class Main {
     
        public static void main(String[] args) {
     
            String s1 = "I'm learning Java";
            String s2 = new String("I'm learning Java");
     
            System.out.println(s1 == s2);
        }
    }
    

    Hvis du ikke vet hvorfor denne koden viser falsk , må du tydeligvis øke kunnskapen din :)

    Nybegynnere er ofte uvitende om String Pool og hvordan den fungerer.

    Som et resultat forstår de ikke helt hvordan de skal sammenligne strenger i koden deres. Vi utforsket dette emnet i detalj i en av leksjonene våre .

  6. Håndtere unntak feil.

    Nybegynnere er ikke de eneste som snubler over dette. Erfarne utviklere blir også snublet. Årsakene er mange.

    For det første er det ingen universell oppskrift. Programmer har alle slags forskjellige feil og forskjellige feilhåndteringsscenarier.

    For det andre er det ikke alle som forstår hvordan en stabelsporing er strukturert. Det er mange feilhåndteringsantimønstre, og hver av dem er "feil" på sin egen måte. Dette betyr at det er mye lettere å få feilhåndtering feil enn omtrent alt annet.

  7. Forstår ikke helt hvordan operatører (aritmetiske, logiske og andre) fungerer.

    8 vanlige feil gjort av nybegynnerprogrammerere - 2

    Her er et enkelt eksempel. Kan du fortelle med en gang hva denne koden vil vise?

    
    public class Main {
     
        public static void main(String[] args) {
     
            int i = 6;
            System.out.println(7 == i++);
        }
    }
    

    Hvis du svarte feil eller bare gjettet, så har du fortsatt kunnskapshull på dette området :)

    Koden vil vise false fordi likhetsoperatoren ( == ) har høyere prioritet enn postfix inkrementoperatoren ( ++ ). Derfor ekskluderes 7 == i -sammenligningen først, og først deretter utføres i ++- operasjonen.

    Vi hadde forresten også en detaljert leksjon om dette. Her er linken hvis du gikk glipp av den.

  8. Utelate ordet break i en switch- setning.

    Mange som leser denne artikkelen har absolutt gjort denne feilen! :)

    
    public class Main {
     
        public static void main(String[] args) {
     
            int i = 1;
     
            switch (i) {
     
                case 1: {
                    System.out.println("The number is equal to 1");
                }
                case 2: {
                    System.out.println("The number is equal to 2");
                }
                case 3: {
                    System.out.println("The number is equal to 3");
                }
            }
        }
     }
    

    Som et resultat faller utførelse gjennom alle mulige alternativer:

    Produksjon:

    Tallet er lik 1 Tallet er lik 2 Tallet er lik 3

    En break -setning avbryter kjøringen av switch- setningen når et av alternativene er ferdig utført. Ikke glem det, ellers kan du få uventede resultater :)

Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION