java每个阶段的学习时间_每个Java学习者都会犯的10个最常见的1个错误
java每个阶段的学习时间
据说:“您的朋友会吞下您的错误,您的敌人会将它们呈现在盘子上”。 我绝对不是你的敌人,但我想向您介绍一些针对每个Java初学者的错误,我将在此博客“标牌”上就此做错。 当然只有其中一些,我是从CodeGym.cc课程分析系统收集的。 如果您还不了解,CodeGym是一门从入门到高级的实用Java课程。
因此,它们在这里。
0.分配还是比较(=或==)?
这是从头开始学习Java的学生的第一个错误。 容易混淆=是赋值运算符,而==是关系运算符。 这是自然的错误,因为在数学中,“ =”比Java的“ =”更接近Java的“ == ”。 通常,编译器会捕获此类错误,但是可以将其隐藏起来。 例如:
boolean myBoolean;
If (myBoolean = true) {
doSomething;
}
看到? 无论如何,此块都将是真实的,因为您将其分配为true…
1.用==运算符比较字符串。
在完成第一个Java任务(通常会有一些控制台输出和算术问题)后不久,您将学习String类。 但是,初学者常常会忘记,特定的字符串不是char或int等原始类型的代表,而是一个对象。 您不能使用==运算符比较对象。 请记住使用string.equals(Object object)函数来比较字符串(或其他对象),而不是==
运算符。 等于检查字符串的内容,而==
运算符检查对对象的引用是否相等。
老实说,字符串常量通常是“ interned”。 这意味着具有相同值的两个常量实际上可以与==
进行比较,但并不真正依赖于此。使用.equals。
2.类的不同名称以及其代码所在的文件。
几年前,这个错误非常普遍(甚至可能是所有人)。 现在,即使是初学者也正在使用现代IDE,并且它已濒临灭绝。 无论如何,记住Java文件名和类名应该相同是很有用的。 例如,如果您命名文件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修饰符,则程序将运行。
从main方法或其他静态方法访问非静态成员
很多时候,初学者不知道如何使用静态上下文。 静态变量是类的所有实例之间共享的变量。 因此,只有一个副本被所有对象共享。 因此,我们不能以“静态方式”使用非静态变量。 main()method (which is static!), when novice programmer attempts
访问实例变量或方法时,该错误通常发生在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
。
我们应该怎么做才能避免这种情况? 首先,我们可以将变量设为静态,但是它并不总是符合程序的目的。 解决方案之一是创建我们类的对象:
public class MyExample {public String myString; public static void main(String[] args) {
MyExample myExample = new myExample(); myString = “non static String”;
}}
请记住,您可以使用静态变量或静态或非静态上下文中的方法。 您可以使用对象引用处理非静态元素。
4.数组索引超出数组范围
在初学者编程的学生中,这是一个非常普遍的错误。 这种流行的原因是,最初或多或少的复杂任务是关于数组和循环的。 很简单的例子:
String[] name = { "Snoopy", "Woodstock", "Charlie Brown" };
for (int i = 0; i <= name.length; i++) {System.out.println(name[i]);
}
循环从零元素“史努比”开始,然后转到第一个“ Woodstock”,再到第二个“ Charlie Brown”……并尝试打印第三个元素,但是我们没有它(我们的“第三个”是“第二”(例如“第一”)是数字零)。 这里的错误很明显,但并非总是这样。
对于新手来说,周期和数组非常困难。 然而,实践使钻石。 CodeGym上有数百个“数组和循环”任务。 尝试解决它们(现在是免费的!)以获得自信的技能。
周期或条件错误
在下面的块中,您不打印任何数组成员。 首先,循环以“;”结尾 所以什么都没发生 甚至更多:该程序将无法运行,因为您的int i仅在循环内运行,并且以“;”结尾。
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]);}}
您已经有了java.lang.ArrayIndexOutOfBoundsException,因为System.out.println尝试打印元素#3和仅此元素,但是我们没有这样的数组成员。 最后一个是第二个,它是7。
同一个故事; 和条件。 例如:
public static void main(String[] args) {int [] myArray = {2,5,7};if (myArray[0] > myArray[1]);System.out.println("it is");}}
这里不满足该条件,但是由于“;”而将打印“它是” 如果施工后。
如果您开始学习CodeGym,那么您将获得第4级 Java语法quest 上的带有循环的第一个编码任务 。 我想您会忘记解决足够问题的这种错误。
6.缺少一个Switch-Case结构中的“ break”关键字
缺少“ break”关键字的尴尬之处在于没有编译器错误。 但是,您的代码工作方式错误。
看下面的代码示例,我们忘记在“ case 0”中插入一个中断。 该程序将运行,但是会同时打印“ 0”和“ 1”,因为开关构造因中断而结束了工作。
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");}
}
此规则有例外。 开关块可以与返回操作员一起完成工作
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;}}
}
在这种情况下,开关在情况1之后立即完成其工作。
7.混乱与值传递和引用传递
如果将原始数据类型(例如char,int或double)传递给方法,则按值传递。 这意味着该数据类型的副本将被复制并传递给您的方法。 如果在方法内部修改了该数据,则对方法外部的“原始”数据没有影响。
public class Main {public static void swap(int i, int j){int temp = i;i = j;j = temp;System.out.println("from swap method i = " + i + ", j = " + j);}public static void main(String[] args) {int i1 = 1;int j1 = 2;swap(i1,j1);System.out.println("from main method i = " + i1 + ", j = " + j1);}
}
当您将Java对象(例如数组或字符串)传递给方法时,这意味着您正在传递引用(数据的地址),而不是重复项。 因此,如果您在方法中更改数据,那么它也将在其外部更改。
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.尝试使用未初始化的字段或变量
在没有初始化的情况下使用对象类型非常危险。
类变量由默认值初始化(0表示int,0.0表示double,false表示布尔值,null表示非原始类型(对象)。
public class Test2 {static String test;public static void main(String[] args) {System.out.println(test);}
}
输出为:
Null
使用局部方法变量时,需要手动对其进行初始化,否则会出现编译错误。
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 initialized
9.忘记整数除法
如果将一个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语法要求中了解除法和实型,并解决与该主题相关的许多编码任务。
10.在子对象中调用构造函数的顺序混乱
当您尝试创建Child类的实例时,首先调用Child,然后调用Parent。 父子关系中构造函数执行的顺序是从基本(父)类到继承的(子)类。
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和继承 。 这个主题确实有很多任务。 因此,迟早您将对OOP原理有一个细微的了解。
结论
我想,没有文章可以积累Java新手的所有潜在错误。 但是,这样的列表对于避免常见的错误非常有用……并且有时间发现较少的琐碎问题! Praemonitus,praemunitus(*被预先警告)。
但是,最重要的步骤不是避免错误,而是练习编码本身。 因此,我们创建了 Java核心课程 CodeGym ,其中包含1000多个练习任务,有趣的讲座以及有关您的改进的即时反馈。 当您犯了一个错误,普遍或罕见的错误时,CodeGym System会警告您有关错误并提供避免该错误的建议。 自己尝试该课程,目前免费。
不要停止练习,您肯定会成为更好的软件开发人员。 祝您学习顺利!
PS:您曾经从本文中犯过错误吗? 您在学习中遇到什么错误? 在评论中告诉我们!
翻译自: https://www.javacodegeeks.com/2019/04/common-mistakes-every-java-learner-makes.html
java每个阶段的学习时间
java每个阶段的学习时间_每个Java学习者都会犯的10个最常见的1个错误相关推荐
- java ftp取远程服务器时间_在 Java 中如何获取 FTP 服务器上的文件修改时间
使用 Apache Commons Net 进行 FTP 编程的时候,可以使用 FTPClient 类的方法来获取和设置 FTP 服务器上特定文件的修改时间: String getModificati ...
- 每个Java学习者都会犯的10大常见错误1
据说:"您的朋友会吞下您的错误,您的敌人会将它们呈现在盘子上". 我绝对不是你的敌人,但我想向您介绍一些针对每个Java初学者的错误,我将在此博客"标牌"上就此 ...
- Java高并发编程学习(三)java.util.concurrent包
简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...
- java技术专家学习路线图_向Java最佳专家的全球专家学习Java
java技术专家学习路线图 Java with the Best Virtual Conference是您学习微服务,Java 9,Kubernetes以及其他Java的指南! 将于4月17日至18日 ...
- java两个字符串 相隔天数_关于Java: Joda-Time时间中两个日期之间的天数
我如何找到两个joda time DateTime实例之间的天数差异?如果开始时间是星期一,结束时间是星期二,那么不管开始和结束日期的小时/分钟/秒是多少,返回值都应该是1. 如果从晚上开始到早上结束 ...
- 模拟文件管理器的java可以编译但无法运行_在java学习经典问题he解答(6)
1.Applet和普通的Java应用程序有什么区别? (1)运行方式不同.Java Applet程序不能单独运行,它必须依附于一个用HTML语言编写的网页并嵌入其中,通过与Java兼容的浏览器来控制执 ...
- java 必须try catch的异常_【java基础之异常】死了都要try,不淋漓尽致地catch我不痛快!...
@ 1.异常 1.1 异常概念 异常 :简单说就是不正常运行,最终导致JVM的非正常停止. 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象.Java处 ...
- java web开源项目源码_适合Java新手的开源项目集合——在 GitHub 学编程
作者:HelloGitHub-老荀 当今互联网份额最大的编程语言是哪一个?是 Java!这两年一直有听说 Java 要不行了.在走下坡路了.没错,Java 的确在走下坡路,未来的事情的确不好说,但是瘦 ...
- java语言中声明布尔型_【Java初探02】——Java语言基础
本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...
最新文章
- jvm有哪些内存区域
- centos php5.3 yum 安装 php53-mcrypt
- maven 插件在线安装
- JVM CPU Profiler技术原理及源码深度解析
- IntelliJ IDEA 编译错误,提示 Compilation failed: internal java compiler error或java compiler failed
- 物联网带着诚意扑面而来
- 【深度学习】基础知识 | 超详细逐步图解 Transformer
- c#多线程同步之EventWaitHandle使用
- 《剑指Offer》 链表中倒数第k个结点
- mongodb 权限设置--用户名、密码、端口
- 使用python读取excel
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
- 三维分子模型软件PyMOL
- 专升本英语——菜鸟学习笔记【知识点齐全-轻松学习】!!!
- #Excel公式应用#从数据透视表进一步汇总文本信息
- 消防设施操作员考试真题、模拟练习题库(7)
- 服务器原装的系统怎么格式化,怎么将云服务器系统格式化
- Google Map 开发笔记——基础篇(Javascript )
- 互联网日报 | 2月1日 星期一 | 苏宁宣布云网万店组织架构;威马汽车完成上市辅导;美团上线医疗健康品牌“百寿健康网”...
- python实现面向对象(1)
热门文章
- 牛客每日一题3.31 城市网络 树上倍增
- CF1131 G. Most Dangerous Shark(DP+单调栈优化)
- Comet OJ(Contest #14)-飞翔的小鸟【tarjan】
- P3190-[HNOI2007]神奇游乐园【插头dp】
- P3527-[POI2011]MET-Meteors【整体二分,树状数组】
- jzoj3348,bzoj3258-秘密任务【最短路,网络流最小割】
- hdu3666-THE MATRIX PROBLEM【差分约束,自然对数】
- P1463-[POI2002][HAOI2007]反素数【约数,数论】
- YL杯超级篮球赛(jzoj 1325)
- 【动态规划】最大子矩阵之和