目录
14.简述string和stringBuider定义变量的方式和内存模型《应该不考》线程的
1.下面三者的区别
JDK 是 Java 语言的软件开发工具包,JDK是整个Java开发的核心。
JRE是指Java的运行环境,是可以在其上运行、测试和传输应用程序的Java平台。
JVM(Java虚拟机)是一种用于计算设备的规范,它是一个虚构出来的计算机,引入JVM后,Java语言在不同平台上运行时不需要重新编译。JVM是Java跨平台的核心。
2.基本数据类型
3.变量的作用范围,类变量,实例变量。局部变量的区别
作用范围:就是变量的生命周期,在什么时候有效
- 类变量:独立于方法之外的变量,用 static 修饰。作用域:程序结束
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。作用域:从声明处开始,直到含该变量的块结束
- 局部变量:类的方法中的变量。作用域:所在的代码快,代码块结束,生命周期结束、
4.普通类和抽象类和内部类的区别
- 定义和实例化:
- 普通类可以直接实例化,而抽象类不能被实例化,只能被继承。
- 普通类中不包含抽象方法,只有具体的方法实现。
- 抽象类中可以包含抽象方法,抽象方法没有具体的实现,需要在子类中实现。
- 2继承:
- 内部类可以被单继承或多继承。
- 3.实现接口:
- 普通类可以实现接口。
- 抽象类可以实现接口,也可以不实现接口。
- 内部类可以实现接口。
- 4实例化对象:
- 普通类可以直接实例化对象。
- 抽象类不能直接实例化对象,但可以通过子类实例化对象。
- 内部类可以通过外部类实例化对象。
- 5使用场景:
- 普通类适用于具体的对象实例化。
- 抽象类适用于具有共同特征的类的抽象和继承。
- 内部类适用于需要在其他类内部定义和使用的类。
5.面向对象编程的三大特征
继承:子类可以继承父类的内容,实现代码复用。
多态:可以让不同对象调用相同函数实现不同的结果
封装:它通过将数据和操作封装在一个类中,实现了数据的隐藏和保护。封装的过程包括定义类、定义类的成员变量和成员方法,并使用访问修饰符来控制对类的成员的访问权限。
6.封装实现的过程和实现的必要性
封装的实现过程如下:
- 定义一个类,用于封装相关的数据和操作。
- 使用private访问修饰符来限制类的成员变量的访问权限,使其只能在类的内部访问。
- 提供公共的成员方法(getter和setter方法)来访问和修改类的成员变量。
封装的必要性:
- 数据隐藏和保护:封装可以隐藏类的内部实现细节,只暴露必要的接口给外部使用,提高了代码的安全性和可维护性。
- 简化代码的使用:封装可以将复杂的操作封装在一个方法中,对外部提供简单的接口,方便使用。
- 提高代码的可重用性:封装可以将一些通用的操作封装在类中,可以在不同的地方重复使用,提高了代码的复用性。
- 降低代码的耦合性:封装可以将类的内部实现和外部的使用分离开来,减少了类之间的依赖关系,降低了代码的耦合性。
7.子类从父类哪里继承了什么?
子类从父类哪里继承了属性和方法
Java底层会创建一个虚方法表,从最顶级的父类开始,把类中的非private,非static,非final的方法都提取到虚方法表中,子代会继承虚方法表,子代中符合条件的方法也会被提取到虚方法表中,在使用这些方法时只需要创建最底层子类的对象即可。
8.简述多态的实现过程
多态产生的必要条件
一、要有继承;二、要有重写;三、父类引用指向子类对象。
实现过程是通过父类的引用指向子类的对象,调用同一方法时可能会产生不同的行为
9.接口的构成和作用
接口由常量和抽象方法组成,作用是定义一些规范,使得类可以实现这些规范,以便统一处理对象
10.final的用法有哪些
1.修饰类 当用final修饰一个类时,表明这个类不能被继承
2.修改方法 表示该方法不能被重写
3.修饰变量 表示该变量只能被赋值一次
11.static的用法有哪些
- 修饰成员变量,使其成为类变量,也叫静态变量
- 修饰成员方法,使其成为类方法
- 修饰内部类,使其成为静态内部类
- 静态代码块
- 静态导包
12.静态代码块的和构造代码块的作用分别是什么
代码块是由一对大括号
{}
包围起来的一段代码构造代码块:构造代码块在类的构造方法执行之前执行,用于对对象进行初始化操作。
静态代码块:静态代码块在类被加载时执行一次,用于对静态成员进行初始化或进行一些静态预处理任务。
13.==和equals的区别是什么
一、对象类型不同
1、equals():是超类Object中的方法。
2、==:是操作符。
二、比较的对象不同
1、equals():用来比较两个字符串内容是否相同。
2、==:用于比较俩个对象的引用是否相等
三、运行速度不同
1、equals():没有==运行速度快。
2、==:运行速度比equals()快,因为==只是比较引用。
14.简述string和stringBuider定义变量的方式和内存模型《应该不考》线程的
String是不可变字符序列。
StringBuilder也是可变的字符序列。
string对象在常量池中,StringBuilder对象在堆上
15.构造方法的作用是什么?简述构造方法的几种形式
作用:
对象的初始化
属性的赋值
实现重载
对象的复制或克隆(拷贝构造)
初始化代码块执行
继承和多态
形式:
无参构造方法和有参构造方法
16 数据流,字符流,字节流的概念
数据流(Stream)就是一系列的数据。
字节流:用于以字节的形式读取和写入数据。
字符流:专门用于字符的形式读取和写入数据。
17.读写一个文本文件的过程
首先创建File对象,在创建reader/writer对象,读取或写入文件,最后关闭流
18.什么是重载
重载是在一个类中,方法名相同但参数类型、个数或顺序不同的方法
19.什么是重写
重写是子类重新定义父类中已有的方法
19.file类的作用是什么?
file类用于文件或目录的路径名,以及对文件和目录进行操作
20.简述三种集合的特点,并举例有哪些类?
List集合类中的元素有序(添加顺序和取出顺序一致),可重复。
List集合中的每个元素有其对应的顺序索引ArrayList:由数组来实现数据的存储,可以随机访问
Vector:和ArrayList类似,它是线程安全的
LinkedList:双向链表实现,可以快速在链表中间插入和删除元素。
——————————————————————————————————————————Set 是一个不能包含重复元素的集合。
TreeSet:基于红黑树实现,支持有序性操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O(1),TreeSet 则为 O(logN)。
HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。使用 Iterator 遍历 HashSet 得到的结果是不确定的。
LinkedHashSet:具有 HashSet 的查找效率,并且内部使用双向链表维护元素的插入顺序。
———————————————————————————————————————————Map是一个将键映射到值的对象。映射不能包含重复的键:每个键最多可以映射到一个值。
TreeMap:基于红黑树实现。
HashMap:基于哈希表实现。
21.异常可以分为哪些类
Java的异常分为可查的异常(是编译器要求必须处置的异常)和不可查的异常(编译器不要求强制处置的异常 包括运行时异常和非运行时异常)。
22.一个类可以有哪些组成成员?
有构造方法,成员变量,成员方法,代码块,内部类等组成成员
23.访问修饰符有哪些,代表的含义是什么?
对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
对于protected修饰符,它主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。
对于default来说,有点的时候也成为friendly(友员),它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
对于private来说,它的访问权限仅限于类的内部,是一种封装的体现。