读过杨晓峰老师的36讲之后,想总结下自己的感想,写下来也有助于记忆,方便以后面试查阅和复习。题目所提到的话题本来是两讲,但是由于感想篇幅较短,所以合成一篇来写。

一、谈谈对Java平台的理解:

1、Java平台是一个面向对象编程的语言,具有封装、继承、多态三大特性。其最大的优点是"Write Once,Run Anywhere",即编写一次,到处运行,这句话的基础实际上是依靠Java通过字节码和Java虚拟机(JVM)这种跨平台的抽象,屏蔽了操作系统和硬件的细节。具体如何实现呢,或者说如何理解呢。众所周知,Java代码从编写到运行需要经过三个阶段。即代码编译为字节码,然后由JVM将字节码解释为机器码,机器码运行。之所以可以Run Anywhere,是因为JVM可以安装到不同的平台上,将编译好的.class文件(字节码)根据不同平台的实现解释为不同的机器码,实现跨平台。即Java语言的跨平台实际上指的是JVM跨平台,而不是语言本身
2、有人说Java是解释性语言,这样说实际上是不准确的,因为在主流Java虚拟机如Oracle Hotspot 中,会提供JIT(juts-in-time)即“即时编译”。JIT会将热点代码直接编译为机器码,使得Java运行速度有显著提升。所以说Java是解释性语言其实是不准确的。

还需要了解的地方:AOT(Ahead-of-Time Compilation)、Class-Loader(类加载器)、JDK包含哪些工具等。

二、Exception和Error有什么区别。
1、Exception 和 Error 都继承了Throwable类,在Java中只有Throwable类的实例(包括子类实例)才可以被抛出(throw)或者捕获(catch)。Exception和Error都体现了Java设计者对不同异常情况的分类。
2、Error通常表示正常情况下不会出现的错误,或出现后很难由程序本身修复的错误,例如OOM(Out Of Memory Error)或者NoClassDefFoundError等
3、Exception又分为运行时异常和一般异常(文章中分为可检查异常和不检查异常,其本质是一样的)。运行时异常通常可以通过编码判断来避免的逻辑错误,如NullPointerException,ClassCastException等。而一般异常则是需要在编写代码时需要用try…catch…finally或throws捕获或抛出的异常。
4、捕获异常时需要注意几点,一个是尽量不要捕获类似于Exception这样的通用异常,否则有可能会把不想捕获的异常也捕获到例如本想捕获NoSuchMethodException,结果把NullPointerException也捕获到了,这样就无法判断到底是类对象为空还是没有这个方法,干扰问题的定位。第二个是不要使用e.printStackTrace();这样的代码,特别是在产品代码中,因为用这个方法最后异常堆栈轨迹是不知道打印到哪里去的。第三点则是Throw early,catch late原则,具体可以查看文章这里不再展开说。第四点,try…catch…finally块尽量只用来包裹需要抛出异常的那一句或者几句代码。有的时候程序员或许因为程序代码的可读性和美观性,将一大段代码用try…catch…finally包裹,实际上这样对性能的损耗是非常大的。
5、看到文中有提NoClassDefFoundError和ClassNotFoundException的区别,这里引用网上一篇文章《
怎么解决java.lang.NoClassDefFoundError错误》的一段话来解释

我们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误迷惑不清,尽管他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError的错误,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而发生的错误。ClassNotFoundException比NoClassDefFoundError容易解决,是因为在编译时我们就知道错误发生,并且完全是由于环境的问题导致。而如果你在J2EE的环境下工作,并且得到NoClassDefFoundError的异常,而且对应的错误的类是确实存在的,这说明这个类对于类加载器来说,可能是不可见的。

最后举几个运行时异常和非运行时异常:

运行时异常:
ArithmeticException——由于除数为0引起的异常;
ArrayStoreException——由于数组存储空间不够引起的异常;
ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常;
IllegalMonitorStateException——监控器状态出错引起的异常;
NegativeArraySizeException—一数组长度是负数,则产生异常;
NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常;
OutofMemoryException——用new语句创建对象时,如系统无法为其分配内存空 间则产生异常;
SecurityException——由于访问了不应访问的指针,使安全性出问题而引起异常;
IndexOutOfBoundsExcention——由于数组下标越界或字符串访问越界引起异常;
IOException——由于文件未找到、未打开或者I/O操作不能进行而引起异常;
ClassNotFoundException——未找到指定名字的类或接口引起异常;
CloneNotSupportedException——一程序中的一个对象引用Object类的clone方法,但 此对象并没有连接Cloneable接口,从而引起异常;
InterruptedException—一当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述;
NoSuchMethodException一所调用的方法未找到,引起异常;
Illega1AccessExcePtion—一试图访问一个非public方法;
StringIndexOutOfBoundsException——访问字符串序号越界,引起异常;
ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;
NumberFormatException——字符的UTF代码数据格式有错引起异常;
IllegalThreadException—一线程调用某个方法而所处状态不适当,引起异常;
FileNotFoundException——未找到指定文件引起异常;
EOFException——未完成输入操作即遇文件结束引起异常。

引用于Java异常机制


