每个Java学习者都会犯的10大常见错误1

据说:“您的朋友会吞下您的错误,您的敌人会将它们呈现在盘子上”。 我绝对不是你的敌人,但我想向您介绍一些针对每个Java初学者的错误,我将在此博客“标牌”上就此做错。 当然只有我从CodeGym.cc课程分析系统收集的内容。 如果您还不了解,CodeGym是一门从入门到高级的实用Java课程。

因此,它们在这里。

0.分配还是比较(=或==)?

这是从头开始学习Java的学生的第一个错误。 容易混淆=是分配运算符,而==是关系运算符。 这是自然的错误,因为在数学中“ =”比Java的“ =”更接近Java的“ == ”。 通常,编译器会捕获此类错误,但是可以将其隐藏起来。 例如:

boolean myBoolean; 
If (myBoolean = true) {
doSomething; 
}

看到? 无论如何,此块都将是真实的,因为您将其分配为真实的…

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac os 开启redis_Mac下配置Redis服务器(自启动、后台运行) | 学步园

Redis服务器在从诸多文章上看来&#xff0c;是个极为优秀的Key-value数据库软件。其NB之处可以从这篇文章中略知一二。主要参考首先是安装&#xff0c;它会默认安装到/usr/local/bin下cd /tmpwget http://redis.googlecode.com/files/redis-2.6.9.tar.gztar -zxf redis-2.6.9.t…

光端机使用时出现了故障怎样定位和处理

光端机&#xff0c;就是光信号传输的终端设备&#xff0c;但是客户在使用光端机的过程中难免会碰到一些问题&#xff0c;那么&#xff0c;我们在使用光端机时出现了故障该怎样定位和处理呢&#xff1f;接下来就由杭州飞畅科技的小编来为大家详细介绍下光端机出现故障时该怎样分…

【渝粤教育】 国家开放大学2020年春季 2412基础写作 参考试题

试卷代号&#xff1a;2437 座位号 2 0 2 0年春季学期期末统一考试 微积分基础 试题 2020年7月 附表 导数基本公式&#xff1a; 积分基本公式&#xff1a; 一、单项选择题&#xff08;每小题4分&#xff0c;共20分&#xff09; 1&#xff0e;函数的定义域为( )&#xff0e; A&a…

使用计算机时 开关机顺序会,电脑如何正确开关机

电脑如何正确开关机要使用电脑必须启动它&#xff0c;要停用电脑的时候必须要关闭&#xff0c;电脑如何正确开关机呢&#xff1f;下面是小编分享的经验&#xff0c;一起来看一下吧。电脑开机正确步骤1、先把总电源打开。就是接通主机与显示器的总电源。一般是一个插排&#xff…

【渝粤教育】 国家开放大学2020年春季 2542行政组织学 参考试题

试卷代号&#xff1a;2588 座位号 2 0 2 0年春季学期期末统一考试 管理线性规划入门 试题 2020年7月 一、单项选择题&#xff08;每小题6分&#xff0c;共30分&#xff09; 1&#xff0e;下列( )为单位矩阵。 A&#xff0e; B&#xff0e; C&#xff0e; D&#xff0e; 2&#…

cpythonjavagolang_cpython:列表对象(PyListObject)的扩容机制

list object可变对象头ob_item: 指向分配的空间&#xff0c;元素是指针allocated: 真实容量.Objects/listobjects.c/* Ensure ob_item has room for at least newsize elements, and set* ob_size to newsize. If newsize > ob_size on entry, the content* of the new slot…

【渝粤教育】 国家开放大学2020年春季 2716动物营养基础 参考试题

试卷代号&#xff1a;2721 座位号 2 0 2 0年春季学期期末统一考试 乡镇行政管理试题 2020年7月 一、单项选择题&#xff08;每小题1分&#xff0c;共10分&#xff0c;每小题只有一项答案正确&#xff0c;请将正确答案的序号填在括号内&#xff09; 1&#xff0e; 1926年出版了世…

开关量光端机产品特点及应用范围介绍

飞畅科技生产的开关量光端机为纯开关量(告警量)光端机提供1-7路开关量在光纤中传输&#xff0c;该产品解决了电磁干扰、地环干扰和雷电破坏的难题&#xff0c;提高了数据通讯的可靠性、安全性和保密性&#xff0c;可广泛用于各种工业控制、过程控制和交通控制等场合&#xff0c…

【渝粤教育】 国家开放大学2020年春季 2773特种动物养殖 参考试题

试卷代号&#xff1a;2779 座位号 2 0 2 0年春季学期期末统一考试 植物病虫害防治基础 试题 2020年7月 一、单项选择题&#xff08;每小题3分&#xff0c;共60分&#xff09; 1&#xff0e;非传染性病害与传染性病害诊断程序的不同在于( )。 A&#xff0e;田间观察 B&#xff0…

