学习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()>

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

String str1="JAVA";

String str2=new Scanner(System.in).next();

if(str1==str2){.....}

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

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

我们常用的通过名字来进行查找,删除,修改都会用到。

 

 

posted on 2017-11-25 17:17  雁夜  阅读(6988)  评论(0编辑  收藏  举报