返回顶部
首页 > 资讯 > 精选 >Java初学者的30个常见问题都有哪些
  • 656
分享到

Java初学者的30个常见问题都有哪些

2023-06-17 08:06:40 656人浏览 八月长安
摘要

Java初学者的30个常见问题都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区

Java初学者的30个常见问题都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需要花费大量时间? 为什么Java库不用随机pivot方式的快速排序

1.2 基本数据类型

Q. 为什么 -0/3 结果是 0,而 -0.0/3.0 结果是 -0.0?(注意后边的结果0带负号)

A. 在Java里,整数是用补码表示的。在补码中0只有一种表示方法。另一方面,浮点数则是用 IEEE 标准表示的, 对于0有两种表示方法, 0 和 -0。

Q. 我可以用 % 除以一个小数吗?

A. 当然可以。比如,如果 angle 是一个非负数,那么 angle % (2 * Math.PI) 就会把 angle 转换到 0 到 2 π 之间。

Q. 当 a b 都是基本类型变量时,a += b 和 a = a + b 的效果有区别吗?

A. 当 a 和 b 的类型不同时,那两条语句的效果就可能有区别。 a += b 等同于 a = (int) (a + b),这种情况下可以是 a是int型,b是float型。但是同等情况下 a = a + b 就会编译报错。

1.3 条件语句和循环语句

Q. 为什么判断字符串相等不能使用 == ?

A. 这反映了基础类型(int, double, boolean)和引用类型(String)的区别。

Q. 有没有在什么情况下,一条语句块的花括号不能省略的?

A. 在下面的例子中,***段代码是合法的,第二段代码会引发编译错误。从技术角度说,那一条语句是一个变量声明,而不是语句,所以会报错。

// legal  for (int i = 0; i <= N; i++) {     int x = 5;  }   // illegal  for (int i = 0; i <= N; i++)     int x = 5;

Q. 在下面的两段代码里,有没有情况,它们的效果不一样?

for (<init stmnt> <boolean expr>; <incr stmnt>) {     <body statements>  }   <init stmnt>;  while (<boolean expr>) {     <body statements>     <incr stmnt>  }

A. 有的。如果在循环块里使用 continue 语句。在for的代码里,计数器会加一;而在while的代码里,因为被continue略过了,计数器不加一。

1.4 数组

Q. 某些Java开发人员使用 int a[] 而不是 int[] a 去声明一个数组。这两者有什么区别?

A. 在Java中这两种用法都是合法的,他们的作用都是一样的。前者是在C中的定义数组的方法。后者是JAVA推荐的方法,因为它的写法 int[] 更能表明这是一个 int 的数组。

Q. 为什么数组下标从0 开始 而不是从 1 开始?

A. 这种传统起源于机器语言的编程方法。在机器语言中,数组下标被用来计算元素位置与***个元素之间的偏移量。如果从1开始的话,计算偏移时还需要做一次减法运算,那是种浪费。

Q. 如果我用 负数 作为数组下标会发生什么事?

A. 下标小于0 或者 大于等于数组长度,JAVA运行时会抛出 ArrayIndexOutOfBoundsException 异常,并且中止程序运行。

Q. 使用数组时还有其他需要注意的陷阱吗?

A. 需要记住,JAVA在你创建一个数组时会去初始化它,所以声明一个数组需要 O(N)的时间。

Q. 既然 a[] 是一个数组,为什么 System.out.println(a) 会打印出一个16进制的数,就像 @f62373 这样,而不是打印出数组的元素?

A. 好问题。这条语句打印出的是 数组在内存中的地址,不幸的是,在绝大多数情况下,这不是你需要的。

1.5 输入输出语句

Q. 我可以从标准input中重新读一次数据吗?

A. 不可以,你只能读一次。

Q. 怎样输入 end-of-file (eof) 符号?

A. 操作系统自动包括它了。

Q. 使用 printf() 时还有哪些用法?

A. 对于整数来说,使用 o 输出八进制,使用 x 输出十六进制。对于浮点数来说,使用 e 或者 g 输出科学计数法形式。

Q. 行结束的符号是什么?

A. 不同的文件系统使用了不同的符号。在 Unix 系统上,新行的符号是 '\n' ;在 windows 系统上,每一行都有两个字符组成的字符串终结 "\r\n" ;在 Macs 系统上,终结符号是 "\n\r" 。如果要打印行号,可以使用 System.out.println() ,或者使用下面的语句得到当前操作系统下的行结束符:

String NEWLINE = System.getProperty("line.separator");

Q. 下面两种写法,哪一种更有效率?

String s;                           while (!StdIn.isEmpty()) {        while (!StdIn.isEmpty()) {      s = StdIn.readString();           String s = StdIn.readString();      ...                               ...  }                                 }

A. 从效率角度说,两者没有区别。 但是第二种写法更好,因为它限制了变量的作用域。

2.1 函数调用

Q. 当把数组当作函数调用时的参数时,我常常感到疑惑?

A. 是的。你需要牢记传值参数(参数是基本变量类型)和传引用参数(比如数组)之间的区别。

