JavaRush /Java Blog /Random-ID /8 kesalahan umum programmer pemula

8 kesalahan umum programmer pemula

Dipublikasikan di grup Random-ID
Halo! Hari ini kita akan melihat daftar 8 kesalahan umum yang dilakukan oleh pengembang Java pemula (dan tidak hanya). Anda akan menemukan banyak koleksi seperti itu di Internet: banyak di antaranya yang mirip satu sama lain. Saat kami menyusun daftar ini, kami dipandu oleh satu kriteria: apakah kami sendiri yang melakukan kesalahan ini selama belajar dan bekerja :) Kesalahan tersebut tidak diprioritaskan dan sama pentingnya untuk dipahami dan diingat.
  1. Membandingkan objek menggunakan ==.

    Operator ==membandingkan referensi objek.

    Referensi menunjuk ke alamat-alamat di memori, dan jika alamat-alamat tersebut berada di alamat yang berbeda, perbandingan melalui ==akan kembali 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);
       }
    }

    Untuk membandingkan objek dalam suatu kelas Objectada metode khusus - equals(). Implementasi defaultnya, sejujurnya, biasa saja:

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

    Di kelas itu sendiri, Objectlogika metode equals()diimplementasikan sebagai perbandingan dua referensi. Pada gilirannya, untuk membandingkan objek dengan benar, Anda perlu mendefinisikan ulang metode ini sesuai dengan kriteria yang penting dalam program tertentu untuk objek tertentu. Anda sendiri yang menentukan kriteria kesetaraan.

    Satu-satunya hal yang tidak boleh Anda lupakan adalah daftar persyaratan untuk override yang tepat equals(). Anda dapat dengan mudah menemukannya di Internet, tetapi siswa keren kami telah membuat artikel tentang topik ini .

  2. Menggunakan variabel non-statis dalam metode statis (dan sebaliknya).

    Jika Anda pernah melihat tulisan “ Variabel non-statis x tidak dapat direferensikan dari konteks statis ” - selamat datang di klub :)

    Metode statis tidak memiliki akses ke variabel kelas non-statis.

    Ini logis: bagaimanapun juga, metode statis dapat dipanggil tanpa membuat objek kelas, dan semua variabel bidang milik objek tertentu. Kontradiksi inilah yang menyebabkan kesalahan.

    Sebaliknya, dimungkinkan: diperbolehkan menggunakan variabel statis dalam metode 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 tentang bagaimana parameter diteruskan ke metode: berdasarkan referensi atau nilai.

    Objek dan primitif diteruskan ke metode sebagai parameter dengan cara yang berbeda: yang pertama dengan referensi, yang terakhir dengan nilai.

    Pemula sering kali merasa konsep ini sulit untuk dipahami, sehingga kode mereka berperilaku tidak terduga:

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

    Jika dalam contoh ini Anda tidak mengetahui secara pasti angka mana yang akan bertambah dan mana yang tidak (angka biasa atau umur kucing), maka baca kembali ceramah kami tentang topik ini .

  4. Mengabaikan aturan penulisan kode.

    Dan ini tidak hanya berlaku untuk kepatuhan terhadap prinsip-prinsip “teknis” tertentu, tetapi juga untuk konvensi penamaan yang dangkal.

    Semua aturan “ cara memberi nama variabel ”, “ cara menulis nama metode ” diciptakan karena suatu alasan. Ini sangat mempengaruhi keterbacaan 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 programmer pemula - 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