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每个阶段的学习时间

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

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

相关文章

高速信号传输约翰逊 pdf_高速数字电路仿真设计与测试技术发展趋势综述 (一)...

近十多年来&#xff0c;数字集成电路和各种接口总线标准的发展令人眼花缭乱&#xff0c;目不暇接。各个总线标准通常由不同团队制订&#xff0c;其纷繁芜杂的测试和测量技术给从业人员带来许多困扰。本文将就当下的一些主要接口总线标准的仿真设计与测试技术发展趋势作一些简明…

Maven的继承

文章目录什么是继承&#xff1f;如何实现继承&#xff1f;什么是继承&#xff1f; 在聚合多个项目时&#xff0c;如果这些被聚合的项目中需要引入相同的Jar&#xff0c;那么可以将这些Jar写入父pom中&#xff0c;各个子项目继承该pom即可。 如何实现继承&#xff1f; 父pom配…

八中计算机是学啥的,北京八中:居然有这么好玩的课

北京八中&#xff1a;居然有这么好玩的课中国青年报北京12月13日电(记者堵力)种种“稀奇古怪”的科技知识纳入了北京八中学生们的正式课程。每周&#xff0c;所有的学生都会面对各种仪器&#xff0c;学习电台、电脑&#xff0c;以及兵器装备的知识等等———12月13日上午9&…

@builder注解_SpringBoot 整合SpringSecurity示例实现前后分离权限注解+JWT登录认证

一.说明SpringSecurity是一个用于Java 企业级应用程序的安全框架,主要包含用户认证和用户授权两个方面.相比较Shiro而言,Security功能更加的强大,它可以很容易地扩展以满足更多安全控制方面的需求,但也相对它的学习成本会更高,两种框架各有利弊.实际开发中还是要根据业务和项目…

web前端面试问答_Web服务面试问答

web前端面试问答在这篇文章中&#xff0c;我们涵盖了您需要熟悉的Web服务概念的几乎所有部分&#xff0c;以回答任何层级问题。 您还将在分类中找到最佳的Web服务面试问题和答案&#xff0c;因此只有在必要时才可以使用特定条款。 今天可以在各种编程平台上开发各种Web应用程序…

Maven项目的pom.xml文件详解

文章目录pom.xml文件解读标签 dependency 的解读pom.xml文件解读 <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0http://maven.…

u盘装系统学计算机好,教你如何使用u盘做系统

电脑对人们来说是了越来越重要了&#xff0c;怎么说呢&#xff0c;不论是在工作中&#xff0c;还是小孩的学习都需要使用电脑&#xff0c;所以说人们是越来越离不开对电脑的使用了。不过&#xff0c;电脑毕竟是电子产品&#xff0c;所以免不了会出现一些故障问题&#xff0c;比…

使用junit进行单元测试_使用JUnit对ADF应用程序进行单元测试

使用junit进行单元测试JUnit是Java语言的单元测试软件包&#xff0c;由于ADF构建在J2EE框架之上&#xff0c;因此可以用于测试Oracle ADF应用程序。 单元测试基本上是根据某些定义的测试标准来验证最小的可测试模块的过程。 在这里&#xff0c;我将说明如何在JDeveloper 12.2.1…

spring mvc是什么_狂神说SpringMVC01:什么是SpringMVC

狂神说SpringMVC系列连载课程&#xff0c;通俗易懂&#xff0c;基于Spring5版本(视频同步)&#xff0c;欢迎各位狂粉转发关注学习。未经作者授权&#xff0c;禁止转载1、回顾MVC1.1、什么是MVCMVC是模型(Model)、视图(View)、控制器(Controller)的简写&#xff0c;是一种软件设…

Maven的settings.xml范本(含资源仓库镜像配置)

文章目录一、settings.xml 范本二、资源仓库镜像一、settings.xml 范本 <?xml version"1.0" encoding"UTF-8"?> <settings xmlns"http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

java gradle构建_在Gradle中为JPMS构建Java 6-8库

