java基础知识整理,内容会不定期更新


这是本人在面试前对我的java技术的一个整理,以及查阅资料后自己的理解,疫情期间在家准备面试中;整理成博客文章,第一是为了方便自己理解,第二是为了记录成笔记方便以后遇到技术问题自己查看,希望可以帮到看到的朋友,如文中有什么错误请联系作者及时指出。

1、Java基础知识

1.1、基础知识

  1. java程序的初始化顺序是怎样的?
    当在new对象(实例化)时,成员变量先于构造函数的初始化,并且初始化遵循三个原则:①静态对象(变量)先于非静态对象(变量)②父类先于子类 ③按成员变量的定义顺序初始化,即使成员变量定义于方法(或构造函数)内,也会在调用前初始化。
    初始化顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。

  2. 一个.java文件是否可以定义多个类?
    可以的,但是只能有一个public修饰的类,如Animal.java中定义了public class Animal{}和class Cat{},java编译器编译后会产生两个文件,Animal.class和Cat.class。

  3. 什么是构造函数?
    构造函数时一种特殊的函数,用于new对象时,对对象进行初始化。
    特点:
    ①构造函数与类名相同,且没有返回值(返回值也不能是void),不能定义为private修饰;
    ②每个类至少有一个构造函数(默认构造算一个),每个构造函数的参数列表不相同(构造函数的重载),不能被继承;
    ③子类可以通过super([参数一] , [参数二])显式调用,在父类构造函数是无参构造或默认构造时,子类会隐式调用父类的构造函数。

  4. 有些接口中为什么没有任何方法?
    在java中,我们知道类只可单继承,为了弥补只能单继承这个缺点,引入了接口的概念,即一个类可以实现多个接口区完成一些类的复杂功能;而有些接口里面竟然没有任何方法声明,这些接口被称为标识接口,相当于汽车的车标,唯一的作用就是看到车标知道这个是什么车,这个接口也是同样的道理,表明它是属于一个特定的类型,如Cloneable和Serializable等。

  5. java中的clone方法的作用?
    克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。那么我把这个对象的临时属性一个一个的赋值给我新new的对象不也行嘛?可以是可以,但是一来麻烦不说,二来,大家通过上面的源码都发现了clone是一个native方法,就是快啊,在底层实现的。
    浅克隆(ShallowClone)和深克隆(DeepClone)

  • 待办
  • 待办
  • 待办
  • 待办
  1. 反射机制是什么?
    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
    当程序需要动态创建某个类的对象时才会考虑使用反射。
    获取Class类的方式:
    1)Class.forName(“类的路径”);
    2)类名.Class;
    3)实例.getClass()

1.2、面向对象

  1. 面向对象跟面向过程的区别?
    举例:洗衣服
    面向过程:①将衣服放入盆中——>②放入衣服——>③倒入洗衣粉——>④打开水龙头加水——>⑤用手搓洗——>⑥用手漂洗——>⑦用手拧干——>⑧晾晒

    面向对象:①将衣服放入洗衣机——>②放入衣服——>③倒入洗衣粉——>④启动洗衣机(清洗、漂洗、烘干)——>⑤取出衣服
    面向过程重在过程,所有步骤都是亲历亲为,一步一步来进行;面向过程重在对象,将事物包装成对象,让相应的对象做相应的事情。

  2. 面向对象的特性有哪些?
    封装、继承、多态
    封装:将客观事务抽象成类,每个类对自身的方法和属性保护(修饰符),或者将特定功能的方法进行包装,调用者不用关心具体细节,只需要知道作用、参数、返回值即可;

    继承:类与类进行extends关键字进行继承,继承者被称为子类,被继承者称为父类,继承是为了使用父类某些方法、属性供子类使用,不需要在到子类重新定义,避免代码臃肿。(子类不能有比父类更大的访问权限,如父类是private ,子类不能是public修饰);
    注意:不要轻易使用继承,除非类之间存在“is - a”的关系,否则会增加程序的维护难度和成本。【拓展:组合与继承的区别?】

    多态:指的是同一接口的不同实现方式,多态允许基类的指针指向子类方法。如 A extends C、B extends C ,C c1 = new A(); C c2 = new B()。
    多态作用:①不必编写每一子类的功能调用,可以直接把不同子类当父类看,屏蔽子类间的差异,提高代码的通用率/复用率;②父类引用可以调用不同子类的功能,提高了代码的扩充性和可维护性。

  3. 多态的实现机制是什么?
    编译时多态和运行时多态。编译时多态是通过哦方法的重载实现的,运行时多态是通过方法的覆盖(子类覆盖父类的方法)实现。

  4. 抽象类(abstract class)与接口(interface)有什么异同?
    相同点:①都不能被实例化;②接口的实现类或者抽象类的子类在实现了各自接口和抽象类的方法后才能被实例化。
    不同点:
    |–类型–| abstract class | Int erface |
    |–定义–| abstract class关键字 | Interface关键字 |
    |–继承–| 抽象类可以继承一个类和实现多个接口;子类只可以继承一个抽象类 |接口只可以继承接口(一个或多个);子类可以实现多个接口|
    |–访问修饰符–| 抽象方法可以有public、protecteddefault这些修饰符 |接口方法默认修饰符是public。不可以使用其它修饰符|
    |–方法实现–|可定义构造方法,可以有抽象方法和具体方法| 接口完全是抽象的,没构造方法,且方法都是抽象的,不存在方法的实现|
    |–实现方式–|子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现| 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现|
    |–作用–| 为了把相同的东西提取出来,即重用 |为了把程序模块进行固化的契约,是为了降低偶合|

  5. this与super的区别?
    this:是指当前实例对象,当前实例对象属性名(private String name;)与方法的形参名(String name)相同时,利用this.name访问的是对象的属性;

    super:同理指的是当前实例对象的父类对象,当前实例对象父类属性名(private String name;)与当前对象方法的形参名(String name)相同时,利用super.name访问的是当前对象父类的属性,super也可访问父类方法;

