编程实验
Java是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现均支持Java applet。
本文主要介绍的是java开发,首先介绍了java开发的过程,其次介绍了java开发中遇到的难点,最后阐述了java开发常见的问题及解决办法,具体的跟随小编一起来了解一下。
Java 的开发总要经过立项一设计一一编码一一测试等诸多过程,下面先来介绍一下Java 开发中的这些开发经验。
1、立项
这个时候需要做的是需求的收集,开发人员需要重视需求。机会总是倾向有准备的人,成功自然也是这样。开发人员不但要做好需求分析,还要做出精确的估计。因为编码工作保质保量的按时完成需要多方的准备工作,技术难点需要进行充分的技术预言,不熟悉的依赖平台或类库要进行熟悉。
2、设计
设计的时候要善用图,因为通过图可以将模块结构以及流程等很难用用文字描述的内容清晰的表达出来。
此外,设计的时候要耐得住详细设计过程中的繁琐、痛苦,要以快乐的心态面对。
3、编码
编码工作需要保持细致、认真、严谨的工作的工作态度,做出的编码不能仓促、草率,要考虑周到。在逻辑、风格、简单有效等方面拿出你的最好,既能更好为公司实现价值,同时更有利自己在技能,岗位的进步。
4、测试
编写的代码不能因为一时的疏漏而造成后期工作麻烦,开发人员都要将自己编写的代码详细的测试一下,验证无误再提交,这样才能成为一个优秀的开发人员。
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中判断两个字符串相等是不可以用==的方法。
而是通过if(str1.equals(str2))
我们常用的通过名字来进行查找,删除,修改都会用到。
1、 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常, java.lang.IndexOutOfBoundsException。遇到该问题,需检查索引值是否正确
2、空指针异常。这个是java开发中最常见的问题之一,碰到空指针异常,首先需要定位是哪一句出现了异常,然后再判断是那个对象出现了异常,常用debug模式进行调试
3、类型转换异常,java.lang.ClassCastException。遇到这样的异常的时候如何解决呢?如果你知道要访问的的对象的具体类型,直接转换成该类型即可。如果不能确定类型可以通过下面的两种方式进行处理(假设对象为o):
一、通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,然后根据类型进行进行具体的处理。
二、通过if(o instanceof 类型)的语句来判断o的类型是什么。
例如下面例子:Student和Teacher分别是Person的子类,强制将一个Student对象转换称Teacher对象,就会抛出ClassCastException。
4、内存溢出异常,java.lang.OutOfMemoryError。我们可以通过
手动改变tomcat启动时的MaxPermSize和PermSize。
在tomcat的bin目录下找到catalina.sh,找到
echo “Using CATALINA_BASE: $CATALINA_BASE”这一行,在上面加入以下语句:
JAVA_OPTS=“-server -XX:PermSize=64M -XX:MaxPermSize=256m”
5、文件找不到异常java.io.FileNotFoundException也是我们在开发中经常遇到的问题。抛出该异常时,我们需要去检查文件路径是否正确,或者是否存在。
6、jdk版本不同导致的异常,此时我们需要检查jdk版本。软件版本一般是向下兼容的,java虚拟机也不例外,即低版本虚拟机生成的class文件可以在高版本虚拟机中运行,反之则未必可以(向上兼容)。
全部0条评论
快来发表一下你的评论吧 !