• JAVA 基础上


    JVM vs JDK vs JRE

    JVM

    java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在

    JDK

    jDK 是 Java Development Kit 缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序

    JRE

    JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序

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

    在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。

    Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以, Java 程序运行时相对来说还是高效的(不过,和 C++,Rust,Go 等语言还是有一定差距的),

    而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

    为什么说 Java 语言“编译与解释并存

    这是因为 Java 语言既具有编译型语言的特征,也具有解释型语言的特征。因为 Java 程序要经过先编译,后解释两个步骤,由 Java 编写的程序需要先经过编译步骤,生成字节码(.class 文件),这种字节码必须由 Java 解释器来解释执行。

     OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别?

    非常接近 - 我们的 Oracle JDK 版本构建过程基于 OpenJDK 7 构建,只添加了几个部分,

    例如部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart 的实现,以及一些闭源的第三方组件,如图形光栅化器,一些开源的第三方组件,如 Rhino,以及一些零碎的东西,如附加文档或第三方字体。

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

    Oracle JDK 比 OpenJDK 更稳定 OpenJDK 和 Oracle JDK 的代码几乎相同,但 Oracle JDK 有更多的类和一些错误修复

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

    字符型常量和字符串常量的区别?

    形式 : 字符常量是单引号引起的一个字符,字符串常量是双引号引起的 0 个或若干个字符。

    含义 : 字符常量相当于一个整型值( ASCII 值),可以参加表达式运算; 字符串常量代表一个地址值(该字符串在内存中存放位置)。

    占内存大小 : 字符常量只占 2 个字节; 字符串常量占若干个字节

    标识符和关键字的区别是什么

    在我们编写程序的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了 标识符 。简单来说, 标识符就是一个名字

    有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方,这些特殊的标识符就是 关键字 。

    什么是方法的返回值?方法有哪几种类型?

    方法的返回值 是指我们获取到的某个方法体中的代码执行后产生的结果

    按照方法的返回值和参数类型分为4种

    静态方法为什么不能调用非静态成员?

    1. 静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,需要通过类的实例对象去访问。
    2. 在类的非静态成员不存在的时候静态成员就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作

    静态方法和实例方法有何不同?

    调用方式  调用静态方法可以无需创建对象

    访问类成员是否存在限制   静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),而实例方法不存在这个限制

    可变长参数

    所谓可变长参数就是允许在调用方法时传入不定长度的参数

    遇到方法重载的情况怎么办呢?会优先匹配固定参数还是可变参数的方法呢?

    答案是会优先匹配固定参数的方法,因为固定参数的方法匹配度更高

    拷贝

     引用拷贝就是两个不同的引用指向同一个对象

    • 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
    • 深拷贝 :深拷贝会完全复制整个对象,包括这个对象所包含的内部对象 。在拷贝引用类型成员变量时,为引用类型的数据成员另辟了一个独立的内存空间,实现真正内容上的拷贝。
    •  深拷贝相比于浅拷贝速度较慢并且花销较大。深拷贝后,不管是基础数据类型还是引用类型的成员变量,修改其值都不会相互造成影响。而浅拷贝 时 引用类型的成员变量修改值会互相影响
  • 相关阅读:
    Mysql第八天 分区与分表
    ios—项目开发需求文档
    spark资料下载
    网络爬虫:使用多线程爬取网页链接
    调用微信高级群发接口--视频群发接口出问题(微信官方文档错误纠正)
    享元模式
    在JAVA中怎样跳出当前的多重嵌套循环?
    获取个人借阅信息---图书馆client
    IOS 以随意点为圆心 旋转UIView
    ESP8266学习笔记4:ESP8266的SmartConfig
  • 原文地址:https://www.cnblogs.com/tingtin/p/15986939.html
Copyright © 2020-2023  润新知