1.3、关键字

  1. break、continue和return有什么区别?
    ①break表示跳出当前循环,不在执行循环后面代码;当break处于多层嵌套循环时,break只跳出包含的循环,外层循环不受影响。
    ②continue表示停止当前循环,进入下一次循环,continue后面的语句将不再执行。
    ③return是一个返回语句,表示从某个方法返回一个字符串、实例。
  2. final、finally和finalize有什么区别?
    ①final一般用于修饰属性、方法、类,表示属性不可变(引用不可变、对象不可变,不是内容不可变),方法不可重写,类不可被继承。
    ②finally被用作异常处理的一部分,且只能配合try/catch使用,被finally包裹的代码块表示最终一定会执行,一般用于释放资源。
    ③finalize是Object的一个方法,在垃圾回收机制执行时,调用被回收对象的finalize方法,再下次垃圾回收机制执行时,JVM真正的回收掉对象占用的内存。
  3. static关键字的作用有哪些?
    两种作用:①为某特定数据类型或对象分配单一的内存空间,与创建对象的数量无关;②为某个属性或者方法直接关联类,意思是在编译时就已经创建属性或者方法,可以通过类直接访问属性或者方法而不需要new对象。
    四种使用:成员变量、成员方法、代码块、内部类。
    注意:不能在方法内定义static变量
  4. switch的使用?
    JDK7前,switch(expr)中的expr只支持int 、Integer、byte、short、char,因为这些值能给个剖隐式的转换为int类型;
    JDK7后,除了上述以外,另外还支持String类型(底层有String调用hashCode()得到hash值<int类型>,与case的hash值比较);
    注意:case语句里面,要配合使用break关键字,否则switch语句就会出现问题。
  5. instanceof的作用是什么?
    instanceof时=是java语言的一个二元运算符,作用是判断一个引用类型的变量所指的对象是否是一个类(或接口、抽象类、父类)的实例,即左边是否属于右边的实例类型。
  6. strictfp关键字的作用?
    strictfp关键字是strict float print的缩写,一般用法 public strictfp class test{},主要作用是为了保证各大平台(linux、windows、macOS)的虚拟机,在计算浮点数会产生差异,而strictfp可以统一使用有特定的标准来计算,不会产生差异。

1.4、基本类型与运算

  1. Java的基本数据类型有哪些?
    八大基本数据类型:①byte ②short ③int ④long ⑤boolean⑥char ⑦float ⑧double
    字节长度分别是: 1bit、 2bit、 4bit、 8bit、 1bit、 2bit、 4bit、 8bit
    在java中还有其他的数据类型,封装类型和实例化类型,在参数传递时基本数据类型是值传递,封装类型和实例化类型是引用传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上尉和java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值