Q. 那为什么不把所有的参数都使用传值的方式,包括对待数组?

A. 但数组很大时,复制数组需要大量的性能开销。因为这个原因,绝大多数变成语言支持把数组传入函数但不复制一个副本&mdash;&mdash;MATLAB语言除外。

2.3 递归调用

Q. 有没有只能用循环而不能用递归的情况?

A. 不可能,所有的循环都可以用递归替代,虽然大多数情况下,递归需要额外的内存。

Q. 有没有只能用递归而不能用循环的情况?

A. 不肯能,所有的递归调用都可以用循环来表示。比如你可以用while的方式来实现栈。

Q. 那我应该选择哪个,递归的方式 还是 循环的方式?

A. 根据代码的可读性和效率性之间做权衡。

Q. 我担心使用递归代码时的空间开销和重复计算(例如用递归解Fibonacci)的问题。有没有其他需要担心的?

A. 在递归代码中创建大数据类型(比如数组)时需要额外注意,随着递归的推进,内存使用将会迅速增加,由于内存使用增加,操作系统管理内存的时间开销也会增加。

4.2 排序与查找

Q. 为什么我们要花大篇幅来证明一个程序是正确的?

A. 为了防止错误的结果。二分查找就是一个例子。现在,你懂得了二分查找的原理,你就能把递归形式的二分查找改写成循环形式的二分查找。Knuth 教授在 1946年就发表了二分查找的论文,但是***个正确的二分查找的程序在 1962年在出现。

Q. 在JAVA内建库中有没有排序和查找的函数?

A. 有的。在 java.util.Arrays 中包含了 Arrays.sort() 和 Arrays.binarySearch() 方法。对于Comparable 类型它使用了 归并排序,对于基本数据类型,它使用了快速排序。因为基本类型是值传递,快速排序比归并排序更快而且不需要额外的空间。

Q. 为什么JAVA库不用 随机pivot方式的快速排序?

A. 好问题。 因为某些程序员在调试代码时,可能需要确定性的代码实现。使用随机pivot违背了这个原则。

4.3 栈和队列

Q. 在Java库中有对stacks 和 queues 的实现吗?

A. Java库中内建 java.util.Stack,但是你应该避免使用它如果你需要一个真正的栈的话。因为它是实现了额外的功能,比如访问第N个元素。另外,它也支持从栈底部插入元素,所以它看上去更像是一个队列。尽管实现了这些额外的功能对编程人员是一个加分,可是我们使用数据结构并不只是想使用所有功能,而是需要我们正好需要的那种结构。JAVA对于栈的实现就是一个典型的宽接口的例子。

Q. 我想使用数组来表示一个包含泛型的栈,但是以下代码编译报错。为什么?

private Item[] a = new Item[max];   oldfirst = first;

A. 不错的尝试。不幸的是,创建一个泛型数组在 Java 1.5里不支持。你可以使用cast,比如下面的写法:

private Item[] a = (Item[]) new Object[max];   oldfirst = first;

根本的原因是JAVA中的数组是“协变的(covariant)”,但是泛型并不是。比如, String[] 是 Object[]的一种子类型,但是 Stack<String>并不是 Stack<Object> 的一种子类型。 许多程序员认为“协变的”数组是JAVA在数据类型方面的一个缺点。但是,如果我们不考虑泛型,“协变的”数组是有用的,比如实现 Arrays.sort(Comparable[]) 方法,然后当参数是 String[]时它也可以被正常调用。

Q. 可不可以在数组上使用 foreach 方式?

A. 可以的(虽然 数组并没有实现 Iterator 接口)。请参考下面的代码:

public static void main(String[] args) {     for (String s : args)        StdOut.println(s);  }

Q. 在 linked list 上使用 iterator 是不是比循环或者递归更有效率?

A. 编译器在翻译时,可能把那种“尾递归”形式翻译成等价的循环形式。所以可能并没有可以被观测到的性能提升。

尾部递归是一种编程技巧。如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。尾递归是极其重要的,不用尾递归,函数的堆栈耗用难以估量,需要保存很多中间函数的堆栈。比如f(n, sum) = f(n-1) + value(n) + sum; 会保存n个函数调用堆栈,而使用尾递归f(n, sum) = f(n-1, sum+value(n)); 这样则只保留后一个函数堆栈即可,之前的可优化删去。

Q. 自动装箱机制会怎么处理下面的情况?

Integer a = null;  int b = a;

A. 它将返回一个运行时错误。基础类型不允许它对应的装箱类型里的值是null。

Q. 为什么***组打印的是 true,但是后面两组打印的是 false?

Integer a1 = 100;  Integer a2 = 100;  System.out.println(a1 == a2);   // true   Integer b1 = new Integer(100);  Integer b2 = new Integer(100);  System.out.println(b1 == b2);   // false   Integer c1 = 150;  Integer c2 = 150;  System.out.println(c1 == c2);   // false

