Java基础概述面试题复习

目录
  • Java概述
    • 何为编程
    • 什么是Java
    • jdk1.5之后的三大版本
    • JVM、JRE和JDK的关系
      • JVM
      • JRE
      • JDK
    • 什么是跨平台性?原理是什么
    • Java语言有哪些特点
    • 什么是字节码?采用字节码的最大好处是什么
    • 什么是Java程序的主类?应用程序和小程序的主类有何不同?
    • Java应用程序与小程序之间有那些差别?
    • Java和C++的区别
    • Oracle JDK 和 OpenJDK 的对比
  • 总结

Java概述

何为编程

编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。

为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。

什么是Java

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

jdk1.5之后的三大版本

Java SE(J2SE,Java 2 Platform Standard Edition,标准版)

Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含

了支持 Java Web 服务开发的类,并为Java EE和Java ME提供基础。

Java EE(J2EE,Java 2 Platform Enterprise Edition,企业版)

Java EE 以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java EE 是在

Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web2.0应用程序。2018年2月,Eclipse 宣布正式将 JavaEE 更名为 JakartaEE

Java ME(J2ME,Java 2 Platform Micro Edition,微型版)

Java ME 以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

JVM、JRE和JDK的关系

JVM

Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。

JRE

Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包

如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。

JDK

Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等

JVM&JRE&JDK关系图

什么是跨平台性?原理是什么

所谓跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。

实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。

Java语言有哪些特点

简单易学(Java语言的语法与C语言和C++语言很接近)

面向对象(封装,继承,多态)

平台无关性(Java虚拟机实现平台无关性)

支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)

支持多线程(多线程机制使应用程序在同一时间并行执行多项任)

健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)

安全性

什么是字节码?采用字节码的最大好处是什么

字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。

采用字节码的好处:

Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

先看下java中的编译器和解释器:

Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。

Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。

什么是Java程序的主类?应用程序和小程序的主类有何不同?

一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。

Java应用程序与小程序之间有那些差别?

简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。

Java和C++的区别

都是面向对象的语言,都支持封装、继承和多态

Java不提供指针来直接访问内存,程序内存更加安全

Java的类是单继承的,C++支持多重继承;

虽然Java的类不可以多继承,但是接口可以多继承。

Java有自动内存管理机制,不需要程序员手动释放无用内存

Oracle JDK 和 OpenJDK 的对比

Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次;

OpenJDK 是一个参考模型并且是完全开源的,而Oracle JDK是OpenJDK的一个实现,并不是完全开源的;

Oracle JDK 比 OpenJDK 更稳定。OpenJDK和Oracle JDK的代码几乎相同,但Oracle JDK有更多的类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择Oracle JDK,因为它经过了彻底的测试和稳定。某些情况下,有些人提到在使用OpenJDK 可能会遇到了许多应用程序崩溃的问题,但是,只需切换到Oracle JDK就可以解决问题;

在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能;

Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来获取最新版本;

Oracle JDK根据二进制代码许可协议获得许可,而OpenJDK根据GPL v2许可获得许可。

