1、什么是java虚拟机?
java虚拟机是可运行java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。
2、JVM、JDK、JRE关系
JVM:java虚拟机,是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译成.class文件,在虚拟机上运行,由虚拟机将程序解释给本地系统执行。
JRE:java运行环境,光有JVM还不能让class文件执行,还需要调用解释所需要的类库lib。jvm+lib=jre
JDK:java开发工具包,包含JRE,编译器javac,解释器和一些调试开发工具包。
3、java基本数据类型
整数型:byte(1字节),short(2字节),int(4字节),long(8字节)
浮点型:float(4字节)、double(8字节)
字符型:char(2字节)
布尔型:boolean(1字节)
注意:引用数据类型大小统一为4字节,存储引用对象地址。
4、自动拆装箱
自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。
5、面对对象是什么
将数据和方法封装起来,通过对象去访问相应的数据和方法,减少代码的冗余,代码模块化,易于复用。
**6、值传递与引用传递 **
基本数据类型的传递是值传递,传递的是值得副本 ,修改的也是值得副本,本身没有改变。引用类型传递为引用传递,传递的是对象的地址,两个引用变量同时指向同一堆地址,修改的也是值自身。
7、java方法重载与方法重写
方法重载:一个类可以定义多个方法名相同,但参数不同的方法。构成方法重载的条件:形参类型,形参个数、形参顺序不同。
方法重写:发生在子类继承父类,同名同参。
8、构造方法,构造方法重载
当一个新的对象被创建时,就会通过new关键字调用构造方法。构造方法与类名相同,无返回类型。构造方法的重载与方法重载一样,创建不同用户对象。
9、java不支持多继承,可以实现多接口
当多继承出现不同父类存在相同方法时,存在冲突。
单继承易读、易维护、语义清晰、逻辑清楚
10、String、StringBuilder、StringBuffer区别
String长度不可变,StringBuilder、StringBuffer长度可变;
StringBuffer线程安全,同步方法了,所以速度相对慢一些;
StringBilder线程不安全,但速度快了。
11、内部类与外部类
外部类访问内部类:必须建立内部类对象;先创建外部类对象,在通过外部类对象实例生成内部类对象;
内部类访问外部类:非静态内部类可以直接访问外部类的成员,包括私有成员;静态内部类只能访问外部类的静态成员。
12、线程与进程的区别
线程是cpu单独运行和单独调度的基本单位;
进程是资源分配的基本单位;
进程具有独立的空间地址,一个进程崩溃后,不会影响其他进程。
线程不具有独立的空间地址,线程有自己的堆栈和局部变量,一个线程崩溃等于整个线程崩溃。
13、用户线程与守护线程
守护线程依赖于用户线程,用户线程退出了,守护线程也就会退出,典型的守护线程:垃圾回收线程
14、线程优先级
java线程可以有优先级的设定,高优先级的线程比低优先级的线程有更高的几率得到执行。
优先级从1-10的范围指定,10表示最高优先级,1表示最低优先级,5是普通优先级。
15、死锁
互斥条件、保持与请求条件、不可剥夺条件、循环等待条件。
造成死锁的原因:
当前线程拥有其他线程需要的资源;
当前线程等待其他线程已拥有的资源;
都不放弃自己拥有的资源。
避免死锁的方法:
固定加锁的顺序(针对锁顺序死锁);
开放调用(针对对象之间协作造成的死锁);
使用定时锁;
16、线程同步方法
1、同步方法:既有synchronized关键字修饰的方法;
2、同步代码块 :既有synchronized关键字修饰的语句块;
3、使用特殊变量volatile实现线程同步,保证共享变量的可见性;
4、使用重入锁实现线程同步;ReentrantLock
5、使用局部变量实现线程同步;使用ThreadLocal管理,则每一个使用该变量的线程都会获得该变量的副本,副本之间相互独立。空间换时间
17、类加载的过程
类加载的过程包括:加载、验证、准备、解析、初始化。
加载:将类的.class文件的二进制数据读入到内存中,放进方法区中。在堆中创建一个java.lang.class对象
验证:确保被加载类的正确性
准备:为类的静态变量分配内存,并将其初始化为默认值。如果被final和static修饰,那初始化为指定的值。
解析:把类的符号引用转化为直接引用
初始化:给类的静态变量赋予正确的初始值
18、对象的创建
调用构造函数:
1、用new语句创建对象
2、运用反射手段
不调用构造函数:
3、对象的clone()方法—在内存上对已有对象的影印
4、运用反序列化手段—从文件中还原类的对象
19、java集合框架的基础接口
list、set都继承于Collection接口
List、set、Map
list:有序、可重复、可插入多个null元素
set:无序、不可重复,只允许插入一个null元素
map:key唯一无序 value不唯一无序
20、HashMap与HashTable区别
HashMap:线程不安全,效率高。key/value可以为null值
HashTable:线程安全,效率低。key/value不可以为null值
21、String被final修饰不能被继承
22、ArrayList和LinkedList区别
ArrayList底层是数组,可以自动扩容,适用:查找(内存连续),增删效率低
LinkedList底层是链表,适合:增删,查找效率低(内存不连续)
23、抽象类与接口的区别
1、设计:抽象体现的是一种继承关系,目的是复用代码;
接口体现了功能(规范)和实现分离的原则
2、语法:抽象类可以有构造方法、普通成员变量、非抽象普通方法,接口没有构造方法,只有常量(默认public static final修饰),抽象方法(默认public abstract)。一个类可以实现多个接口,但只能继承一个抽象类。
24、abstract和final
abstract:修饰类和方法,修饰类为抽象类,需要被继承,修饰方法为抽象方法,需要子类重写;
final:修饰类、方法和属性,修饰类不能被继承,修饰方法不能被重写,修饰属性不能被修改,为常量。
25、Java常用包
java.lang基础包、java.util工具包、java.io输入输出流包、java.net网络包、java.sql数据库包
26、java.lang.Object类常用方法
1、比较对象地址值是否相等
2、获取哈希码
3、数据转换成字符串
4、获取类的结构信息
5、垃圾回收前执行的方法
6、克隆
7、多线程等待、唤醒、唤醒所有等待线程的功能
27、java数据结构有哪几种
栈、堆、队列、数组、链表、树、图、散列表。
28、实现多态的三个条件
继承、重写、父类引用指向子类对象
父类引用调用子类重写的方法,此时多态就出现了
29、数组有length这个属性,表示数组长度;String有length()这个方法,用来得到字符串长度
30、java异常处理
1、捕获异常:try…catch…finally…
2、抛出异常:throws
31、多线程的实现方法
实现方法:1、继承Thread类
2、实现Runnable接口,重写run方法
使用Runnable避免单继承的局限性,一个类可以继承多个接口;适合于资源的共享。
32、java中有几种类型的流,分别有哪些类
字节流、字符流
字节流:InputStream、OutpurStream,字符流:reader、writer
Java基础知识点
最新推荐文章于 2020-12-27 11:13:49 发布