java 核心技术之基础篇

   首先,谈谈我对java平台的理解,java本身是一种面向对象的语言,显著的特征有两个方面,一是所谓的“一次书写,到处运行”,能够非常容易的获得跨平台的能力,另外就是垃圾回收(GC),java 通过垃圾收集器回收分配内存,大部分情况下,程序员不需要自己操心内存的分配与回收。

  对于“java 是解释执行”这句话,是不太准确的。我们开发的源代码,首先通过javac编译成字节码,然后运行时,通过java虚拟机内嵌的解释器将字节码转换成最终的机器码。长见的JVM,比如大多数情况下使用的Oracle JDK提供的jvm ,提供了JIT(Just -In-Time)编译器,所谓的动态编译器,JIT能够在运行时将热点代码编译成机器码,这时部分热点代码就属于编译执行,而不是解释执行了。所以说java是解析运行的这一说法是不准确的。

对于java的特性还有:(1)基本语言特性 ,面向对象(封装,继承,多态)、反射、泛型...(2)java类库:核心类库,如IO/NIO、网络、utils...;安全类库、jdk、management以及海量的第三方类库(3)java虚拟机:垃圾收集器、运行时、动态编译、辅助功能,如jfr(4)工具:辅助工具,如jar、jdeps ,编译器,javac 、sjavac。

以上是对java语言以及平台的理解,下面一一攻克几个java的基础的认识,由点及面,渐渐深入了解java的一些语言特性:

一、世界上不会有永远不出错的程序,异常情况如影随形的缠绕着我们这些程序员,只有更好的认识异常,处理异常,我们的程序才有可靠性;java语言设计了完善的异常处理机制,降低可编写和维护的门槛,下面的问题,请对比 Exception 和 Error,另外区别 运行时异常与一般异常的区别?

回答如此:Exception 和 Error 都继承Throwable 类,在java 中只有Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

Error 是指在正常情况下,不大可能出现的情况,绝大部分的Error会导致程序的非正常、不可恢复状态,既然是非正常那就不需要捕获,常见的有OutOfMemoryError类

Exception 又分为可检查异常和不检查异常,可检查异常在源代码里必须要显示进行捕获处理,这是在编译器检查的一部分,不检查异常就是所谓的运行时异常,类NUllPointerException、ArrayIndexOutOfBoundsException 类,根据需要判断捕获。

图示总结:

二、以题切入java语言的要素,一个经典的java 基础题,谈谈final 、finally、 finalize有啥不同?典型回答是,final可以用来修饰类、方法、变量;final修饰的class代表不可继承扩展,final的变量不可修改,final的方法不可重写;finally 则是java保证重点代码一定要被执行的一种机制。可以使用 try-catch-finally 或 try-finally 来进行类似关闭JDBC连接、保证Unlock 锁等动作。finalize 则是基础类 java.long.Object 的一个方法,他设计的目的是保证对象在被垃圾回收收集前完成特定资源的回收。finalize已经不推荐使用。

推荐使用final 关键字来明确表示我们代码的语义以及逻辑意图,这已经证明在很多场景下是很好的实践,比如:

 可以将方法或类声明为final,以明确告知别人,这些行为是不允许修改的。查看java的核心类库也可看到有相当一部分的声明标记为final,保证了平台的安全性。

使用final 修饰的参数和变量,可以清楚的避免意外的赋值导致的错误。

final变量产生某种程度的不可变的效果,可以用于保护只读数据,尤其是并发编程中,可减少额外的同步开销。

对于finally 明确知道怎么用就行了,java平台已经逐步使用java.lang.ref.Cleaner 来替换finalize实现。

猜你喜欢

转载自www.cnblogs.com/liu321kai/p/9256634.html