java基础面试知识点Word文件下载.docx
《java基础面试知识点Word文件下载.docx》由会员分享,可在线阅读,更多相关《java基础面试知识点Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
![java基础面试知识点Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/16/ecef8721-880e-4d4c-9206-01a91661f63a/ecef8721-880e-4d4c-9206-01a91661f63a1.gif)
英文字母:
字节数:
1;
编码:
GB2312
字节数:
GBK
ISO-8859-1
UTF-8
中文汉字:
字节数:
2;
3;
3.int与integer的区别
1.Ingeter是int的包装类,int的初值为0,Ingeter的初值为null;
2.初始化的时候,inti=1;
Integeri=newInteger
(1);
(要把integer当做一个类看);
但由于有了自动装箱和拆箱使得对Integer类也可使用:
Integeri=1;
3.int是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充),Integer是一个类,是int的扩展,定义了很多的转换方法
4.Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值。
4.对java多态的理解
多态:
继承父类的子类重写父类的某个方法,不同的子类调运同一个方法可以,产生不同的结果。
多态的三个必要条件:
1.继承父类
2.重写父类的方法
3.父类的引用指向子类对象
面向对象的三大特性封装、继承、多态。
从某种程度来看,封装、继承就是为了多态准备的,也是最重要的知识点。
实现多态的技术:
动态绑定,是指在执行期间,根据引用对象实际指向的对象,来执行对应的方法。
多态的作用:
消除类型之间的耦合关系。
多态的好处:
1.可替换行:
多态对已存在的代码有可替换性(重写);
2.扩展性:
多态对代码具有扩展性;
3.接口性:
多态是父类通过方法签名,为子类提供的共同接口,由子类去完善或覆盖;
4.灵活性:
它在应用中体现了灵活多样的操作,提高了使用效率;
5.简化性。
Java中多态的实现方式:
实现接口,继承父类进行方法重写,同一个类中进行方法的重载。
什么是内部类?
内部类的作用
定义:
将一个类定义在一个类或者一个方法里面,这样的类称着内部类
内部类的种类有4种:
1、成员内部类
2、静态内部类静态内部类就是在成员内部类多加了一个static关键字。
3、匿名内部类
4、局部内部类
内部类的作用
1、内部类可以很好的实现隐藏。
非内部类是不可以使用private和protected修饰的,但是内部类却可以,从而达到隐藏的作用。
同时也可以将一定逻辑关系的类组织在一起,增强可读性。
2、间接的实现多继承。
每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。
所以说内部类间接的实现了多继承。
抽象类和接口区别?
抽象类:
1:
有abstract修饰的class,绝对就是抽象类。
2:
抽象类中可以有抽象方法,也可以没有抽象方法,但是有抽象方法的class,就一定会是抽象类。
3:
抽象类是不能创建实例对象的。
4:
如果有子类继承这个抽象类,则必须要实现父类中的抽象方法,如果不实现的话,则这个字类也必须定义为抽象类。
接口:
接口只能实现不能够继承,比如,一个类可以实现多个接口,但是只能继承一个父类,也可以这样理解,一个类可以有多个干爹(实现接口),但是只能有一个亲爹(继承父类)。
如果要实现这个接口,则该接口中的方法必须要实现。
因为我们定义接口中的方法时,系统是默认这些方法是抽象的方法,也就是说这些方法是有publicabstract这个来修饰的。
在接口中定义的变量必须是全局变量的,也就是说有publicstaticfinal修饰的
抽象类的意义
抽象类与接口的应用场景
抽象类是否可以没有方法和属性?
泛型中extends和super的区别?
和是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。
:
是指“上界通配符(UpperBoundsWildcards)”
是指“下界通配符(LowerBoundsWildcards)”
父类的静态方法能否被子类重写?
先给一个答案,不能,父类的静态方法能够被子类继承,但是不能够被子类重写,即使子类中的静态方法与父类中的静态方法完全一样,也是两个完全不同的方法。
重写指的是根据运行时对象的类型来决定调用哪个方法,而不是根据编译时的类型。
对于静态方法和静态变量来说,虽然在上述代码中使用对象来进行调用,但是底层上还是使用父类来调用的,静态变量和静态方法在编译的时候就将其与类绑定在一起。
既然它们在编译的时候就决定了调用的方法、变量,那就和重写没有关系了。
静态属性和静态方法是否可以被继承
可以被继承,如果子类中有相同的静态方法和静态变量,那么父类的方法以及变量就会被覆盖。
要想调用就就必须使用父类来调用。
从上述代码可以看出,子类中覆盖了父类的静态方法的话,调用的是子类的方法,这个时候要是还想调用父类的静态方法,应该是用父类直接调用。
如果子类没有覆盖,则调用的是父类的方法。
静态变量与此相似。
进程和线程的区别?
进程
是系统进行资源分配的独立单元
1
设计思想:
为了允许多个程序同时在内存中运行
特点:
进程是程序的一次执行过程。
若程序执行两次甚至多次,则需要两个甚至多个进程。
进程是是正在运行程序的抽象。
它代表运行的CPU,也称进程是对CPU的抽象。
(虚拟技术的支持,将一个CPU变幻为多个虚拟的CPU)
系统资源(如内存、文件)以进程为单位分配。
操作系统为每个进程分配了独立的地址空间
操作系统通过“调度”把控制权交给进程。
线程
cpu调度的基本单元
在一个进程内也需要并行执行多个程序,实现不同的功能。
进程切换的代价、开销比较大;
在进程内创建、终止线程比创建、终止进程要快。
同一进程内的线程间切换比进程间的切换要快,尤其是用户级线程间的切换。
线程之间相互通信无须通过内核(同一进程内的线程共享内存和文件)
final,finally,finalize的区别?
序列化的方式?
Serializable和Parcelable的区别?
哪些情况下的对象会被垃圾回收机制处理掉?
静态代理和动态代理的区别,什么场景使用?
静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。
Java的异常体系
Java把异常作为一种类,当做对象来处理。
所有异常类的基类是Throwable类,两大子类分别是Error和Exception。
系统错误由Java虚拟机抛出,用Error类表示。
Error类描述的是内部系统错误,例如Java虚拟机崩溃。
这种情况仅凭程序自身是无法处理的,在程序中也不会对Error异常进行捕捉和抛出。
异常(Exception)又分为RuntimeException(运行时异常)和CheckedException(检查时异常),两者区别如下:
RuntimeException:
程序运行过程中才可能发生的异常。
一般为代码的逻辑错误。
例如:
类型错误转换,数组下标访问越界,空指针异常、找不到指定类等等。
CheckedException:
编译期间可以检查到的异常,必须显式的进行处理(捕获或者抛出到上一层)。
IOException,FileNotFoundException等等。
谈谈你对解析与分派的认识。
方法在程序真正运行之前就有一个可以确定的调用版本,并且这个方法的调用版本在运行期是不可改变的,即“编译期可知,运行期不可变”,这类目标的方法的调用称为解析(Resolve)。
静态分派
静态分派只会涉及重载(Oveload),而重载是在编译期间确定的,那么静态分派自然是一个静态的过程(因为还没有涉及到Java虚拟机)。
静态分派的最直接的解释是在重载的时候是通过参数的静态类型而不是实际类型作为判断依据的。
因此在编译阶段,Javac编译器会根据参数的静态类型决定使用哪个重载版本。
动态分派
动态分派的一个最直接的例子是重写(Override)。
对于重写,我们已经很熟悉了,那么Java虚拟机是如何在程序运行期间确定方法的执行版本的呢?
Java中实现多态的机制是什么?
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
如何将一个Java对象序列化到文件里?
将对象序列化到文件
1.对象需要实现Seralizable接口
2.通过ObjectOutputStream的writeObject()方法写入和ObjectInputStream的readObject()方法来进行读取
//存进去
Java反射的理解
简单的来说,反射机制其实就是指程序在运行的时候能够获取自身的信息。
如果知道一个类的名称或者它的一个实例对象,就能把这个类的所有方法和变量的信息(方法名,变量名,方法,修饰符,类型,方法参数等等所有信息)找出来。
如果明确知道这个类里的某个方法名+参数个数类型,还能通过传递参数来运行那个类里的那个方法,这就是反射。
Java注解的理解
注解(Annotation),也叫元数据。
一种代码级别的说明。
它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。
它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
元注解: