面向对象和集合
1. 面向对象和面向过程的区别
面向过程:面向过程的编程方式是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,并在使用的时候逐个调用。这种方式性能较高,因此在单片机和嵌入式开发中经常采用面向过程开发。
面向对象:面向对象的编程方式是把问题分解成各个对象,建立对象的目的是描述某个事物在解决整个问题过程中所发生的行为。面向对象具有封装、继承、多态的特性,因此易于维护、复用和扩展,可以设计出低耦合的系统。然而,面向对象的性能比面向过程要低。
面向对象编程(OOP)和面向切面编程(AOP):
- OOP:通过类和对象的方式,封装数据和行为,强调对象的行为和交互。
- AOP:通过切面将横切关注点(如日志、事务管理等)从业务逻辑中分离,减少代码重复和耦合。
2. 介绍下Java中的基本数据类型
基本类型 | 大小(字节) | 默认值 | 封装类 |
---|---|---|---|
byte | 1 | (byte)0 | Byte |
short | 2 | (short)0 | Short |
int | 4 | 0 | Integer |
long | 8 | 0L | Long |
float | 4 | 0.0f | Float |
double | 8 | 0.0d | Double |
boolean | - | false | Boolean |
char | 2 | \u0000(null) | Character |
需要注意:
- int是基本数据类型,Integer是int的封装类,属于引用类型。int默认值是0,而Integer默认值是null,因此Integer能区分出0和null的情况。一旦Java看到null,就知道这个引用还没有指向某个对象。在任何引用使用前,必须为其指定一个对象,否则会报错。
- 基本数据类型在声明时系统会自动给它分配空间,而引用类型声明时只是分配了引用空间,必须通过实例化开辟数据空间之后才可以赋值。数组对象也是一个引用对象,将一个数组赋值给另一个数组时只是复制了一个引用,因此通过某一个数组所做的修改在另一个数组中也看的见。虽然定义了boolean这种数据类型,但在Java虚拟机中没有任何供boolean值专用的字节码指令。Java表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素占8位。这样我们可以得出,boolean类型在单独使用时占4个字节,在数组中占1个字节。使用int的原因是,对于当下32位的处理器来说,一次处理32位数据具有高效存取的特点。
3. 标识符的命名规则
标识符的含义:指在程序中自己定义的内容,如类的名字、方法名称以及变量名称等,都是标识符。
命名规则(硬性要求):标识符可以包含英文字母,0-9的数字,$以及_,但不能以数字开头,且不能是关键字。
命名规范(非硬性要求):
- 类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。
- 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
- 方法名规范:同变量名。
4. instanceof
关键字的作用
instanceof
是 Java 中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:
boolean result = obj instanceof Class
其中 obj
为一个对象,Class
表示一个类或者接口。当 obj
为 Class
的对象,或者是其直接或间接子类,或者是其接口的实现类,结果 result
返回 true
,否则返回 false
。
注意:编译器会检查 obj
是否能转换成右边的 Class
类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
int i = 0;
System.out.println(i instanceof Integer); // 编译不通过,i 必须是引用类型,不能是基本类型
System.out.println(i instanceof Object); // 编译不通过
Integer integer = new Integer(1);
System.out.println(integer instanceof Integer); // true
// false ,在 Java SE 规范中规定,如果 `obj` 为 `null`,返回 `false`
System.out.println(null instanceof Object);
5. 重载和重写的区别
重写(Override)
重写发生在父类与子类之间。子类继承父类的方法,但可以重新定义方法体,从而实现不同的功能。重写要求方法名、参数列表和返回类型(除非子类方法的返回值是父类方法返回值的子类)必须相同,且子类方法的访问修饰符不能比父类方法更严格。
public class Father {
public void sayHello() {
System.out.println("Hello");
}
}
class Son extends Father {
@Override
public void sayHello() {
System.out.println("hello by son");
}
public static void <
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 面试突击指南:Java基础面试题2
发表评论 取消回复