CodeGym /Java blogg /Slumpmässig /8 vanliga misstag som görs av nybörjarprogrammerare
John Squirrels
Nivå
San Francisco

8 vanliga misstag som görs av nybörjarprogrammerare

Publicerad i gruppen
Hej! Idag ska vi titta på 8 mycket vanliga misstag som görs av nybörjare (och andra) Java-utvecklare. Du hittar massor av sådana listor på webben: många av dem liknar varandra. När vi sammanställde vår lista vägleddes vi av ett kriterium: om vi gjorde misstagen själva under våra studier eller anställning :) De är inte sorterade efter betydelse – de är lika viktiga för dig att förstå och komma ihåg.
  1. Jämföra objekt med == .

    Operatorn == jämför objektreferenser.

    Referenser pekar på adresser i minnet. Om de lagras på olika adresser kommer jämförelse med == att returnera 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);
        }
    }
    

    För att jämföra objekt har klassen Object en speciell metod: equals() . Uppriktigt sagt är dess standardimplementering inte dålig:

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

    I själva klassen Object implementeras metoden equals() som en jämförelse av två referenser. För att korrekt jämföra objekt måste du i sin tur omdefiniera denna metod enligt de kriterier som är relevanta i just ditt program för just dina objekt. Kriterierna för jämställdhet är upp till dig.

    Det enda du inte får glömma är listan med krav för att korrekt åsidosätta equals() . Du kan enkelt hitta dem på Internet.

  2. Använda icke-statiska variabler i statiska metoder (och vice versa).

    Om du någonsin har sett meddelandet "Icke-statisk variabel x kan inte refereras från ett statiskt sammanhang", välkommen till klubben :)

    Statiska metoder har inte tillgång till icke-statiska (instans)variabler.

    Detta är vettigt: trots allt kan en statisk metod anropas utan att skapa ett objekt av dess klass, och alla fält tillhör specifika objekt. Och häri ligger motsägelsen som orsakar felet.

    Förresten, att gå åt andra hållet fungerar bra: du kan använda statiska variabler i icke-statiska 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. Missförstånd av hur argument skickas till metoder: genom referens eller värde.

    Objekt och primitiver överförs till metoder på två olika sätt: för det första genom referens; för det andra efter värde.

    Nybörjare har ofta svårt att förstå detta koncept. Som ett resultat beter sig deras kod oväntat:

    
    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++;
        }
    }
    

    Om du inte vet exakt vilken siffra som kommer att öka och inte (det vanliga gamla siffran eller kattens ålder), läs sedan om vår lektion om ämnet .

  4. Ignorera kodningsregler.

    Detta gäller inte bara efterlevnaden av vissa "tekniska" principer, utan också vardagliga namnkonventioner.

    Alla dessa regler (hur man namnger variabler, hur man skriver metodnamn) uppfanns av en anledning. De påverkar verkligen läsbarheten av kod

    När allt kommer omkring kommer koden inte alltid att vara din ensam. Du kan flyttas över till ett annat projekt på ditt företag. Dina medarbetare som ärver din kod kommer uppenbarligen inte att bli glada när de ser något sånt här:

    
    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;
     
    }
    

    Din kod kan ha genialiskt hög prestanda, men om det är omöjligt att läsa och förstå hur det faktiskt fungerar, så är det tyvärr inte värt mycket.

    Om du håller dig till kodningsstandarder, även om din kod är långt ifrån idealisk, kommer åtminstone dina mer erfarna medarbetare att kunna berätta hur den kan förbättras ur teknisk synvinkel :)

  5. Missförstå klassen String

    
    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);
        }
    }
    

    Om du inte vet varför den här koden visar falsk , måste du uppenbarligen förbättra dina kunskaper :)

    Nybörjare är ofta omedvetna om String Pool och hur den fungerar.

    Som ett resultat förstår de inte helt hur man korrekt jämför strängar i sin kod. Vi utforskade detta ämne i detalj i en av våra lektioner .

  6. Hantera undantag felaktigt.

    Nybörjare är inte de enda som snubblar över detta. Erfarna utvecklare blir också snubblade. Orsakerna är många.

    För det första finns det inget universellt recept. Program har alla möjliga olika fel och olika felhanteringsscenarier.

    För det andra förstår inte alla hur en stackspårning är uppbyggd. Det finns många felhanteringsantimönster, och var och en av dem är "fel" på sitt sätt. Det betyder att det är mycket lättare att få felhantering fel än vad som helst annat.

  7. Förstår inte helt hur operatorer (aritmetiska, logiska och andra) fungerar.

    8 vanliga misstag som görs av nybörjarprogrammerare - 2

    Här är ett enkelt exempel. Kan du säga direkt vad den här koden kommer att visa?

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

    Om du svarade fel eller bara gissade så har du fortfarande kunskapsluckor inom detta område :)

    Koden kommer att visa false eftersom likhetsoperatorn ( == ) har högre prioritet än postfix inkrementoperatorn ( ++ ). Därför exkluderas 7 == i -jämförelsen först, och först därefter utförs i++- operationen.

    Vi hade förresten också en utförlig lektion om detta. Här är länken om du missade den.

  8. Utelämna ordet break i en switch- sats.

    Många som läser den här artikeln har verkligen gjort detta misstag! :)

    
    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 ett resultat faller utförandet genom alla möjliga alternativ:

    Produktion:

    Antalet är lika med 1 Antalet är lika med 2 Antalet är lika med 3

    En break -sats avbryter exekveringen av switch -satsen när ett av alternativen är klart att exekveras. Glöm inte det, annars kan du få oväntade resultat :)

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