java学习心得

Java学习心得

在学习了近一个学期java后,我有了一点自己的见解。Java是面向对象的,具有平台无关性。所以现在被广泛的应用于很多领域。也是因为老师在开始上课的时候就给我们讲过这些,所以带有兴趣和动力去学习java程序设计。

在开始学习java时,觉得有c语言做基础会比较容易一些。Java区分大小写,在一开始调试别人的程序时,常会因为字母、空格等一些小的失误调试不出来,慢慢地随着练习的增多,这些低级错误也渐渐可以避免了。Java中类比较多,还有包等,一开始学起来觉得比较繁琐。

通过学习,对java有了一定的了解。Java的运行原理:Java是一门编译解释型语言,我们写好的Java程序经过编译后生成后缀名为class的文件,在经过Java虚拟机JVM对class文件进行解释运行,Java程序才能运行起来。(需要JVM是它实现跨平台的关键,所以又说Java是跨平台语言)。Java思想:Java是一门面向对向语言,他定义一切都是对象,例如小程序:

public class NewClass {

public static void main( String arg[]){

Student s =new Student();

s.add();

}

}

class Student{ int i=1;int b=3;

public void add(){

int d;

d=i+b;

System.out.println("hello Java"+" "+d);

}

}

运行结果:hello Java 4

里边定义了两个类NewClass 和Student NewClass调用了Student 的add()方法。

课堂上老师根据课本讲的内容都是基础的,要想有进一步的提高,需要课下花时间去求助网络等方法。因为之前我没有太大的兴趣和充足的时间,所以只是学习课本基础知识。后来我从网络上学习了一些关于java程序汇编的一些思想,有助于以后深入系统的学习。

具体而言,学习java其实就是学习程序设计,学习程序设计就需要接受一种编程思想。要掌握java的精华特性而且要知道是什么,比如,Interface和multi-thread。用interface是更好的多继承的模型,而多线程则是设计到语言一级的重要特性。要完全理解interface是为什么,用多线程又有几种常用的编程模型。学习语言是要应用的,所以在掌握基本的思想后要转化为应用。目前比较好的开发模式是采用自定向下的面向对象的设计,加上MVC的模式(MVC架构是

"Model-View-Controller"的缩写,中文翻译为"模型-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。)。首先要找出最顶层的对象(这往往是最难的),然后一层一层往下递归,记住每次应符合7+/-2的原则,因为我们人的短记忆就是这样。一般有图形用户界面的应从界面开始设计。在有了初步的设计模型之后,为了更好的设计程序,应该学习一下设计模式,例如体系结构模式(Layering分层,Pipe/Filter管道或过滤器)、编程模式(比如Copy-on-Write)。懂了这些模式之后,就会对系统的整体结构有很好的把握,而学术上也有倾向一个系统完全可以由各种模式组合而成。对于程序设计,在初步对基本程序进行调试后,应该将纸上谈兵转化成实践。一般课本上的例子不能算是实践,只能知道一些语言特性的应用,而对于实际的工程来讲仅是冰山一角。对于像我们这样的初学者,应该在公认的论坛里面找一些比较经典的例子。比如用Java实现的HotDraw(源自SmallTalk),在rolemodel.com这个网站中,有一些原代码和一些基本设计的文档。从HotDraw上我学到了什么是Framework,以及如何用rolemodel的方式来构造,这样我就可以应用到其他的地方。设计模式目前有23种。 当有了一定的基础之后,按照前辈的建议,用简单的程序实现一些简单的系统。如果可以对他进行进一步的修改,找出自己觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。学习要学以致用,所以要加强实践。我们在看书的时

候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。 对目前的学习状况,应该每天要多敲代码(在敲代码是要按自己的想法去敲,不要只是抄别人的代码),把老师布置的作业做好,好好写实验报告,同时要把自己做过的程序都保存好,有助于以后的复习巩固。如果有更深一步的学习需要,我会看别人推荐的书《(java2 21天自学通)Sams Teach Yourself java 2 in 21 Days,Professional Reference Edition》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》。 学习是一个循序渐进的过程,要在独立思考的基础上遇到不懂的问题向别人求救。万不得已才请教别人。看过一些学习java较好的人的经验是他们在遇到问题时首先自己思考,很多问题稍做思考就可以解决。当必须要请教时,在请教之前,你应该先回答如下几个问题。 1是否在google中搜索了问题的解决办法?

2是否查看了Java API文档?

3是否查找过相关书籍?

4是否写代码测试过?

如果回答都是"是"的话,而且还没有找到解决办法,再问别人不迟。要知道独立思考的能力很重要。我们在其他的学习中也遇到过这样的情况,所以我们清楚独立思考的重要性,它有助于我们更加深入牢固地掌握知识,比向别人求助记得更牢。

总之,每个语言能够存活并且发展起来,必有其特点让人们喜欢,

学习java虽然是课程设置的要求,但随着学习的进一步深入,对它也有了一定的兴趣。现在有很多种计算机语言,语言和语言没有比较的必要的,语言只是工具,重要的是思想!所以在学习的过程中,选定一种感兴趣的语言后,首先学习基本的语句,然后在宏观角度去学习程序设计的思想。

 

第二篇:Java异常学习心得

Java异常学习心得

Java异常学习心得

本文重在Java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。

1. 异常机制

1.1

异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。

1.2

传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。

1.3 异常处理的流程

1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象

1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码

2 异常的分类

2.1 异常的分类

2.1.1

异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。

2.1.2

Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。

2.2 每个类型的异常的特点

2.2.1 Error体系

Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。

2.2.2 Exception体系

Exception体系包括RuntimeException体系和其他非RuntimeException的体系

2.2.2.1 RuntimeException

RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。

2.2.2.2 其他(IOException等等)

这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

2.3 与C++异常分类的不同

2.3.1

其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。

2.3.2

C++中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。

3 异常的使用方法

3.1 声明方法抛出异常

3.1.1 语法:throws(略)

3.1.2 为什么要声明方法抛出异常?

方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

3.1.3 为什么抛出的异常一定是已检查异常?

RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。

3.1.4

注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。

3.2 如何抛出异常

3.2.1 语法:throw(略)

3.2.2 抛出什么异常?

对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。

3.2.3

异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。

3.2.4

创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。

3.3 捕获异常

如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用户界面处理循环中。

3.3.1 语法:try、catch和finally(略)

控制器模块必须紧接在try块后面。若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch

从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。

3.3.1.1 捕获多个异常(注意语法与捕获的顺序)(略)

3.3.1.2 finally的用法与异常处理流程(略)

3.3.2 异常处理做什么?

对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。

3.3.3 应该声明方法抛出异常还是在方法中捕获异常?

原则:捕捉并处理哪些知道如何处理的异常,而传递哪些不知道如何处理的异常

3.3.4 再次抛出异常

3.3.4.1 为什么要再次抛出异常?

在本级中,只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以应该再次抛出异常。这样可以使每级的异常处理器处理它能够处理的异常。

3.3.4.2 异常处理流程

对应与同一try块的catch块将被忽略,抛出的异常将进入更高的一级。

4 关于异常的其他问题

4.1 过度使用异常

首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。

4.2 将异常与普通错误区分开

对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。

4.3 异常对象中包含的信息

一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常

带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。

相关推荐