1. 什么是Java

什么是 Java

  • Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
  • Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
  • Java 是一个完整的平台,有一个庞大的库,其中包含了很多可重用的代码,以及一个提供诸如安全性、跨操作系统的可移植性 以及自动垃圾收集等服务的执行环境。

2. jdk1.5之后的三大版本

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 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

3. JVM、JRE和JDK的关系

JVM、JRE和JDK的关系

  • JVM
    Java Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。
  • JRE
    Java Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包
  • JDK
    Java Development Kit是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK,就无需再单独安装JRE了。其中的开发工具:编译工具(javac.exe),打包工具(jar.exe)等

在这里插入图片描述

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

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

  • 跨平台性,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。
  • 实现原理:Java程序是通过java虚拟机在系统平台上运行的,只要该系统可以安装相应的java虚拟机,该系统就可以运行java程序。

5. Java语言有哪些特点

Java语言有哪些特点

  • 简单性(Java语言的语法与C语言和C++语言很接近)
  • 面向对象(封装,继承,多态)
  • 分布式
  • 健壮性
  • 安全性
  • 体系结构中立
  • 可移植性
  • 解释型
  • 高性能
  • 多线程
  • 动态性

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

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

  • 字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
  • 采用字节码的好处
    Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,
    而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
  • java中的编译器和解释器
    Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。

在这里插入图片描述

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

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

  • 一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。
  • 而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。
  • 应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。

8. Java和C++的区别

Java和C++的区别

  • 都是面向对象的语言,都支持封装、继承和多态
  • Java不提供指针来直接访问内存,程序内存更加安全
  • Java的类是单继承的,C++支持多重继承;虽然Java的类不可以多继承,但是接口可以多继承。
  • Java有自动内存管理机制,不需要程序员手动释放无用内存

9. Oracle JDK 和 OpenJDK 的对比

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许可获得许可。
标签:Java概述

