谈谈对 java 平台的理解?

首次看到这个问题的时候,脑海是空白的。仅仅能反应出来一些 java 语言特性,其他的都不知道了。

这个问题是很抽象和笼统的,大概的方向可以从基础知识的掌握和 java 平台的主要模块和运行原理的理解上来讲,为什么要掌握整个 java 的基础知识以及理解 java 平台的主要模块和运行原理呢?因为这些是我们日常工作中问题诊断和性能调优的基础。

java 平台理解,图片来自 java 核心技术36 讲

java 语言特性

  • 面向对象
    面向对象类编程语言相对于面向过程编程语言,多了 一种对象的状态的维度,使同样的方法调用可能产生不同的结果。面向对象使我们在解析问题的时候更加简单,分析待求解问题的动词和名次来组成对象的行为和状态就是最常见的解决问题的方式。
  • 封装、继承、多台
    封装,屏蔽了代码细节,既方便使用者,也方便后期的维护修改,同时提高了代码的安全性。public、protected、private、default
    继承,极大程度上减少了代码的冗余,同时为多台提供了可能性。我们在编码的时候,不能盲目的使用继承,因为一旦继承发生,那么子类就拥有父类的所有可见的状态和行为,有一些是不需要的,在使用继承之前,应该首先考虑是否使用组合,这样耦合度更小。当我们需要多态转型的时候,才考虑使用继承。
    多态,同一个对象在不同时刻体现出来的不同状态。现代编程思想更加推荐面向接口编程。面向对象六大设计原则就是基于此。
  • 泛型
    使 java 中的类和对象具有更强的表达能力。泛型边界,泛型擦除。
  • 反射
  • lambda

基础类库

  • 集合
  • IO/NIO
  • 网络
  • 并发

java 虚拟机

  • 垃圾收集器
  • 运行时
  • 动态编译

Java是解析运行吗?

不正确!
1,Java源代码经过Javac编译成.class文件
2,.class文件经JVM解析或编译运行。
(1)解析:.class文件经过JVM内嵌的解析器解析执行。
(2)编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为”热点代码”编译与本地平台相关的机器码,并进行各种层次的优化。
(3)AOT编译器: Java 9提供的直接将所有代码编译成机器码执行。

典型回答

Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。

我们日常会接触到 JRE(Java Runtime Environment)或者 JDK(Java Development Kit)。 JRE,也就是 Java 运行环境,包含了 JVM 和 Java 类库,以及一些模块等。而 JDK 可以看作是 JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。

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

猜你喜欢

转载自blog.csdn.net/xiao6gui/article/details/80733933