原文链接:https://blog.csdn.net/ThinkWon/article/details/104390612

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 经典的Java面试题及回答集锦(基础篇)

    1.问题:如果A和B对象循环引用,是否可以被GC? 回答:可以,现在的虚拟机基本都是通过可达性分析算法来判断对象是否存活的,而不是通过简单的引用计数法来判断对象是否存活.可达性分析算法使用一系列的"GC Roots"对象(虚拟机栈中引用的对象.静态属性引用对象)作为起始点,这些节点向下搜索的路径称为引用链,当一个对象到GC Roots没有任何引用链连接,则证明对象是不可用的. 2.Java中的内存溢出是如何造成的? OutOfMemoryError: (1)PerGern Space

  • JAVA基础面试题整理

    1.Java中final.finally.finalize的区别 简单区别: final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承. finally是异常处理语句结构的一部分,表示总是执行. finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等. 2.error和exception有什么区别? Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件

  • Java面试题冲刺第一天--基础篇1

    目录 面试题1:Java 中操作字符串都有哪些类?它们之间有什么区别? 正经回答: 深入追问: 追问1:这三者在效率上怎么说? 追问2:那StringBuffer和StringBuffer线程安全主要差在哪里呢? 面试题2:请你说一下Error 和 Exception 区别是什么? 正经回答: 面试题3:== 和 equals 的区别是什么 正经回答: 深入追问: 追问1:如果我们不重写equals() 方法,会怎么样? 追问2:重写equals的同时,我们需要重写hashCode()方法么?为

  • Java面试题冲刺第五天--基础篇2

    目录 面试题1:说一下抽象类和接口有哪些区别? 正经回答: 深入追问: 追问1:说一说你对抽象类的理解吧,他到底是干啥用的 追问2:用抽象类实现一个接口,和普通类实现接口会有什么不同么? 追问3:抽象类能使用 final 修饰吗? 面试题2:final 在 Java 中有什么作用? 正经回答: 1.修饰类 2.修饰方法 3.修饰变量 深入追问: 追问1:能分别说一下final.finally.finalize的区别么? 面试题3:你对Java序列化了解么? 正经回答: 深入追问: 追问1:Jav

  • Java面试题冲刺第十四天--基础篇3

    目录 面试题1:JDK1.8的新特性有哪些? 接口的默认和静态方法: Lambda 表达式: 方法与构造函数引用: 函数式接口: Annotation 注解:支持多重注解: 新的日期时间 API: Base64编码: JavaScript引擎Nashorn: Stream的使用: Optional: 扩展注解的支持: 并行(parallel)数组: 编译器优化: 其他核心 API 的改进 Java IO改进 集合 API 的改进 面试题2:什么是内部类?内部类的作用? 内部类的作用 内部类特点

  • Java基础概述面试题复习

    目录 Java概述 何为编程 什么是Java jdk1.5之后的三大版本 JVM.JRE和JDK的关系 JVM JRE JDK 什么是跨平台性?原理是什么 Java语言有哪些特点 什么是字节码?采用字节码的最大好处是什么 什么是Java程序的主类?应用程序和小程序的主类有何不同? Java应用程序与小程序之间有那些差别? Java和C++的区别 Oracle JDK 和 OpenJDK 的对比 总结 Java概述 何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终

  • Java基础之文件概述

    一.基本概念和常识 下面,我们先介绍一些基本概念和常识,包括二进制思维.文件类型.文本文件的编码.文件系统和文件读写等. 1.1 二进制思维 为了透彻理解文件,我们首先要有一个二进制思维. 所有文件, 不论是可执行文件.图片文件.视频文件.Word文件.压缩文件.txt 文件,都没什么可神秘的,它们都是以0和1的二进制形式保存的.我们 所看到的图片.视频.文本,都是应用程序对这些二进制的解析结果. 作为程序员,我们应该有一个编辑器,能查看文件的二进制形式, 比如UltraEdit,它支持以十六进

  • java基础--JDK SPI概述

    目录 JDK SPI是什么 JDK SPI使用说明及示例 SPI在JDBC中的应用 对SPI的理解 JDK SPI是什么 最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什么都不知道那就尴尬了. 所以SPI是什么呢?SPI全称Service Provider Interface,在Java中还是一个比较重要的概念,是Java提供的一套用来被第三方实现或者扩展的API,或者换句话说,SPI是一种服务发现机制. JDK SPI使用

  • Java基础面试题之volatile详解

    目录 1.volatile保证可见性 1.1.什么是JMM模型? 1.2.volatile保证可见性的代码验证 1.2.1.无可见性代码验证 1.2.1.volatile保证可见性验证 2.volatile不保证原子性 2.1 什么是原子性? 2.2 不保证原子性的代码验证 2.3 volatile不保证原子性的解决方法 2.3.1 方法1:使用synchronized 2.3.2 方法1:使用JUC包下的AtomicInteger 3.volatile禁止指令重排 3.1 什么是指令重排? 3

  • Java基础学习之ArrayList类概述与常用方法

    目录 一.ArrayList类概述 二.ArrayList类常用方法 三.ArrayList存储字符串并遍历 四.ArrayList存储学生对象并遍历 五.ArrayList存储学生对象并遍历升级版 一.ArrayList类概述 什么是集合: 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点: 底层是数组实现的,长度可以变化 泛型的使用: 用于约束集合中存储元素的数据类型 二.ArrayList类常用方法 构造方法 方法名 说明 public ArrayL

  • Java基础之Comparable与Comparator概述

    自然排序Comparable 对于自定义类进行排序要实现Comparable接口,重写compareTo() 方法,如果不重写,像使用Arrays.sort()排序就会报错 package com.che.lambda; import java.util.Objects; /** * @author cheyuhang on 2021/4/23 */ public class Good implements Comparable{ private String name; private Dou

  • 关于Java集合框架面试题(含答案)上

    1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类. (2)随着使用经过严格测试的集合框架类,代

  • 值得收藏的2017年Java开发岗位面试题

    下面是我自己收集整理的2017年Java岗位的面试题,可以用它来好好准备面试. 一.Java基础 1. String类为什么是final的. 2. HashMap的源码,实现原理,底层结构. 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪些,有什么区别. 6. 反射中,Class.forName和classloader的区别 7. Java7.Java8的

  • java 基础之final、finally和finalize的区别

    java 基础之final.finally和finalize的区别 1.final可以修饰类,不能被继承:可以修饰方法,不能被重写:可以修饰变量,只能赋值一次. 2.finally是try语句中的语句体,不能单独使用,用来释放资源; 3.finalize是一个方法,当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法. 如下代码程序: package cn.jit.test; /** * 面试题1:final,finally和finalize的区别: * * final可以修

  • Java基础学习笔记之数组详解

    本文实例讲述了Java基础学习笔记之数组.分享给大家供大家参考,具体如下: 数组的定义于使用 1:数组的基本概念 一组相关变量的集合:在Java里面将数组定义为引用数据类型,所以数组的使用一定要牵扯到内存分配:想到了用new 关键字来处理. 2:数组的定义格式 区别: 动态初始化后数组中的每一个元素的内容都是其对应数据类型的默认值,随后可以通过下标进行数组内容的修改: 如果希望数组定义的时候就可以提供内容,则采用静态初始化的方式: a:数组的动态初始化(声明并初始化数组): 数据类型 数组名称

随机推荐