java面试基础总结
1、java中==和equals和hashCode的区别
2、int、char、long各占多少字节数
1. byte 1个字节
2. short 2个字节
3. char 2个字节
4. int 4个字节
5. long 8个字节
6. float 4个字节
7. double 8个字节
8. boolean 1/8个字节
3.int与integer的区别
integer 是对象 是int的封装类
4.java多态的理解
多 态:对象在不同时刻表现出来的多种状态。是一种编译时期状态和运行时期状态不一致的现象。
前提:1.必须要有关系:类与类之间要有继承关系 或者 实现
2.要有方法的重写。父类引用或者接口的引用指向子类对象。
好处: 提高了程序的可维护性(前提要有继承保证),和扩展性。
弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(即访问局限性)
多态在子父类中的成员上的体现的特点:
1.成员变量: 编译看左边,运行看左边
2.成员函数 : 编译看左边,运行看右边
3,静态函数 : 编译看左边,运行看左边
5.String、StringBuffer、StringBuilder区别
String:属于字符串常量,字符长度是固定的,每次改变都会生成一个新的对象;而StringBuffer/StringBuilder属于字符串变量,字符长度是可变的。
StringBuffer是线程安全的,但效率较低一些。
StringBuilder是线程不安全的,但效率较高一些。适用于单线程
StringBuffer和StringBuilder可兼容。
6.内部类?内部类的作用
1.内部类可以有多个实体,每个实体都有自己的状态信息,和在外部实体类对象是相互独立的
2.在单个外部类中可以以不同的形式创建多个内部类,继承同一个类或者是实现同一个接口
3.内部类是一个独立的实体类
4.内部类提供了更好的封装,只能当前外部类访问
7.抽象类和接口区别
参数 | 抽象类 | 接口 |
方法实现 | 有默认的方法实现 | 接口完全是抽象的。它根本不存在方法的实现 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 有构造器 | 不能有构造器 |
与正常Java类的区别 | 除了你不能实例化抽象类之外,它和普通Java类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 |
main方法 | 抽象方法可以有main方法并且我们可以运行它 | 接口没有main方法,因此我们不能运行它。 |
多继承 | 抽象方法可以继承一个类和实现多个接口 | 接口只可以继承一个或多个其它接口 |
速度 | 它比接口速度要快 | 接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法。 |
添加新方法 | 如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。 | 如果你往接口中添加方法,那么你必须改变实现该接口的类。 |
8.抽象类的意义
抽象类将事物的共性的东西提取出来,抽象成一个高层的类。子类由其继承时,也拥有了这个超类的属性和方法。---也就实现了代码的复用了。
子类中也可加上自己所特有的属性和方法。----也就实现了多态
9.抽象类与接口的应用场景
- 有一些方法并且想让它们中的一些有默认实现,就可以使用抽象类。
- 想实现多重继承,就必须使用接口。因为Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。
10.抽象类是否可以没有方法和属性
有抽象属性或者抽象方法的必须为抽象类,但是抽象类不一定有抽象方法;
11.泛型中extends和super的区别
- <? extends T> 只能用于方法返回,告诉编译器此返参的类型的最小继承边界为T,T和T的父类都能接收,但是入参类型无法确定,只能接受null的传入
- <? super T>只能用于限定方法入参,告诉编译器入参只能是T或其子类型,而返参只能用Object类接收
- ? 既不能用于入参也不能用于返参
12.父类的静态方法能否被子类重写
- 可继承 不可重写,而是被隐藏了。
-
如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。
13.进程和线程的区别
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。
14.final,finally,finalize区别
final:修饰类、成员变量和成员方法,类不可被继承,成员变量不可变,成员方法不可重写finally:与try...catch...共同使用,确保无论是否出现异常都能被调用到
finalize:类的方法,垃圾回收之前会调用此方法,子类可以重写finalize()方法实现对资源的回收
15.序列化的方式
16.Serializable 和Parcelable 的区别
Serializable Java 序列化接口 在硬盘上读写 读写过程中有大量临时变量的生成,内部执行大量的i/o操作,效率很低。Parcelable Android 序列化接口 效率高 使用麻烦 在内存中读写(AS有相关插件 一键生成所需方法) ,对象不能保存到磁盘中
17.成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
java中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static修饰的类,不能使用任何外围类的非static成员变量和方法, 不依赖外围类)
使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
因为Java不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
18.谈谈对kotlin 理解
优点:null安全监测;属性访问,unchecked exceptions, publication有更详细的介绍。
缺点:编译速度慢,没有命名空间,没有静态修饰语 增加方法数量
19.闭包和局部内部类的区别
闭包就是把函数以及变量包起来,使得变量的生存周期延长。
局部内部类是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。
20.string 转换成 integer的方式及原理
String 转integer Intrger.parseInt(string);
Integer转string Integer.toString();
上一篇: 3.26面试总结(Java基础)
下一篇: react hook监听窗口大小