IT培训网

达内论坛

 找回密码
 立即注册
搜索
查看: 1248|回复: 1

初学Java常常容易犯的错误有哪些

[复制链接]

2052

主题

2251

帖子

7731

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7731
QQ
发表于 2017-7-4 16:00:00 | 显示全部楼层 |阅读模式
Java对于我们生活的影响已经超出了人们的预期。如今,面向对象的编程语言Java已经遍布全球各地,在编程世界中确立了自己独特的地位。尽管Java易于学习,但是它也和其他编程语言一样存在着问题。
为了更准确的知道Java程序员易犯的错误,调查了世界各地25万的Java程序员和3700万个程序。为了扫描这个庞大的数据集,英国肯特大学的Amjad Altadmri和Neil Brown将错误分为18个类别,逐个查找。
Java初级程序员易犯的10个错误
1.符号不匹配,如括号,大括号,括号和引号等只出现单个或者不匹配,例如:while(a == 0]。
2.参数或参数类型调用错误,如list.get("abc").。
3.循环条件不合理,造成死循环。
4.将赋值运算符(=)与比较运算符(==)混淆,如:if(a= b)。
5.忽略或舍弃具有非空返回类型的方法的返回值,例如:myObject.toString();。
6.使用==代替.equals来比较字符串。
7.尝试像静态方法来调用非静态方法,就像它是静态的,如:MyClass.toString(); 。
8.类声明实现一个接口,但不实现所有必需的方法,如:class Y implements ActionListener {}。
9.在调用方法时调用参数类型,例如:myObject.foo(int x,String s); 。
10.if语句或for和while循环中分号不正确,如:if (a==b); return 6;.
通过上面这些错误,不知道大家发现没有,通常最易犯的错误也是最容易发现的,所以在日常编程中一定要严谨仔细。




上一篇:Java未来发展前景如何 编程语言霸主地位是否能捍动
下一篇:Java编程中十个实用但偏执技术你了解几个
回复

使用道具 举报

2052

主题

2251

帖子

7731

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7731
QQ
 楼主| 发表于 2019-9-26 10:04:42 | 显示全部楼层
Java开发中遇到的难点汇总

1、Scanner对象

我们都知道使用”Scanner scanner=new Scanner(System.in);“来进行输入,但如果我们只设置一个scanner对象,即用来输入String型的数据,又用来输入int型的数据会怎样呢?

答案是出错!每一个Scanner对象只能用来输入一种类型的数据,想输入String就创建一个 stringInput对象只用来输入

String数据。绝对不可以在用来输入其他数据!

我们也可以通过String name=new Scanner(System.in).next();的方法进行输入,每要输入一个数据,就新建一个Scanner对象。

2、关于static

最基本的我们都知道static方法只能引用static型的数据,而实例方法既能引用一般数据,也能引用static数据。

下面两个例子是我在编程中遇到的关于static问题。

例1:

我们要创建一个test类,可以时刻追踪到test类创建了多少个对象。

class test{

int sum=0;

test(){ ++sum;System.out.ptintln(“test类共创建了”+sum+“个对象!”);}

}

在主类的方法中测试test test1=new test();test test1=new test();test test1=new test();

当创建一个对象是都会输出“test类共创建了1个对象!”这是为什么呢?

因为每次创建类时sum都会被初始化为0,即每次都会为sum重新开辟一个内存空间,所以每次执行都会输出1.

解决方法:把sum设置为static型, static int sum=0;

这样每次创建test对象时,sum的内存被固定,可以正确记录test创建了多少个对象!

例2:

我们定义一个A类,

A{

private static int sum=0;

public static void addAuto(){sum=sum+10;}

}

然后定义B和C类,B extends A{}, C extends A{};  B和C类和A相同。

这是我们用A的对象引用B C的对象(根据多态性): A a1=new B();A a2=new C();

a1.addAuto();System.out.println(a1.sum);//结果为10

a2.addAuto();System.out.println(a2.sum);//结果为20 ???

我们新建了两个对象,a1和a2的结果应该是相同的,为什么a2中的sum值会是20呢?

因为A中为static方法,我们创建的a1的内存为10;在创建一个a2,此时a2的内存是20,它继承了a1,

所以会在a1的基础上继续+10.

3、关于JAVA类数组

对于一些类似于学生管理系统或者客户管理系统,可能需要我们设置一个数组,用来存一定数量的信息,

用来实现增删改查。如一个student类,来创建一个学生类数组students[];

如果增添一个学生信息,我们是否可以直接利用下面的方法呢?

students[0].setName(new Scanner(System.in).next());//输入一个学生的姓名

students[0].setId(new Scanner(System.in).nextInt());//学号

students[0].setScore(new Scanner(System.in).nextInt());//分数

答案是不能!对于students数组,我们只是声明,并没有为其分配内存空间,所以类似于链表的节点,

我们需要创建一个中介student mid=new student();然后给mid进行上面的输入操作,然后把mid赋给

students[0]。

4、《String.equals()》

对于两个字符判断是否相等,我们习惯用下面的方法:


java开发中遇到的难点有哪些_java开发常见的问题及解决办法

这种方法是错误的,在我们运行程序过程中不难发现。在JAVA中判断两个字符串相等是不可以用==的方法。

而是通过if(str1.equals(str2))

我们常用的通过名字来进行查找,删除,修改都会用到。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

IT培训网

QQ|小黑屋|手机版|cnitedu Inc. ( 豫ICP备16023996号-1 )

GMT+8, 2019-10-15 02:34 , Processed in 0.128876 second(s), 12 queries , File On.

Powered by Discuz! X3.3

© 2011-2017 cnitedu Inc.

快速回复 返回顶部 返回列表