JAVA基础N问

1.什么是 Java 虚拟机(JVM)?为什么 Java 被称作是“平台无关的编程语言”?

先从JAVA程序的执行过程说起,先将java源文件编译(*.java)编译为字节码文件(.class),然后用解释器运行该字节码,JVM就是允许该字节码文件的解释器。
举个例子:要求将同一个笔盖套在2个不同粗细的笔上,为2只笔分别陪一个转接器就能实现。转接器向上的一头接口适应笔盖,向下的接口适应笔就可以了。字节码文件相当于是笔盖,JVM相当于例子中的转接器,不同的平台相当于是不同粗细的笔。总之JVM做到向java的字节码文件提供相同的接口,向不同平台提供不同的接口。不同平台有各自不同的版本的JVM。站在字节码文件的角度来看,确实实现了在各个平台上都能执行的效果,实现了跨平台。(引用疯狂JAVA第3版P7)


image.png

JDK、JRE、JVM 分别是什么关系?

JDK >JRE>JVM
JDK:java开发的工具包,提供了java程序编译和运行所需要的各种工具和资源,包括了编译器,JRE和常用的类库。
JRE:java运行时环境,包括JVM,字节码检验和类加载器等。

3. Java 支持的数据类型有哪些?

引用数据类型:String,数组,类,接口,null
基本数据类型:byte(1),short(2),int(4),long(8),float(4),double(8)
char(1),
boolean的长度有争议,《Java虚拟机规范》中说过单个出现时以int类型来存放占4字节,以数组出现占1字节。还有说占1bit

4. 什么是自动拆装箱?

基本数据类型和它对应的包装类的转换,JAVA中除了基本数据类型外都是类,将基本数据类型封装成包装类后可以提供更多的方法,做更多的操作比如数字型字符串转化为int。JDK1.5后实现了自动拆装箱。
Interger包装类:https://www.jianshu.com/p/024193d5ba00
Character包装类:https://www.jianshu.com/p/f0a0be7eb957

5. 什么是面向对象?

面向对象一种将现实生活延伸到计算机世界中的思想,方便解决问题,一切客观存在的事物都可以看作对象。面向过程主张按功能来分析需求,最小的单位是函数,面向对象中最小的单位是类。贴近现实世界,代码复用性强。(来自疯狂javaP27)


image.png
  1. 面向对象的三大基本特性?
    封装:通过访问修饰符对类中的属性和方法做访问限制,公开需要公开的,隐藏需要隐藏的部分。(来自疯狂JAVAP130)。
    image.png

    访问修饰符
    image.png

    继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。(详情https://www.jianshu.com/p/dd9dbf82b026
    多态:不同时刻呈现不同状态,继承,方法重写,父类引用变量指向子类是多态的前提。时间可以分为运行时态和编译时,多态只针对非静态成员方法,属性和构造方法没有多态

7 什么是值传递和引用传递?

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。一般认为,Java 内的传递都是值传递,Java 中实例对象的传递是引用传递。

8. Java 中,什么是构造方法?什么是构造方法重载?什么是复制构造方法?

构造方法是指类中显式返回该类的对象的方法,创建对象时在调用构造方法前就已经隐式创建好了对象,此时对象中的方法只能被this调用。构造方法可以对被创建对象进行初始化。
多个不同参数列表的构造方法称之为构造方法的重载
它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象

9单例模式

https://www.jianshu.com/p/110ec6e3315a
final:https://www.jianshu.com/p/5a01709c7c0b

10 工厂模式

https://www.jianshu.com/p/8ce955121bff

11. String和StringBuilder、StringBuffer的区别?

String 中存放的是内容和长度都不可变的字符序列
StringBuffer StringBuilder中存放内容和长度都可以变化的字符序列
StringBuffer是同步的,数据安全,但效率低
StringBuilder 是不同步的,效率高,数据不安全,但实际中基本都是单线程,所有常用StringBuilder

12 Java 集合框架有哪些?说出一些集合框架的优点?

[List子类及其特点]
ArrayList
底层数据结构是数组,查询快,增删慢
数据非安全(不同步),效率高
Vector
底层数据结构是数组,查询快,增删慢
数据安全(同步),效率低。因为是安全的所以查询也慢了,后面有新的替代,现在基本不用。
LinkedList
底层数据结构是链表,查询慢,增删快
数据非安全(不同步),效率高
【根据不同的需求使】
查询的操作多:ArrayList
增删的操作多:LinkedList

image.png

(图片来自于https://blog.csdn.net/zhangqunshuai/article/details/80660974

【参考】
https://www.jianshu.com/p/a692ccc94ca0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,555评论 0 6
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,416评论 0 4
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 1,844评论 0 10
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,690评论 0 11
  • Win7下如何打开DOS控制台? a:开始--所有程序--附件--命令提示符 b:开始--搜索程序和文件--cmd...
    逍遥叹6阅读 1,614评论 4 12