java备忘录_备忘单:适用于初学者的Java指针

java备忘录

我们都是从初学者开始的。 今天,我将解释Java的基础知识,从生态系统到其执行等等。 我们将花一些时间探索Hello,World和命令行,最后,我们将深入探讨Java初学者的一些常见错误以及如何编写出这些漏洞的代码。 让我们开始吧!

Java主要基础架构组件

Java开发工具包(JDK)包含以下组件:Java运行时环境,工具和工具API和Java语言。 Java运行时环境本身包括Java虚拟机,lang和util基本库,其他基本库。 此外,我们还有集成库,用户界面工具包和部署。 没有部署的所有这些都代表Java SE API。

HotSpot JVM的体系结构由类加载器子系统,运行时数据区和执行引擎表示。 我们也有本地方法库。

Java程序流程的执行

计算机如何准确地理解代码? 这是相当标准的操作顺序。

  1. 命令行参数被解析
  2. 分配了所需的内存
  3. 环境变量已加载
  4. 找到具有要执行的main方法的类
  5. 虚拟机的创建和初始化
  6. 带有main方法的类已加载
  7. 主方法执行
  8. 执行完成后,返回结果
  9. 虚拟机被破坏

Hello World示例

首先,您需要在名为PatsovHelloWorldExample.java的文件中添加以下文本:

public class PatsovHelloWorldExample {
   public static void main( String[] args ) {
      System. out .println( "Hello World!" );
   }
}

根据您的喜好,您可以选择使用IDE或文本编辑器。 如果您使用过IDE,那么下一步就是运行程序。 如果使用文本编辑器创建了文件,则需要在终端中使用“ javac PatsovHelloWorldExample.java”编译文件,并在终端中再次使用“ java PatsovHelloWorldExample”运行。 在图2中,我们可以看到预期的结果。

Hello World示例

命令行选项

启动JVM时,我们可以传递一些其他参数以控制

应用程序的执行和一些环境变量。 语法如下:“ java [这里我们添加一些选项] -jar filToBeExecuted.jar [这里我们将一些参数传递给我们的应用程序]

“ java [此处添加一些选项] -jar filToBeExecuted.jar [此处将一些参数传递给应用程序]

一个带有真实参数的实际示例是:“ java -classpath MyApplication.jar the.package.ClassWithMainMethod”

其中一些选项是“服务器”,“客户端”,“类路径”和“帮助”。 在参数中,我们可以传递所需的任何信息,这取决于我们如何开发应用程序以及想要实现的目标。

原始类型

在这里,我们有一个字节,由一个8位整数表示,值在[-128,127]之间,还有一个short数据类型,具有16位整数,分别在[-32 768,32 767]之间。 我们有一个int数据类型,它是一个32位整数,其值在[-2 31,2 31 -1]之间,而long则是一个64位整数,以及浮点数float和double,其中float是单-精度为32位IEEE 754浮点,而double则为双精度64位IEEE 754浮点。 我们还有一个布尔值,它是true或false,而char是一个16位Unicode字符。

对于货币,您将需要使用java.math.BigDecimal类,对于真正的大整数,您将需要java.math.BigInteger类。

集合

实际上,所有集合都代表一个容器,该容器将一些逻辑连接的组件分组为一个整体。 它们通常分为3种类型:用于通用目的(例如ArrayList,LinkedList,TreeMap,TreeSet,HashMap和HashSet),并发的(例如ConcurrentMap,ArrayBlockingQueue,Vector,LinkedBlockingQueue和PriorityBlockingQueue)和专用的(如EnumSet,CopyOnWriteArraySet和WeakHashMap)。

该系列最适合:

  • 排序
  • 正在搜寻
  • 改组
  • 操作–反向,填充,复制,交换,批量添加
  • 查找最大值/最小值

常用表达

为了获得最佳学习效果,建议解决RegEx填字游戏。 一些最著名的模式匹配表达式是:

  • ^ –用于匹配行首,
  • $ –用于匹配行尾,
  • 。 –用于匹配除新行以外的任何字符
  • [此处是一些字符] –用于指定一组字符,从中只能匹配一个字符,
  • [^ asd] –用于匹配未列出的任何字符(排除),
  • * –用于匹配0个或多个在此之前出现的表达式(例如asd *匹配“ as”和“ asd”),
  • + –匹配之前出现的1个或多个表达式,
  • ? –匹配之前出现0或1个表达式

常见问题以及如何避免

问题:空指针异常–当我们实际上需要对象时尝试使用null时,会发生这种异常
解决方案:如果您的对象可能在某个时候变为空,则应考虑向代码中添加空检查,尤其是当您不是自己创建对象时。 同样,最好返回空集合而不是null。 添加验证以设置和获取方法也是一个好主意。

问题:将比较运算符(==)与赋值运算符(=)混淆。
解决方案:如果您来自另一种语言,则需要一些时间来适应。 我用来记住这一点的一个简单技巧是:如果您知道只对其中一个值感兴趣(正在将一个值分配给另一个值),请使用单个“ =”,否则,如果您关心两个变量和值(正在比较它们),您需要使用双“ ==”