java gradle构建通过提供Java 9 module-info.class了解如何使用Gradle构建支持JPMS&#xff08; Java平台模块系统 &#xff09;的Java 6-8库。 介绍 如果您需要JPMS本身的介绍&#xff0c;请查看此概述 。 这篇文章主要针对Java库维护者。 任何此类维护人员都必须选择要针对…

tcppwebbrower 关闭安全警报_【知识】锅炉与压力容器安全

一、锅炉的主要安全附件1.安全阀安全阀属于泄压装置&#xff0c;能够自动将锅炉工作压力控制在允许范围之内。当炉内超压时&#xff0c;安全阀自动开启&#xff0c;自动泄压&#xff0c;同时发出警报&#xff1b;当炉内压力降到允许范围时&#xff0c;安全阀自动关闭。安全阀使…

macOS下查看Java/JDK的安装目录_查看Java/JDK的版本信息_配置环境变量JAVA_HOME

文章目录查看JDK的安装目录查看系统当前正在使用的 JDK 版本信息配置环境变量 JAVA_HOME查看JDK的安装目录 通常情况下&#xff0c;macOS安装JDK&#xff0c;默认是安装在 /Library/Java/JavaVirtualMachines 目录下。 使用 java_home 命令查看&#xff1a; [~]$ /usr/libex…

java_home命令详解

文章目录命令介绍命令选项说明帮助信息命令介绍 The java_home command returns a path suitable for setting the JAVA_HOME environment variable. It determines this path from the user’s preferred JVM based on configured environment variables. Additional constra…

安全审计报告_企业做税审的五大好处!税审报告和审计报告的区别

税务审计报告是税务审计人员根据税务审计的相关法律、法规&#xff0c;对被审计单位的纳税行为和纳税事项进行评估&#xff0c;并发表意见的书面文件。(咨询&#xff1a;13510890028&#xff0c;肖)一、企业做税审的五大好处:1、可弥补亏损&#xff0c;减少税款支出企业所得税法…

selenium自动化测试_您如何使用Selenium来计算自动化测试的投资回报率?

selenium自动化测试跨浏览器测试是一种测试&#xff0c;需要大量的精力和时间。 通过不同的浏览器&#xff0c;操作系统&#xff0c;设备&#xff0c;屏幕分辨率测试Web应用程序&#xff0c;以评估针对各种受众的Web内容呈现的过程是一项活动。 特别是如果手动处理。 使用Selen…

早期计算机的应用主要是( ) (2分),计算机基础第1次作业(含答案)

重庆大学网络教育学院《计算机应用基础》2008年秋季第一次作业《计算机基础知识和中文WIN XP操作系统》注&#xff1a;[ ]内为考查知识点一、单选题(每题2分&#xff0c;10题共20分)1、早期的计算机体积大、耗能高、速度慢&#xff0c;其主要原因是制约于( )。[计算机的发展及应…

python输出结果空格分割_用Python编写固定宽度,以空格分隔的CSV输出

我想使用Python的csv编写器编写一个固定宽度,空格分隔和最小引用的CSV文件. 输出示例&#xff1a; item1 item2 "next item1" "next item2" anotheritem1 anotheritem2 如果我用 writer.writerow( (“{0:15s}”.format(item1), “{0:15s}”.format(item2))…

macOS下搭建Nexus 3.x服务器作为Maven的资源仓库服务器

文章目录下载 Nexus 服务器安装包安装 Nexus 服务器配置环境变量/启动服务器/停止服务器Nexus 服务器管理后台登录管理后台Blob StoresNexus 初始密码无法登录的问题仓库&#xff08;Repository&#xff09;Nexus 内置的仓库Repository 的 Type 属性创建代理仓库创建本地仓库&a…

宣城校区计算机排名,2017秋大学计算机(合肥工业大学 宣城校区)

1.《大学计算机》课程与其它类似的课程有什么不同&#xff1f;《大学计算机》是面向大学一年级学生开设的计算机通识类课程&#xff0c;类似的还有《大学计算机基础》、《计算机应用基础》&#xff0c;或者《计算机文化基础》、《信息技术基础》等课程&#xff0c;它和这些不同…