JavaRush /Blog Jawa /Random-JV /8 kesalahan umum saka programer anyar

8 kesalahan umum saka programer anyar

Diterbitake ing grup
Hello! Dina iki kita bakal ndeleng dhaptar 8 kesalahan umum sing ditindakake dening pangembang Java pamula (lan ora mung). Sampeyan bakal nemokake akeh koleksi kasebut ing Internet: akeh sing padha karo siji liyane. Nalika kita nyusun dhaptar iki, kita dipandu dening siji kritéria: apa kita dhewe nggawe kesalahan kasebut sajrone sinau lan kerja :) Dheweke ora diprioritasake lan padha penting kanggo ngerti lan ngeling-eling.
  1. Mbandhingake obyek nggunakake ==.

    Operator ==mbandhingake referensi obyek.

    Referensi kasebut nuduhake alamat ing memori, lan yen ana ing alamat sing beda, perbandingan liwat ==bakal bali false.

    public class Car {
    
       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);
       }
    }

    Kanggo mbandhingake obyek ing kelas Objectana cara khusus - equals(). Implementasi standar, terus terang, kaya ngono:

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

    Ing kelas kasebut, Objectlogika metode kasebut equals()ditindakake minangka perbandingan saka rong referensi. Sabanjure, kanggo mbandhingake obyek kanthi bener, sampeyan kudu nemtokake cara iki miturut kritéria sing penting ing program tartamtu kanggo obyek tartamtu. Sampeyan nemtokake kritéria kanggo kesetaraan dhewe.

    Siji-sijine sing ora kudu dilalekake yaiku dhaptar syarat kanggo override sing tepat equals(). Sampeyan bisa nemokake kanthi gampang ing Internet, nanging para siswa sing keren wis nggawe artikel babagan topik iki .

  2. Nggunakake variabel non-statis ing cara statis (lan kosok balene).

    Yen sampeyan wis tau ndeleng prasasti " Variabel non-statis x ora bisa dirujuk saka konteks statis " - welcome to the club :)

    Cara statis ora nduweni akses menyang variabel kelas non-statis.

    Iki logis: sawise kabeh, cara statis bisa diarani tanpa nggawe obyek kelas, lan kabeh variabel lapangan kalebu obyek tartamtu. Iki minangka kontradiksi sing nyebabake kesalahan.

    Kosok baline, bisa uga: diidini nggunakake variabel statis ing cara non-statis:

    public class Main {
    
       public int x = 10;
    
       public static int staticX = 100;
    
       public static void main(String[] args) {
    
           System.out.println(x);//ошибка компиляции, так нельзя!
       }
    
       public void printX() {
    
           System.out.println(staticX);//а так можно!
       }
    }
  3. Kesalahpahaman babagan cara paramèter dikirim menyang metode: kanthi referensi utawa nilai.

    Obyek lan primitif diterusake menyang metode minangka paramèter kanthi cara sing beda-beda: sing pisanan kanthi referensi, sing terakhir kanthi nilai.

    Pemula asring nemokake konsep iki angel dimengerteni, nyebabake kode kasebut tumindak kanthi ora sengaja:

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

    Yen ing conto iki sampeyan ora ngerti persis sing nomer bakal nambah lan sing ora bakal (nomer biasa utawa umur kucing), banjur maneh maca ceramah kita ing topik iki maneh .

  4. Nglirwakake aturan nulis kode.

    Lan iki ditrapake ora mung kanggo netepi prinsip "teknis" tartamtu, nanging uga kanggo konvensi jeneng banal.

    Kabeh aturan iki " carane jeneng variabel ", " cara nulis jeneng metode " diciptakake kanthi alesan. Iki pancene banget mengaruhi readability saka kode.

    Ведь code не всегда будет только твоим. Ты можешь перевестись на другой проект в компании, и он перейдет по наследству к твоим коллегам, которые будут явно не в восторге, получив в работу что-то вроде этого:

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

    Твой code может быть гениальным с точки зрения производительности, но если его невозможно прочитать и понять How он, собственно, работает, цена его, увы, невелика.

    Придерживайся стандартов написания, и твой code, даже далекий от идеала, хотя бы прочтут более опытные товарищи и подскажут, что с технической точки зрения в нем можно улучшить :)

  5. Непонимание работы класса String

    public class Main {
    
       public static void main(String[] args) {
    
           String s1 = "Я изучаю Java";
           String s2 = new String("Я изучаю Java");
    
           System.out.println(s1 == s2);
       }
    }

    Если ты не знаешь, почему этот code выводит false, знания явно нужно подтянуть:)

    Новички часто не знают что такое String Pool и How он работает.

    Как следствие, не до конца ясно, How правильно сравнивать строки в своем codeе. В одной из наших лекций мы подробно рассматривали эту тему

  6. Неправильная работа с исключениями.

    Это свойственно не только новичкам, но и опытным разработчикам. Причин несколько.

    Во-первых, универсального рецепта не существует. Ошибки в программе бывают разные, сценарии их обработки, соответственно, тоже. Во-вторых, не все понимают структуру stackTrace, а антипаттернов обработки ошибок очень много, и каждый из них «неправилен» по-своему. Так что вариантов сделать неправильно здесь намного больше, чем где бы то ни было.

    Распространенные антипаттерны приведены здесь:

  7. Неполное понимание работы операторов (арифметических, логических и других).

    8 kesalahan umum saka programer anyar - 2

    Простой пример. Сможешь сходу сказать, что выведет этот code?

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

    Если ты ответил неправильно or наугад, значит, в этой области пока есть пробелы:)

    Код выведет false, потому что приоритет у оператора сравнения == выше, чем у постфиксного инкремента ++. Поэтому сначала будет выполнено сравнение 7 == i, и только потом - операция i++.

    По этой теме, кстати, у нас тоже была подробная лекция. Вот link, если пропустил.

  8. Пропуск слова break в операторе switch.

    Эту ошибку, вероятно, допускали многие из читателей!)

    public class Main {
    
       public static void main(String[] args) {
    
           int i = 1;
    
           switch (i) {
    
               case 1: {
                   System.out.println("Число равно 1");
               }
               case 2: {
                   System.out.println("Число равно 2");
               }
               case 3: {
                   System.out.println("Число равно 3");
               }
           }
       }
    }

    В результате на них обрушивается водопад из всех возможных вариантов:

    Вывод:

    
    Число равно 1
    Число равно 2
    Число равно 3

    Оператор break прерывает работу оператора switch в момент, когда отработал один из вариантов. Не стоит о нем забывать, иначе результат может быть неожиданным :)

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