问题:使用比较运算符(==)代替.equals()来检查相等的字符串。
解决方案:不会使用比较运算符(==)检查所有Java对象是否相等。 相反,我们使用.equals()方法。 在Java中,String是不可变的对象,而不是原始类型。

问题:无法正确使用访问修饰符(私有,受保护,公共和默认)
解决方案:尝试以更面向对象的方式进行思考。 在实施之前要多加思考。 “我应该能够从课堂之外调用该方法吗? 我是否有权这样做?” 了解有关信息隐藏,松散耦合和创建应用程序层的更多信息。

问题:通过实现现有的库和工具来尝试彻底改变方向。
解决方案:了解Java标准库。 与其他程序员进行更多配对编程。 阅读本文,其中包含所有推荐的Java工具。 尝试自己找到工具。 了解如何使用Google和Stack Overflow。

问题:通过对对象的引用来更改对象的状态。 当get方法返回可变对象时,通常会发生这种情况。 这是非常不安全的!
解决方案:学习正确使用访问修饰符。 在get方法中返回不可变的对象。 创建get方法时,请始终考虑是否有可能实现该对象,并在返回对象后对其状态进行不希望的更改。 了解如何在Java内存中定位和引用对象。 不要对通过值传递和通过引用传递感到困惑!

问题:语法错误,拼写错误,使用错误的重载函数,花费太多时间单击IDE中的菜单以实现所需的功能。
解决方案:获得一个不错的IDE。 语法错误将在较早时检测出来,您将可以修复它们。 了解IDE的功能。 了解最常见的快捷方式,以便在开发时节省时间。 正确设置代码格式。 请勿经常更改您的IDE,或者如果可以的话,请不要更改。 认真学习。 这将成为您最好的自我延伸。 使用有意义的变量名。

问题:资源没有被释放。 您打开一些连接/文件/资源​​,然后不关闭它。
解决方案:这是实现java.lang.Autocloseable接口的任何类的“ Try-with-resources”语句。 在执行try块之后,将自动关闭try()部分中所有打开的资源。 下面的例子:

public class TryWithResources {
   public static void main(String[] args) {
      try (BufferedReader br =
         new BufferedReader(
            new FileReader(
               System. getProperty ( "user.home" ) +
                  "/Downloads/text.txt" ))) {
         System. out .println(br.readLine());
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

问题:将字符串串联在一起。 不要在家尝试这个。 仅在家长咨询下允许。 在每个字符串连接上,都会创建一个新的String对象(字符串是不可变的)。 在某些时候,您将耗尽内存,或者开始执行将花费太多时间。
解决方案:在循环中串联内容时,请使用StringBuilder而不是String。

问题:循环执行SQL查询。
解决方案:尽可能优化对数据库的查询,因为执行查询是一项非常昂贵的操作。 尝试通过单个查询获取所有必要的信息,然后遍历结果。

问题:空的捕获块/忽略异常
解决方案:最少可以做的就是将异常的堆栈跟踪信息打印到默认输出。 通常,您可以将某些记录器用作Log4j,并使信息记录更加容易。

问题:调用run()而不是start()来启动线程。
解决方案:直接调用run()是错误的。 这是一个非常常见的错误。 始终使用start()! 另外,建议实现Runnable接口,而不要继承Thread类。

问题:实施时考虑不足。 一些结果可能是:死锁,从静态上下文中调用非静态方法,在迭代集合和所有逻辑错误时以错误的方式删除项目。
解决方案:思考。 设计。 观察一下。 如果您有一个小时来解决问题,请花50分钟考虑解决方案,并花10分钟进行实际执行。

推荐建议

在线上有很多资源可供初学者和专家使用。 虽然这些是我的最爱,但还有更多可用的库,工具和框架。 这些是我的建议,可帮助任何人入门:

  • Java SE – 8 [1]
  • 春天[2]
  • IntelliJ IDEA [3]
  • 角形的[4]
  • Tomcat[5]
  • 专家[6]
  • 吉特[7]

参考资料

[1] www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

[2] https://spring.io

[3] https://www.jetbrains.com/idea/

[4] https://angular.io

[5] tomcat.apache.org

[6] https://git-scm.com

要查看更多备忘单,请下载最新一期的《 JAX杂志》:

当您不了解某些内容时,备忘单是一个天赐之物–无论您准备得如何好,这种情况都会发生。 编程不是一场“谁做得更好”的竞赛,它就像学习一种新语言一样困难:花些时间才能掌握它并掌握其所有方面(语法,语义和语用学)。 有时它可能会令人生畏,这就是为什么以下备忘单会派上用场的原因:Java,JavaScript,Scala,Kotlin和Dart。

并且由于我们在这里学习有关编程语言的更多信息,为什么不更深入地研究JVM? 我保证,这会很有趣。


翻译自: https://jaxenter.com/cheat-sheet-java-pointers-beginners-136282.html

java备忘录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值