Java基础
Java优势
- 平台无关性:一次编写,到处运行;得益于JVM(Java虚拟机),使得Java应用可以在任何操作系统上运行,无需修改代码。
- 面向对象:Java语言是面向对象的,支持封装、继承、多态。
- 自动内存管理:Java通过垃圾回收机制自动管理内存,减少了内存泄露、内存管理错误。
- 丰富的API和强大的社区支持:Java提供了庞大的标准库和第三方库,同时拥有活跃的开发者社区。
反射
原理
- 反射-一种机制,允许运行时动态获取类的信息(类名、方法、字段),并调用其方法或修改其字段,无需提前知道类的结构。
- 通过Class对象获取类的元数据,常用方法包括getDeclaredMethods( )、getDeclaredFileds()、newInstance()等。
应用场景
- 框架实现:Spring通过反射实现依赖注入、动态代理等。
- 接口自动化框架:注解驱动,底层也是通过反射获取注解信息,作为自动化用例参数准备。
内部类
构造器
构造器用于初始化对象、与类同名、没有返回值、构造器可以有参数用于传递初始化数据。
如果类中不显示定义构造器,编译器会自动生成一个无参的默认构造器。一旦定义了有参构造器,默认构造器不再自动生成。
泛型和作用
Java泛型允许类、接口和方法可以操作任何类型的数据,而不用指定具体的数据类型,比如ArrayList可以存储任何类型的对象。
包装类
Java的包装类用于将基本数据类型(如int、char等)转化为对象类型。常见的包装类包括Integer、Character、Double等。包装类的主要作用有两个:
1. 自动装箱/拆箱:Java会自动将基本类型转换为包装类对象(装箱)和将包装类对象转换回基本类型(拆箱)。
2. 集合支持:集合类如List、Map只能存储对象,包装类使得基本类型也能被存入集合中。
此外,包装类是不可变的,一旦创建,不能修改它的值。
Integer和int
区别
1. 类型:
int是基本数据类型,存储的是数值本身。
Integer是包装类,int的对象化类型,可以为null。
2. 内存:
int存储在栈内存中,效率高。
Integer是对象,存储在堆内存中,消耗更多的内存。
3. 默认值:
int的默认值为0。
Integer的默认值为null。
4. 功能:
Integer提供了很多方法,如parseInt()、toString()等,int没有这些功能。
5. 自动装箱与拆箱:
Java支持自动将int转换为Integer(装箱),或将Integer转换为int(拆箱)。