Java 概述的更多相关文章

  1. 使用Groovy构建DSL

    DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言。常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时在使用起来要简单。由于其使用简单的特性,DSL 通常不会像 Java,C++等语言将其应用于一般性的编程任务。对于 G......

  2. Java 给Word不同页面设置不同背景

    Word文档中,可直接通过【设计】-【页面颜色】页面颜色,通过Java代码可参考如下设置方法:1. 设置单一颜色背景doc.getBackground().setType(BackgroundType.Color);doc.getBackground().setColor(Color.PINK);2......

  3. JVM系列(四):java方法的查找过程实现

    经过前面几章的简单介绍,我们已经大致了解了jvm的启动框架和执行流程了。不过,这些都是些无关痛痒的问题,几行文字描述一下即可。所以,今天我们从另一个角度来讲解jvm的一些东西,以便可以更多一点认知。即如题:jvm是如何找到对应的java方法,然后执行的呢?(但是执行太复杂,太重要,我们就不说了。我们......

  4. Java面向对象总结性项目 之 图书馆管理代码

    Java面向对象总结性项目 之 图书馆管理代码 简介 核心需求 类的设计 架构 创建图书相关的类 创建......

  5. Java多线程-锁的区别与使用

    目录锁类型可中断锁公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁Synchronized与Static Synchronized举例Lock定义四种获取Lock的方法区别lock()tryLock()tryLock(long time, Ti......

  6. 自己动手实现java断点/单步调试(二)

    自从上一篇《自己动手实现java断点/单步调试(一)》是时候应该总结一下JDI的事件了事件类型描述ClassPrepareEvent装载某个指定的类所引发的事件ClassUnloadEvent卸载某个指定的类所引发的事件BreakingpointEvent设置断点所引发的事件ExceptionEve......

  7. Java中Jackson快速入门

    Java生态圈中有很多处理JSON和XML格式化的类库,Jackson是其中比较著名的一个。虽然JDK自带了XML处理类库,但是相对来说比较低级,使用本文介绍的Jackson等高级类库处理起来会方便很多。引入类库由于Jackson相关类库按照功能分为几个相对独立的,所以需要同时引入多个类库,为了方便......

  8. 这么优雅的Java ORM没见过吧

    Java的ORM框架有很多,但由于Java语言的限制大部分都不够优雅也不够简单,所以作者只能另辟蹊径造轮子了。照旧先看示例代码了解个大概,然后再解释实现原理。一、ORM示例1. Insertpublic CompletableFuture insert() {var obj = new sys.en......

  9. 透过现象看本质:Java类动态加载和热替换

    摘要:本文主要介绍类加载器、自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换。最近,遇到了两个和Java类的加载和卸载相关的问题:1) 是一道关于Java的判断题:一个类被首次加载后,会长期留驻JVM,直到JVM退出。这个说法,是不是正确的?2) 在开发的一个集成平台中,需要集成......

  10. JVM系列(三):JVM创建过程解析

    上两篇中梳理了整个java启动过程中,jvm大致是如何运行的。即厘清了我们认为的jvm的启动过程。但那里面仅为一些大致的东西,比如参数解析,验证,dll加载等等。把最核心的loadJavaVM()交给了一个dll或者so库。也就是真正的jvm我们并没有接触到,我们仅看了一个包装者或者是上层应用的实现......

随机推荐

  1. python re模块和正则表达式

    一、re模块和正则表达式先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/这是京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示。假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我......

  2. Python 打印自己设计的字体的实例讲解

    通过对 26 个字母的设定,设置自己要输出的字体。name = "RUNOOB"# 接收用户输入# name = input("输入你的名字: \n\n") lngth = len(name) l = "" for x in range(0......

  3. java实现给图片加铺满的网格式文字水印

    效果:原图加水印后的图片废话不多说,直接上代码代码:package com.example.demo;import java.awt.AlphaComposite;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2......

  4. c# WPF中CheckBox样式的使用总结

    背景很多时候我们使用WPF开发界面的时候经常会用到各种空间,很多时候我们需要去自定义控件的样式来替换默认的样式,今天通过两个方法来替换WPF中的CheckBox样式,透过这两个例子我们可以掌握基本的WPF样式的开发如何定义ControlTemplate以及使用附加属性来为我们的控件增加新的样式。常规......

  5. Java反射全解析(使用、原理、问题、在Android中的应用)

    前言今天说Java模块内容:反射。反射介绍正常情况下,我们知晓我们要操作的类和对象是什么,可以直接操作这些对象中的变量和方法,比如一个User类:User user=new User();user.setName("Bob"); 但是有的场景,我们无法正常去操作:只知道类路径,无......

  6. C# 获取当前总毫秒数的实例讲解

    在.Net下DateTime.Ticks获得的是个long型的时间整数,具体表示是至0001 年 1 月 1 日午夜 12:00:00 以来所经过时间以100纳秒的数字。转换为秒为Ticks/10000000,转换为毫秒Ticks/10000。如果要获取从1970年1月1日至当前时间所经过的毫秒数,......

  7. 使用nodejs和express搭建http web服务

    目录简介使用nodejs搭建HTTP web服务请求nodejs服务第三方lib请求post获取http请求的正文Express和使用express搭建http web服务express helloworldexpress路由Express 路由句柄中间件Express 响应方法Express 的静......

  8. python jinja2模板的使用

    模板的用处jinja2 可以用来修改配置文件,把配置文件的关键地方可以用变量来进行替换模板语法模板语法和django的模板语法差不多 在jinja2中,存在三种语法:控制结构{% %}变量取值{{ }}注释{# #}for 循环{% for user in users %}{{user.userna......

  9. R语言求一行(列表、list)数据的平均数操作

    R语言求一个列表的平均数可以使用mean() :mean英文意思有平均数的含义x=c(1,3,5,7,9)max(x)#这样即可求得平均数为 : 5假如读取过一个csv文件之后,要求其中一行数据中指定某个区间内的平均数可以使用rowMeans()data = read.csv(“input.csv&......

  10. vue使用Split封装通用拖拽滑动分隔面板组件

    前言手动封装一个类似Iview中的Split组件,可将一片区域,分割为可以拖拽调整宽度或高度的两部分区域,最终效果如下:开始基础布局在vue工程中创建SplitPane组件,引入页面使用。<template><div class="page"><Sp......