数据类型:
基本数据类型:
整数类型:
byte/short/int/long
小数类型:
float/double
字符类型:
char
布尔类型:
boolean
引用数据类型:
数组/接口/类
包装类:
byte Byte
int Integer
short Short
long Long
float Float
double Double
char Character
boolean Boolean
装箱/拆箱:
装箱:
将基本类型转换为封装类型;
拆箱:
将封装类型转换为基本类型;
自增和自减:
前置++(++a):表示对a加1之后的结果进行运算.(先增加后使用)
后置++(a++):表示对a变量加1之前的原始值进行计算.(先使用后增加)
Java虚拟机栈:
简称栈,每当方法创建的时候都会创建一个栈帧,用来存储局部变量/操作栈/动态链接/方法出口等信息.
每当调用一个方法时调用一个栈帧,存放当前方法的局部变量,方法调用完,该方法的栈帧就被销毁.
Java堆:
所有线程共享一块存储区域,当JVM启动时创建,所有对象和数组都要在堆上分配.
每次使用new关键字,就表示在堆内存中开辟一块新的存储空间.
成员变量:存放在堆内,随着对象的销毁而销毁;
局部变量:存储在栈内存中,随着方法的调用结束而销毁.
GC垃圾回收机制:
GC功能可以自动监测对象是否超过作用域,从而达到自动回收内存的目的.
当JVM内存资源不够用时,就会自动清理堆中无用的对象(没有被引用的对象)所占用的空间.
一般会自动进行管理,要请求时可以调用system.gc()活RunnTime.getRuntime.gc().
垃圾回收机制的基本原理:
当创建对象时,GC从就开始监控这个对象的地址/大小以及使用情况,通常GC使用有向图的方式进行记录和管理堆中的所有对象,以此来确定哪些是"可达的",哪些是"不可达的",当GC确定"不可达"时,回收这些内存空间.
方法参数的值传递机制:
传递基本类型参数:传递参数值
传递引用类型参数:传递参数所引用的堆空间地址值
单例模式(饿汉式):
必须在该类中;
私有化构造器,防止外界通过构造器创建新的工具类对象;
向外暴露一个公共静态方法用于返回自身的对象;
public class ArrayUtils2{
private ArrayUtils2(){
}
private static ArrayUtils2 instance = new ArrayUtils2();
public static ArrayUtils2 getInstance(){
return instance;
}
}
使用枚举示例:
public emnu ArrayUtils3{
INSTANCE;
public static void sort(int[] arr){
system.out.println("排序");
}
}
== 和 equals的区别:
==:
比较基本数据类型时:比较两个值是否相等
比较对象数据时:比较两个对象是否在同一块内存空间(比较的是两个数据内存地址是否相等)
equals:
比较的是存储数据是否相等;
BigDecimal加减乘除操作:
image.png
蓝色区域为乘法和除法按照四舍五入方式保留两位小数;
String和StringBuffer/StringBuilder的区别:
String是不可变字符串;
StringBuffer/StringBuilder是可变字符串;
StringBuffer/StringBuilder区别:
StringBuffer:中的方法都是用了synchronized修饰,保证了线程安全,但性能较低
StringBuilder:中的方法没有使用synchronized修饰,线程不安全,但性能较高
SimpleDateFormat:
格式化(format):Date类型转化为String类型;String format(Date date)
解析(parse):String类型转化为Date类型;Date parse(String str)
Calendar:
日历类
image.png
ArrayList和LinkedList:
ArrayList:查询更改较快,新增和删除较慢.
LinkedList:新增和删除较快,查询和更改较慢.
List和Set接口继承Collection接口,Map接口不继承Collection接口;
image.png
Collection接口:主要表示List和Set两种存储方式;
List接口:列表,允许记录添加顺序,允许元素重复;
Set接口:不记录添加顺序,不允许元素重复;
Map接口:映射关系;
List接口常用实现类:
ArrayList类:
数组列表,表示数组结构,采用数组实现.
底层是一个object数组.
LinkedList类:
链表,表示双向列表和双向队列结构.
底层采用链表算法,实现了链表/队列/栈的数据结构.
Vector类:
向量,古老的ArrayList.
基于数组算法实现的列表,和ArrayList的区别在于使用了synchronized修饰,线程安全,效率低.
Stack类:
栈,表示栈结构,采用数组实现.
是vector类的子类.拥有后进先出特点,拥有push(入栈)/pop(出栈)方法.
Set接口常用实现类:
HashSet类:
底层使用哈希表实现,元素对象的hashCode值决定了在哈希表中的存储位置;
当旺HashSet集合中添加新的元素对象时,先会判断该对象和集合中的hashCode值:
不等:直接把这个对象存储到hashCode指定的位置
相等:再继续判断新对象和集合对象中的equals作比较
若为true:则视为同一对象,不保存
若为false:存储在之前对象同槽位的链表上
TreeSet类:
底层使用红黑树实现,可对集合中元素排序.
HashSet做等值查询效率高,TreeSet做范围查询效率高.
iterator:
迭代器,迭代器中拥有一个指针,默认只想低于个元素之前
boolean hasNext():判断指针后是否存在下一个元素
Object next():获取指针位置下一个元素,获取后指针向后移一位.
Iterator<String> it = list.iterator();
while(it.hasNext()){
String ele = it.next();
System.out.println(ele);
}
image.png
面向对象特征:继承/封装/多态/抽象
抽象:
分两种 过程抽象/数据抽象,是指忽略一个主题中与当前目标无关的那些方面,以便更突出当前目标的方面.
继承:
子类可以从父类中继承方法和实例变量,并且可以修改和增加方法.
Java中类只支持单继承,但支持多重继承.(一个子类只能有一个父类,但是父类还可以作为子类继承父类)
多态:
允许不同类的对象对同一消息做出响应.
封装:
把数据和过程包装起来.
封装的好处:
1.保证数据的安全性,防止调用者随意修改数据;
2.提高组件的重用性,把公用的方法放到一个类中,直接调用即可.
访问修饰符:
image.png
public:表示当前类私有,类访问权限,只能在本类中操作,离开本类不能访问;
defult(不写默认):表示当前包私有,包访问权限,定义和调用只能在同包中才能访问;
prodected:表示子类访问权限,同包中的可以访问,即使不同包但是有继承关系也可以访问;
private:表示公共的,可以在当前项目中任何地方访问.
JavaBean规范:
1.类必须使用public修饰
2.必须保证有公共无参构造器,即使手动提供了带参数的构造器,也得手动提供无参数构造器
3.字段使用private修饰,每个字段提供一对getter和setter方法
方法重载(overload):
两同一不同:
两同:在同一类中,方法名相同
一不同:方法参数列表不同(参数类型,参数个数,参数顺序)
方法重载的作用:屏蔽同一功能的方法由于参数不同所造成的方法名称不同.
方法重写(override):
子类存在一个和父类一样的方法时,称之为子类覆盖了父类的方法,也就是重写;
1.实例方法简明必须相同;
2.子类方法的返回值类型是和父类方法的返回值类型相同或是其子类;
3.子类方法中抛出的异常小于或等于父类方法声明抛出异常类型;
4.子类方法的访问权限比父类方法访问权限更大或相等.
抽象方法:
1.使用abstract修饰的方法,没有方法体,留给子类去覆盖
2.抽象方法必须定义在抽象类或接口中
接口和实现类的关系:
接口:定义多个抽象方法,仅仅定义有哪些功能,却不提供实现
实现类:实现接口,覆盖接口中抽象方法,完成具体的实现
this:
表示当前对象
主要存在于两个位置:
在构造器中:表示当前被创建的对象
在方法中:哪一个对象调用this所在的方法,此时this就表示哪一个对象
this的使用场景:
1.解决局部变量和成员变量之间的二义性,此时必须使用
2.同一个类中非static方法间互调
3.构造器重载的互调
super:
当前对象的父类对象
super的使用场景:
1.在子类方法中:调用父类被覆盖的方法
2.在子类构造器中:调用父类构造器
静态代码块:
static{
System.out.println("静态代码块");
}
使用static修饰的初始化代码块,当该代码块的类的字节码被加载进JVM,就执行static代码块代码,在开发中用来加载资源,加载配置文件等.
网友评论