A. 第二组代码打印 false 是因为 b1 和 b2 指向不同的 Integer 对象引用。***组和第三组依赖于自动装箱机制。 令人意外的***组打印了 true 是因为在 -128 和 127 之间的值会自动转换成同样的immutable型的Integer 对象。对于超出那个范围的数,Java会对于每一个数创建一个新的Integer对象。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: Java初学者的30个常见问题都有哪些

本文链接: https://lsjlt.com/news/288061.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java初学者的30个常见问题都有哪些
    Java初学者的30个常见问题都有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。我可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区...
    99+
    2023-06-17
  • 每个Java初学者都应该搞懂的问题有哪些
    这篇文章主要为大家展示了“每个Java初学者都应该搞懂的问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“每个Java初学者都应该搞懂的问题有哪些”这篇文章吧。每个Java初学者都应该搞懂...
    99+
    2023-06-03
  • php初学者常见的错误有哪些
    这篇“php初学者常见的错误有哪些”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“php初学者常见的错误有哪些”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们...
    99+
    2023-06-06
  • Java初学者容易混淆的问题有哪些
    今天小编给大家分享一下Java初学者容易混淆的问题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.String类和S...
    99+
    2023-06-03
  • Java初学者要注意哪些问题
    这篇文章主要介绍“Java初学者要注意哪些问题”,在日常操作中,相信很多人在Java初学者要注意哪些问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java初学者要注意哪些问题”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-03
  • HTML 有序列表:初学者必备的 5 个常见问题解答
    1. 如何在 HTML 中创建有序列表? 要创建有序列表,可以使用 元素。在 元素内,可以使用 元素来表示列表中的每个项目。 <ol> <li>第一项</li> <li>第二...
    99+
    2024-02-22
    HTML 有序列表 ol li 数字列表 字母列表
  • Go语言初学者常见问题解答
    Go语言初学者常见问题解答 随着Go语言在互联网和软件开发领域的不断普及,越来越多的初学者开始接触并学习这门语言。然而,在学习过程中常常会遇到各种问题,本文将针对一些常见问题提供解答,...
    99+
    2024-03-05
    错误 学习 语法 go语言
  • Java常见问题有哪些
    这篇文章给大家分享的是有关Java常见问题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问: 如何设置Java 2(JDK1.2)的环境变量    答: Java 2安装后,需要设置PATH和JA...
    99+
    2023-06-03
  • Html学习常见问题有哪些
    今天小编给大家分享一下Html学习常见问题有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • C#初学者对Equals方法的常见误解有哪些
    本篇内容介绍了“C#初学者对Equals方法的常见误解有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们都知道,在C#的世界里存在两种...
    99+
    2023-06-17
  • Mysql MHA部署的常见问题都有哪些呢
    这篇文章将为大家详细讲解有关Mysql MHA部署的常见问题都有哪些呢,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Mysql MHA部署-07常见问题架构...
    99+
    2024-04-02
  • Shell 初学者必读:Python 面试中的常见问题
    在 Python 面试中,Shell 的知识也是不可或缺的。作为一名初学者,你需要掌握一些常见的 Shell 命令,以及它们在 Python 中的使用方法。在本篇文章中,我们将会介绍一些常见的 Shell 命令,并演示它们在 Python...
    99+
    2023-10-16
    面试 shell 教程
  • ASP 语法基础:初学者常见问题的解答
    ASP(Active Server Pages)是一种服务器端脚本语言,用于创建动态且交互式的网页。它是一个基于文本的脚本技术,嵌入在 HTML 或 XML 文档中。 2. 如何运行 ASP 脚本? 要运行 ASP 脚本,您需要: 安装...
    99+
    2024-04-02
  • 程序人生:初学者最常问的几个问题
    所属网站分类: 程序员的那点事 作者:熊猫烧香 原文链接: http://www.pythonheidong.com/blog/article/470/ 来源:python黑洞网 www.pythonheidong.com  ...
    99+
    2023-01-31
    几个问题 初学者 最常
  • VUE项目初建和常见问题有哪些
    这篇文章将为大家详细讲解有关VUE项目初建和常见问题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。拿猫眼为例:步骤:需要预装node.js1. 查看node版本,控...
    99+
    2024-04-02
  • MySQL关于事务常见的问题都有哪些呢
    这期内容当中小编将会给大家带来有关MySQL关于事务常见的问题都有哪些呢,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。所谓事务,是指一组相互依赖的操作单位的集合,用来保证...
    99+
    2024-04-02
  • Java面试题中常见的问题有哪些
    本篇内容主要讲解“Java面试题中常见的问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java面试题中常见的问题有哪些”吧!  1、java 中会存在内存泄漏吗,请简单描述。  答:会...
    99+
    2023-06-02
  • Java编程中常见的问题有哪些
    本篇内容介绍了“Java编程中常见的问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!字符串连接误用错误的写法:String ...
    99+
    2023-06-17
  • JAVA编程中的常见问题有哪些
    本篇内容主要讲解“JAVA编程中的常见问题有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA编程中的常见问题有哪些”吧!问题一:编译器找不到类。解决方法:确保你已经导入了类或者它的包。...
    99+
    2023-06-17
  • 常见的Java多线程问题有哪些
    这篇文章主要介绍常见的Java多线程问题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作