计算机网络系统什么组成,计算机网络系统是由什么组成的

计算机网络系统是由网络硬件和网络软件组成的。在网络系统中&#xff0c;硬件的选择对网络起着决定的作用&#xff0c;而网络软件则是挖掘网络潜力的工具。一般是指极端机设备、传输介质、和网络连接设备。至2011年&#xff0c;网络连接设备有很多&#xff0c;功能不一&#xf…

ds1302典型应用原理图_不同类型的光纤激光器,在工业中有哪些典型应用

激光器根据材料分类可分为光纤激光器、半导体激光器、固体激光器与C02激光器等。而在整个激光器的工业应用中&#xff0c;光纤激光器独树一帜&#xff0c;近几年发展速度最快。目前光纤激光器的种类越来越多&#xff0c;根据激光输出时域特性的不同&#xff0c;可以将光纤激光器…

【渝粤教育】 国家开放大学2020年春季 3962金融营销基础 参考试题

试卷代号&#xff1a;3983 座位号口口 2 0 2 0年春季学期期末统一考试 品牌管理 试题 2020年7月 一、单项选择题&#xff08;在各题的备选答案中&#xff0c;只有1项是正确的&#xff0c;请将正确答案的序号填写在题中的括号内&#xff0c;每个小题2分&#xff0c;共20分&#…

webapp文本编辑器_Project Student:维护Webapp(可编辑)

webapp文本编辑器这是Project Student的一部分。 其他职位包括带有Jersey的 Web服务 客户端&#xff0c;带有Jersey的 Web服务服务器 &#xff0c; 业务层 &#xff0c; 带有Spring数据的持久性 &#xff0c;分片集成测试数据 &#xff0c; Webservice集成 &#xff0c; JPA标准…

交换机的端口结构及端口类型

交换机在同一时刻可进行多个端口对之间的数据传输。每一端口都可视为独立的物理网段&#xff08;注&#xff1a;非IP网段&#xff09;&#xff0c;连接在其上的网络设备独自享有全部的带宽&#xff0c;无须同其他设备竞争使用。那么&#xff0c;你对于交换机的端口结构及端口类…

【渝粤教育】国家开放大学2018年春季 0025-22T数据结构 参考试题

编号&#xff1a;0025 座位号&#xff1a; 17-18学年第1学期期末考试 数据结构 试题 一、选择题&#xff1a;&#xff08;每题2分&#xff0c;共20分&#xff09; 1&#xff0e;在一个单链表中&#xff0c;若要向指针p指向的结点之后插入一个由指针q指向的结点&#xff0c;则…

qt 加载rtsp流_qt_ffmpeg_rtsp 在QT中拉取RTSP视频流并用FFMPEG解码播放 - 下载 - 搜珍网...

压缩包 : d078f445f64e4d494b78433595b8954d.zip 列表FFmpeg-QT-rtsp/FFmpeg-QT-rtsp/README.mdFFmpeg-QT-rtsp/VideoPlayer_2.proFFmpeg-QT-rtsp/bin/FFmpeg-QT-rtsp/bin/VideoPlayer_2.exeFFmpeg-QT-rtsp/bin/avcodec-58.dllFFmpeg-QT-rtsp/bin/avdevice-58.dllFFmpeg-QT-rts…

表示微型计算机系统稳定性,计算机基础知识(三)135

135、微型计算机的运算器、控制器和内存存器的总称是()A 主机B MPUC ALUD CPU136、在微型计算机中&#xff0c;控制器的基本功能是()A 存储各种控制信息B 保持各种控制状态C 实现算数运算和逻辑运算D 控制机器各个部件协调一致工作137、硬盘与软盘相比()A 硬盘容量小B 硬盘旋转…

【渝粤教育】国家开放大学2018年春季 0077-21T古代汉语专题 参考试题

试卷编号&#xff1a;0077 2017—2018学年度第二学期期末考试 古代汉语专题试题 2018年7月 一、名词解释&#xff08;每小题5分&#xff0c;共20分&#xff09; 1&#xff0e;图画文字2&#xff0e;意动动词3&#xff0e;反切注音 4&#xff0e;区别字 1. 朋 2. 宁 3. 监…

交换机用光纤模块互连一端灯不亮或两端都不亮,如何处理?

交换机用光纤模块互连一端灯不亮或两端都不亮如何处理&#xff0c;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 1、使用dis int 相应的接口确认此模块已经被正确的识别&#xff1b; 2、确认两端设备光模块的物理参数是否一致&#xff0c;如波长、速率、距…

Java 12:使用开关表达式进行映射

在本文中&#xff0c;我们将研究Java 12的新功能“ Switch Expressions”&#xff0c;以及如何与Java 12结合使用。 Stream::map操作和其他一些Stream操作。 了解如何使用流和开关表达式使代码更好。 切换表达式 Java 12附带了对“开关表达式”的“预览”支持。 Switch Expre…