1.面向对象
1.1.类和对象
1.1.1.面向对象和面向过程的区别
面向过程的性能比面向对象高,开销比较大,比较耗费资源,但面向过程没有面向对象易维护,易复用,易扩展。
面向对象具有易维护,易复用,易扩展。具有封装,继承多态的特性,降低了程序之间的耦合度,但性能比面向过程低。
1.1.2.构造方法能否被override?
构造方法不能被重写,但能够被重载。
1.1.3.在Java中定义一个不做事且没有参数的构造方法的作用
程序在执行子类的构造方法前,如果没有使用super()来调用父类特定的构造方法,则会调用父类没有参数到的构造方法,若父类没有定义无参,只定义了有参构造函数且子类没有使用super()来调用父类的特定构造方法,编译时则会发生错误。
1.1.4.成员变量和局部变量有什么区别?
成员变量属于类的,成员变量可以被访问控制修饰符和static修饰,若被static修饰,那么这个成员变量属于类的,如果没有,那么这个成员变量是属于实例的。
局部变量属于方法的,局部变量不能被访问控制修饰符和static修饰,
他们都可以被final修饰,成员变量随着对象的创建而存在,局部变量则随着方法的调用而消失。
成员变量若没有赋值,则会自动赋值,而局部变量不会
1.1.5.创建一个对象用什么运算符?对象实体和对象引用有什么不同?
创建一个对象用new运算符,一个对象实体即(对象存在堆内存中),对象引用(对象引用存放在栈内存中),一个引用可以指向0个或1个实体,同时一个实体也可以有多个引用指向它。
1.1.6.一个类的构造方法的作用是什么? 若一个类没有声明构造方法,该程序能正确执行吗? 为什么?
主要作用是完成对类对象的初始化工作,即使一个类没有声明构造函数,它也会有默认不带参的构造函数,程序可以正确的执行,若我们自己添加了构造方法,Java就不会再添加默认的无参构造方法了。
1.1.7.构造方法有哪些特性?
1.名字和类名相同
2.无返回值 无法使用void声明构造函数
3.生成类的对象时自动执行,无需调用
2.2.面向对象三大特征
2.2.1.封装
将对象的一些状态信息,属性隐藏到内部,不允许外部直接访问,但可以提供一些特定的方法供外部调用。
2.2.2.继承
继承就是子类和父类共有的一些特点,将这些特点抽离到父类,子类通过继承的方法来实现共同的特点。使用继承可以快速的构建新的类,提高代码的重用,提高开发效率。
1.子类继承父类,子类便拥有了父类所有的属性和方法,但父类中的私有属性和方法子类是无法访问的,只是拥有
2.子类也可以拥有自己的属性和方法,可以对父类进行扩展。
3.子类可以用自己的方式实现父类的方法。
2.2.3.多态
一个对象具有多种状态,具体表现为父类的引用指向子类的实例。
多态的特点
对象类型和引用类型之间具有继承/接口的关系
多态不能调用子类存在,但父类不存在的方法
若子类重写了父类的方法,真正执行的是覆盖的方法。
2.3.其他
StringBuffer,StringBuilder,String的区别是什么?为什么String是不可变的?
可变性:
String 类中使用final修饰字符数组,所以String不是可变的。
StringBuffer,StringBuilder 都继承AbstractStringBuilder,也是使用字符数组带来保存字符串的,但没有被final修饰,所以是可变的。
线程安全:
String 是不可变的,可以理解为常量,所以线程是安全的。
AbstractStringBuilder 是 StringBuffer,StringBuilder的父类,它提供了一些对字符串基本操作的公共方法,所以是不安全的,但StringBuffer对方法加了同步锁,所以线程是安全的。
性能:
String 每次对其进行操作都会生成一个新的对象,然后指向新的对象,
StringBuffer会对自身进行操作,不会产生新的对象
StringBuilder性能低,线程不安全
2.4.==和equals
==对基本数据类型比较的是值,引用数据类型比较的是内存地址
equals也是比较两个对象是否相等
若类没有覆盖equals 判断两个对象是否相等(与==一致)
若类覆盖了equals 比较的是两个对象的内容,若内容相等返回true
2.Java核心技术
2.1.反射机制
Java反射机制是在运行状态中,对于任意一个类来说,我们可以知道它的所有方法和属性,对于任意一个对象来说,我们可以调用它的任意方法和属性,这种动态获取和调用对象的方法称为Java反射机制
2.1.1静态编译和动态编译
静态编译:编译期间确定类型,绑定对象
动态编译:运行期间确定类型,绑定对象
2.1.2反射机制优缺点
优点:运行期类型的判断,动态加载类,提高代码灵活性
缺点:反射相当于一系列解释操作,要通知Jvm做事,性能低,我们可以动态操作类的同时,也存在安全隐患。
2.2.异常
所有的异常和错误的父类的Throwable
Error我们无法通过try-catch捕捉到,我们只能尽量避免
Exception我们可以通过try-catch捕捉到
常见的Exception类有RunException和IOException
3.多线程
3.1.1.线程,程序和进程的基本概念,以及他们之间的关系
线程是一个比进程更小的执行单位,一个进程可以在其执行的过程中产生多个线程,与进程不同的是同类的多个线程共享同一个内存空间和资源,线程的开销比进程小,线程被称为轻量级进程。
程序是含有指令和数据的文件。
进程是程序的一次执行过程,是系统运行程序的基本单位,程序的运行即是一个进程从初始,运行到消亡的过程,进程之间是相互独立的,而线程之间有可能会互相影响。
3.3.2.线程有哪几种状态?
初始状态,运行状态,阻塞状态,等待状态,超时等待状态,终止状态
4.IO 流
4.1.1.Java中流可以分为那几种?
按流的流向分为:输入流和输出流
按操作单元分:字节流和字符流
按流的角色划分:节点流和处理流