java面试宝典_第1篇

java面试宝典

第一章:java基础面试题

1、JDK/JRE/JVM三者的关系

JVM英文名称(Java Virtual Machine),Java 虚拟机,Java 能够跨平台运行的核心在于 JVM 。
JRE英文名称(Java Runtime Environment),就是Java 运行时环境。我们编写的Java程序必须要在JRE才能运行。它主要包含两个部分,JVM 和 Java 核心类库。
JDK英文名称(Java Development Kit),就是 Java 开发工具包,JDK目录下有个JRE,也就是JDK中已经集成了 JRE,不用单独安装JRE。JDK中还有一些好用的工具,如jinfo,jps,jstack等。

JRE = JVM + Java 核心类库
JDK = JRE + Java工具 + 编译器 + 调试器

2、面向对象有哪些特性?

面向对象四大特性:封装,继承,多态,抽象
1、封装:将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问。 良好的封装能够减少耦合。

2、继承:从已有的类中派生出新的类,新的类继承父类的属性和行为,并能扩展新的能力,大大增加程序的重用性和易维护性。在Java中是单继承的,也就是说一个子类只有一个父类。

3、多态:同一个行为具有多个不同表现形式的能力。
重载:在同一类中,方法名相同,参数列表不同。
重写:子类继承父类,进行重写父类的的方法。
向上转型:将一个子类的引用赋给其父类的引用。这样做可以让父类的引用指向子类对象,从而允许使用父类的方法。向上转型是多态性的一个重要部分,它使得代码更加通用和灵活。
向下转型:指将一个父类引用指向子类对象,以便调用子类特有的方法和属性。


4、抽象。把客观事物用代码抽象出来。

3、Java的基本数据类型与包装类是?

img

4.接口和抽象类的区别

相似点:
(1)接口和抽象类都不能被实例化
(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法
不同点
(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法。
(2)抽象类可以有构造方法,而接口没有。
(3)抽象类中的成员变量可以是各种类型的,接口的成员变量只能是 public static final 类型的,并且必须赋值

5.重载和重写的区别

重载发生在同一个类中,方法名相同、参数列表、返回类型、权限修饰符可以不同

重写发生在子类中,方法名相、参数列表、返回类型都相同,权限修饰符要大于父类方法,声明异常范围要小于父类方法,但是final和private修饰的方法不可重写

6.==和equals的区别

==比较基本类型,比较的是值,==比较引用类型,比较的是内存地址

equlas是Object类的方法,本质上与==一样,但是有些类重写了equals方法,比如String的equals被重写后,比较的是字符值,另外重写了equlas后,也必须重写hashcode()方法

7.面向对象和面向过程的区别

面向对象有封装、继承、多态性的特性,所以相比面向过程易维护、易复用、易扩展,但是因为类调用时要实例化,所以开销大性能比面向过程低

8.深拷贝和浅拷贝

浅拷贝:浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存
深拷贝:深拷贝会创造一个一摸一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象。

9、final、finally、finalize的区别

final可以修饰属性、类、方法
final修饰的类是最终类,不可被继承;final修饰的属性是常量,不可被修改;final修饰的的方法,不可被重写。

finally 是处理异常语句中,无论什么情况,都要被执行。哪怕代码中有break、continue、renturn,throw,final都要执行

finalize是一种方法,跟垃圾回收机制有关。finalize()方法,有可能使对象复活,导致垃圾回收器取消该对象的内存。

10、String、StringBuffer、StringBuilder的区别

String 由 char[] 数组构成,使用了 final 修饰,对 String 进行改变时每次都会新生成一个 String 对象,然后把指针指向新的引用对象。

StringBuffer可变并且线程安全

StringBuiler可变但线程不安全。

操作少量字符数据用 String;单线程操作大量数据用 StringBuilder;多线程操作大量数据用 StringBuffer。

11、this、super的区别

this指当前类对象;super指父类对象
this:用在形参与成员变量名称相同时候,用来做区分
super:用在子类继承父类,通过super直接调用父类方法
this(实参):调用本类中另一种形成的构造函数。【第一行】作用:在本类中:通过一个构造方法调用另一个构造方法
super(实参):调用基类中的某一个构造函数。【第一行】作用:字符类继承中:通过子类的构造方法调用父类的构造方法。
两者都不能在static环境下使用。

12.什么是反射?

反射是通过获取类的class对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法。
应用场景有:要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方jar包时、按需加载类,节省编译和初始化时间;
获取class对象的方法有:class.forName(类路径),类.class(),对象的getClass()

13.Java创建对象得五种方式?

(1)new关键字   (2)Class.newInstance  (3)Constructor.newInstance

(4)Clone方法   (5)反序列化

14、Static关键字的用法?

1、非静态的可以访问静态的和非静态的:
2、静态的只能调用静态的,不能调用非静态的;
3、静态的建议使用类名 .xxx进行调用;(调用方式:直接调用对象xxx类名 .xxx);
4、被static修饰的优先级极高,在JVM启动时就会被加载;
5、static可以修饰属性、方法、代码块:
6、被static修饰的在]VM中唯独只有一份,被所有实例所共享:
7、在static静态环境下,不建议使用this和super;
8、被static修饰的方法不存在覆盖问题:
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值