一般异常:
ClassNotFoundException——常用与类反射,JVM反射时找不到所写的类,引起异常;
NoSuchMethodException——常用与类反射,JVM执行反射对象所得到的方法时找不到该方法,引起异常;
FileNotFoundException——常用于IO流操作,JVM读取文件流时找不到该文件,引起异常;
SQLException——当使用 JDBC 与数据源(在本文中的数据源表示我们实际使用的数据库)进行交互的时候遇见错误的时候,将会抛出名为 SQLException 的异常。

感谢@笃志近思、@jamesjxin 两位博主的分享和帮助,感谢杨晓峰老师,感谢帮助我的人。

此文章仅为个人浅见,不喜勿喷,欢迎各位大大带着批判的眼光和友好的语言提出建议和不足。

文章原创,转载请留言

读Java核心技术36讲有感——谈谈对Java的理解,谈谈Exception和Error相关推荐

  1. 杨晓峰-java核心技术36讲(学习笔记)- 第1讲 | 谈谈你对Java平台的理解?

    杨晓峰-java核心技术36讲(学习笔记) 接下来我会分享杨晓峰-java核心技术36讲的学习笔记,内容较多,补充了其中一些牛人评论,相对详细(仅供个人学习记录整理,希望大家支持正版:https:// ...

  2. 【总结】Java核心技术36讲知识点大纲(转载)

    Java核心技术36讲知识点总结大纲 1 Java平台的理解 Java的特性,解释运行和编译运行 2 Exception 和 Error 有什么区别 理解Java的异常体系的设计,Throwable ...

  3. 【总结】Java核心技术36讲知识点大纲

    前段时间在极客时间上购买了杨晓峰老师的<Java核心技术36讲>,趁着这段时间有空,对相关知识点做了一个整体的大纲,也对自己所掌握的Java基础进行了一个复习和梳理,若想深入学习,可以购买 ...

  4. 《java核心技术36讲》学习笔记-------杨晓峰(极客时间)

    非常荣幸作为晓峰哥的同事,之前就看过这篇文章,重写读一遍,再学习学习.同时也推荐给大家 一.开篇词 初级.中级:java和计算机科学基础.开源框架的使用:高级.专家:java io/nio.并发.虚拟 ...

  5. Java核心技术36讲

    java平台的理解 谈谈你对 Java 平台的理解?"Java 是解释执行",这句话正确么? Java本身是一种面向对象的语音,最显著的特性有两个方面,一个是所谓的"书写 ...

  6. Java核心技术36讲(个人整理)

    今天我要问你的问题是,谈谈你对 Java 平台的理解? "Java 是解释执行",这句话正确吗? Java特性: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文 ...

  7. Java核心技术36讲 第一讲:Java平台的理解

    java语言 一次编译,到处运行 GC.Garbage Collection JRE: Java Runtime Environment 包含JVM和Java类库等 JDK: Java Develop ...

  8. 杨晓峰Java核心36讲学习笔记

    最近在极客时间上订阅了Oracle首席工程师杨晓峰的Java核心技术36讲, 接下来会对每一课的学习: 记下学习笔记 有不懂的地方继续深入 一些思考或者总结. 下面从第一课开始,Exception和E ...

  9. java核心技术精讲-李兴华-专题视频课程

    java核心技术精讲-101993人已学习 课程介绍         本课程主要读者全面细致的讲解Java编程的所有核心知识,从基础语法.到面向对象以及Java的实际应用进行完整讲解.官方QQ群:61 ...

最新文章

  1. 学好C++十大良好的习惯
  2. html body onunload,html页面的onunload、onbeforeunload
  3. 教你一招画素描, 不写程序时陶冶陶冶情操
  4. powerdesigner15(pd)+Oracle 11g 开发小问题
  5. 苹果cmsV10高仿草民电影网在线影视网站模板 带手机版
  6. 【Day05】Html5 有哪些新特性?如何处理 Html5 新标签的浏览器兼容问题?如何区分 Html 和 Html5?
  7. spingboot整合netty实现单聊整合实现
  8. Java基础-final关键字
  9. 函数模板遇上函数重载
  10. 【Web前端】hexo+GitPages搭建博客
  11. 安装win7的小插曲
  12. 代码很烂,所以离职。
  13. Nginx 解决请求跨域 与 配置 gzip 压缩
  14. zip和rar文件的contentType
  15. 【word】右上角标
  16. android app卸载以后弹出用户反馈界面
  17. Android根据语言适配货币符,ios – 使用NSLocale根据国家/地区代码或国家/地区名称获取货币符号...
  18. ADF单位根检验三种形式_第三章(下):t 检验和 F 检验
  19. 详解shell IFS分隔符
  20. [GO] Gin入门

热门文章

  1. Docker:(二)docker安装部署及优化详解
  2. CopyMemory不同类型数据之间的复制
  3. java高级架构师工资多少啊,附源代码
  4. Android 计时器实现
  5. 感知机算法(一)---原理
  6. 《python数据分析与挖掘实战》笔记第3章
  7. Vue项目自定义滚动条样式【火狐、谷歌、360】
  8. Web开发模式的探讨
  9. Android 2.3的StrictMode使用
  10. Linux中报错segmentation fault