什么是面向对象?
面向对象主要是事物对象化,包括属性和行为,简称OOP。Java 是一个支持并发、基于类和面向对象的计算机编程语言。面向对象软件开发具有以下优点:
- 模块化
- 复用性
- 灵活性
- 可读性
面向对象的特征?
封装、继承、多态、抽象
封装:隐藏对象内部的属性和特征。对象提供一些方法能被调用并且修改内部的值。
继承:子类继承并拥有父类的属性和特征。解决了代码的重用性,子类内部可以增加新属性或功能。
多态:指为不同的数据类型的实体提供统一的接口。是编程语言给不同的底层数据类型做相同的接口展示的一种能力。
抽象:众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。
接口和抽象类的区别?
(1)抽象类可以有构造方法,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含静态方法,接口中不能包含静态方法
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承
(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
面向对象和面向过程的区别?
面向过程是以事件为中心,按照我们编写的代码是根据完成一个步骤的过程来进行。
面向对象以对象为中心,我们把要完成的功能封装成一个一个的对象,调用对象的方法或属性来完成功能。
重载和重写的区别?
重写:
- 方法名、参数、返回值相同。
- 子类方法不能缩小父类方法的访问权限。
- 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
- 存在于父类和子类之间。
- 方法被定义为
final不能被重写。
重载:
- 参数类型、个数、顺序至少有一个不相同。
- 不能重载只有返回值不同的方法名。
- 存在于父类和子类、同类中。
JDK、JRE、JVM分别是什么及关系?
JDK:Java的标准开发工具包。包括JRE、JVM JRE:Java的运行环境,用于解释Java字节码文件。包括JVM JVM:Java的虚拟机,实现跨平台的核心,负责解析执行字节码文件,是可运行java字节码文件的虚拟计算机
字节码是什么?采用字节码有哪些好处呢?
字节码:字节码即扩展名.class文件,它是由java编译器编译Java源程序生成JVM能够理解的代码,这种代码就是字节码,它不面向任何平台只面向JVM。
采用字节码的好处:Java语言编译成字节码通过JVM实现跨平台,保留了解释性语言可移植的特点(Java是编译和解释并存),这也体现了Java语言"一次编译到处运行"的特点,在一定程度上解决了解释语言执行效率低的问题。
Java 中的几种基本数据类型是什么?各自占用多少字节?
- 整数值型:
byte、short、int、long - 字符型:
char - 浮点类型:
float、double - 布尔型:
boolean - 整数型:默认
int型,小数默认是double型。Float 和 Long 类型的必须加后缀。比如:float f = 100f。
引用类型声明的变量是指该变量在内存中实际存储的是一个引用地址,实体在堆中。
- 引用类型包括类、接口、数组等。
- 特别注意,String 是引用类型不是基本类型。
什么是值传递和引用传递?
- 值传递,是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
- 引用传递,一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。
String、StringBuffer、StringBuilder 的区别?
String:只读字符串,final修饰,不能修改的,操作少量数据,每次操作都会产生一个新的String对象,指针指向新的对象。
StringBuffer:可变字符串,多线程使用,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。
StringBuilder:可变字符串,单线程使用,没有被synchronized修饰,效率比StringBuffer高。
String s = new String("xyz") 会创建几个对象?
- 首先,在 String 池内找,找到
"xyz"字符串,不创建"xyz"对应的 String 对象,否则创建一个对象。 - 然后,遇到
new关键字,在内存上创建 String 对象,并将其返回给s,又一个对象。
所以,总共是 1 个或者 2 个对象。
equals 与 == 的区别?
-
值类型(
int,char,long,boolean等)的话都是用 == 判断相等性。
-
对象引用的话
== 判断引用所指的对象是否是同一个。 equals 方法,是 Object 的成员函数,有些类会覆盖(
override) 这个方法,用于判断对象的等价性。