java每个阶段的学习时间_每个Java学习者都会犯的10个最常见的1个错误
java每個階段的學(xué)習(xí)時間
據(jù)說:“您的朋友會吞下您的錯誤,您的敵人會將它們呈現(xiàn)在盤子上”。 我絕對不是你的敵人,但我想向您介紹一些針對每個Java初學(xué)者的錯誤,我將在此博客“標(biāo)牌”上就此做錯。 當(dāng)然只有其中一些,我是從CodeGym.cc課程分析系統(tǒng)收集的。 如果您還不了解,CodeGym是一門從入門到高級的實(shí)用Java課程。
因此,它們在這里。
0.分配還是比較(=或==)?
這是從頭開始學(xué)習(xí)Java的學(xué)生的第一個錯誤。 容易混淆=是賦值運(yùn)算符,而==是關(guān)系運(yùn)算符。 這是自然的錯誤,因?yàn)樵跀?shù)學(xué)中,“ =”比Java的“ =”更接近Java的“ == ”。 通常,編譯器會捕獲此類錯誤,但是可以將其隱藏起來。 例如:
boolean myBoolean; If (myBoolean = true) { doSomething; }看到? 無論如何,此塊都將是真實(shí)的,因?yàn)槟鷮⑵浞峙錇閠rue…
1.用==運(yùn)算符比較字符串。
在完成第一個Java任務(wù)(通常會有一些控制臺輸出和算術(shù)問題)后不久,您將學(xué)習(xí)String類。 但是,初學(xué)者常常會忘記,特定的字符串不是char或int等原始類型的代表,而是一個對象。 您不能使用==運(yùn)算符比較對象。 請記住使用string.equals(Object object)函數(shù)來比較字符串(或其他對象),而不是==運(yùn)算符。 等于檢查字符串的內(nèi)容,而==運(yùn)算符檢查對對象的引用是否相等。
老實(shí)說,字符串常量通常是“ interned”。 這意味著具有相同值的兩個常量實(shí)際上可以與==進(jìn)行比較,但并不真正依賴于此。使用.equals。
2.類的不同名稱以及其代碼所在的文件。
幾年前,這個錯誤非常普遍(甚至可能是所有人)。 現(xiàn)在,即使是初學(xué)者也正在使用現(xiàn)代IDE,并且它已瀕臨滅絕。 無論如何,記住Java文件名和類名應(yīng)該相同是很有用的。 例如,如果您命名文件Test.java并在其中編寫一些類CodeGymTest代碼:
//File name: Test.java public class CodeGymTest { public static void main(String[] args) { System.out.println("Hello world"); } }您將獲得下一個輸出:
Test.java:9: error: class CodeGymTest is public, should bedeclared in a file named CodeGymTest.java public class CodeGymTest ^ 1 error順便說一句,如果您從類名中刪除public修飾符,則程序?qū)⑦\(yùn)行。
從main方法或其他靜態(tài)方法訪問非靜態(tài)成員
很多時候,初學(xué)者不知道如何使用靜態(tài)上下文。 靜態(tài)變量是類的所有實(shí)例之間共享的變量。 因此,只有一個副本被所有對象共享。 因此,我們不能以“靜態(tài)方式”使用非靜態(tài)變量。 main()method (which is static!), when novice programmer attempts訪問實(shí)例變量或方法時,該錯誤通常發(fā)生在main()method (which is static!), when novice programmer attempts 。 如果您嘗試這樣的代碼
public class MyExample {public String myString; public static void main(String[] args) {myString = “non static String”; }}我們有編譯錯誤:
non-static variable number cannot be referenced from a static context 。
我們應(yīng)該怎么做才能避免這種情況? 首先,我們可以將變量設(shè)為靜態(tài),但是它并不總是符合程序的目的。 解決方案之一是創(chuàng)建我們類的對象:
public class MyExample {public String myString; public static void main(String[] args) { MyExample myExample = new myExample(); myString = “non static String”; }}請記住,您可以使用靜態(tài)變量或靜態(tài)或非靜態(tài)上下文中的方法。 您可以使用對象引用處理非靜態(tài)元素。
4.數(shù)組索引超出數(shù)組范圍
在初學(xué)者編程的學(xué)生中,這是一個非常普遍的錯誤。 這種流行的原因是,最初或多或少的復(fù)雜任務(wù)是關(guān)于數(shù)組和循環(huán)的。 很簡單的例子:
String[] name = { "Snoopy", "Woodstock", "Charlie Brown" }; for (int i = 0; i <= name.length; i++) {System.out.println(name[i]); }循環(huán)從零元素“史努比”開始,然后轉(zhuǎn)到第一個“ Woodstock”,再到第二個“ Charlie Brown”……并嘗試打印第三個元素,但是我們沒有它(我們的“第三個”是“第二”(例如“第一”)是數(shù)字零)。 這里的錯誤很明顯,但并非總是這樣。
對于新手來說,周期和數(shù)組非常困難。 然而,實(shí)踐使鉆石。 CodeGym上有數(shù)百個“數(shù)組和循環(huán)”任務(wù)。 嘗試解決它們(現(xiàn)在是免費(fèi)的!)以獲得自信的技能。
周期或條件錯誤
在下面的塊中,您不打印任何數(shù)組成員。 首先,循環(huán)以“;”結(jié)尾 所以什么都沒發(fā)生 甚至更多:該程序?qū)o法運(yùn)行,因?yàn)槟膇nt i僅在循環(huán)內(nèi)運(yùn)行,并且以“;”結(jié)尾。
public static void main(String[] args) {int [] myArray = {2,5,7};for (int i=0; i<3; i++);{System.out.println(myArray[i]);}}如果您嘗試這樣的事情:
public static void main(String[] args) {int [] myArray = {2,5,7};int i = 0;for (i=0; i<3; i++);{System.out.println(myArray[i]);}}您已經(jīng)有了java.lang.ArrayIndexOutOfBoundsException,因?yàn)镾ystem.out.println嘗試打印元素#3和僅此元素,但是我們沒有這樣的數(shù)組成員。 最后一個是第二個,它是7。
同一個故事; 和條件。 例如:
public static void main(String[] args) {int [] myArray = {2,5,7};if (myArray[0] > myArray[1]);System.out.println("it is");}}這里不滿足該條件,但是由于“;”而將打印“它是” 如果施工后。
如果您開始學(xué)習(xí)CodeGym,那么您將獲得第4級 Java語法quest 上的帶有循環(huán)的第一個編碼任務(wù) 。 我想您會忘記解決足夠問題的這種錯誤。
6.缺少一個Switch-Case結(jié)構(gòu)中的“ break”關(guān)鍵字
缺少“ break”關(guān)鍵字的尷尬之處在于沒有編譯器錯誤。 但是,您的代碼工作方式錯誤。
看下面的代碼示例,我們忘記在“ case 0”中插入一個中斷。 該程序?qū)⑦\(yùn)行,但是會同時打印“ 0”和“ 1”,因?yàn)殚_關(guān)構(gòu)造因中斷而結(jié)束了工作。
public static void switchCasePrimer() {int counting = 0;switch (counting) {case 0:System.out.println("0");case 1:System.out.println("1");break;case 2:System.out.println("2");break;default:System.out.println("Default");} }此規(guī)則有例外。 開關(guān)塊可以與返回操作員一起完成工作
public class test {public static void main(String[] args) {System.out.println(showSwitch(1));}public static int showSwitch(int condition) {switch (condition) {case 1:System.out.println(1);return 1;case 2:System.out.println(2);return 4;case 3:System.out.println(3);return 8;default:System.out.println("default");return 256;}} }在這種情況下,開關(guān)在情況1之后立即完成其工作。
7.混亂與值傳遞和引用傳遞
如果將原始數(shù)據(jù)類型(例如char,int或double)傳遞給方法,則按值傳遞。 這意味著該數(shù)據(jù)類型的副本將被復(fù)制并傳遞給您的方法。 如果在方法內(nèi)部修改了該數(shù)據(jù),則對方法外部的“原始”數(shù)據(jù)沒有影響。
當(dāng)您將Java對象(例如數(shù)組或字符串)傳遞給方法時,這意味著您正在傳遞引用(數(shù)據(jù)的地址),而不是重復(fù)項(xiàng)。 因此,如果您在方法中更改數(shù)據(jù),那么它也將在其外部更改。
public class Main {static int[] outer = new int[3];public static void swap(int[] array) {System.out.println("(swap) Before swap :" + Arrays.toString(array));int first = array[0];int last = array[array.length - 1];array[0] = last;array[array.length - 1] = first;System.out.println("(swap) After swap :" + Arrays.toString(array));}public static void main(String[] args) {outer[0] = 0;outer[1] = 1;outer[2] = 2;swap(outer);System.out.println("(main) After swap :" + Arrays.toString(outer));}8.嘗試使用未初始化的字段或變量
在沒有初始化的情況下使用對象類型非常危險(xiǎn)。
類變量由默認(rèn)值初始化(0表示int,0.0表示double,false表示布爾值,null表示非原始類型(對象)。
public class Test2 {static String test;public static void main(String[] args) {System.out.println(test);} }輸出為:
Null使用局部方法變量時,需要手動對其進(jìn)行初始化,否則會出現(xiàn)編譯錯誤。
public class Test2 {public static void main(String[] args) {String test2;System.out.println(test2);} }輸出為:
Error:(6, 28) java: variable test2 might not have been initialized9.忘記整數(shù)除法
如果將一個int劃分為另一個int,您將再次獲得int。 所以?= 0,而不是0.5:
public static void main(String[] args) {int i = 1;int j = 2; int k = i/j; //here we’ve got 0 }您可以從CodeGym的Java語法要求中了解除法和實(shí)型,并解決與該主題相關(guān)的許多編碼任務(wù)。
10.在子對象中調(diào)用構(gòu)造函數(shù)的順序混亂
當(dāng)您嘗試創(chuàng)建Child類的實(shí)例時,首先調(diào)用Child,然后調(diào)用Parent。 父子關(guān)系中構(gòu)造函數(shù)執(zhí)行的順序是從基本(父)類到繼承的(子)類。
public class Test3 {static class Parent {Parent() {System.out.println("a Parent is created");}}static class Child extends Parent {Child(){System.out.println("a Child is created");}}public static void main(String[] args) {Child child = new Child();} }輸出:
a Parent is created a Child is created如果加入CodeGym,您將在 Java Core Quest中 遇到OOP和繼承 。 這個主題確實(shí)有很多任務(wù)。 因此,遲早您將對OOP原理有一個細(xì)微的了解。
結(jié)論
我想,沒有文章可以積累Java新手的所有潛在錯誤。 但是,這樣的列表對于避免常見的錯誤非常有用……并且有時間發(fā)現(xiàn)較少的瑣碎問題! Praemonitus,praemunitus(*被預(yù)先警告)。
但是,最重要的步驟不是避免錯誤,而是練習(xí)編碼本身。 因此,我們創(chuàng)建了 Java核心課程 CodeGym ,其中包含1000多個練習(xí)任務(wù),有趣的講座以及有關(guān)您的改進(jìn)的即時反饋。 當(dāng)您犯了一個錯誤,普遍或罕見的錯誤時,CodeGym System會警告您有關(guān)錯誤并提供避免該錯誤的建議。 自己嘗試該課程,目前免費(fèi)。
不要停止練習(xí),您肯定會成為更好的軟件開發(fā)人員。 祝您學(xué)習(xí)順利!
PS:您曾經(jīng)從本文中犯過錯誤嗎? 您在學(xué)習(xí)中遇到什么錯誤? 在評論中告訴我們!
翻譯自: https://www.javacodegeeks.com/2019/04/common-mistakes-every-java-learner-makes.html
java每個階段的學(xué)習(xí)時間
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java每个阶段的学习时间_每个Java学习者都会犯的10个最常见的1个错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑莓9930快捷键(黑莓9930按键说明
- 下一篇: java gradle构建_在Gradl