java 内存图
Java内存图描述了jvm运行时内存的划分,主要包括:
堆:存储对象实例,分为新生代和老年代 方法区:存储类信息、静态变量 虚拟机栈:线程私有、存储栈帧 程序计数器:记录当前线程执行的字节码行号
基本类型
byte boolean char int short float double long
128陷阱
在Integer a=128; Integer b=128; 在a和b进行比较是否相等的时候,因为Integer和int涉及到自动拆装箱,所以Integer a=Integer.valueOf(128)与Integer a=128是一个意思,valueOf的内部是有取值范围了,是-128~127,如果超出了这个范围,需要重新new对象,那么两个的地址就不一样了所以a和b是不相等的。
字符串常用api
split:分割字符串 upperCase:转化为大写 lowerCase:转化为小写 indexOf:查找当前字符所在的位置 charAt:查找当前位置的字符 trim:去除前后所有的空格 length:返回字符串的长度 substring:进行字符串的截取
字符串为啥是不可变的
因为string类的实现类是由final修饰的,类中存储数据的char数组也是由final修饰的,类中无修改char数组内容的方法
static关键字有啥作用
修饰类:静态的类只有静态内部类 修饰方法:归类所有、所有实例共享、方法内不能访问实例变量 修饰变量:归类所有、所有实例共享 修饰代码块:代码从上往下执行只是执行一次
final关键字有啥作用
final修饰的类是不能被继承的,final修饰的方法不能被重写,final修饰的变量不能再次被赋值
为啥重写equals 要重写hashcode
根据Java规范,equals()相等的对象必须有相同的hashcode。如果不遵守这个规则,当对象作为键存入hashmap或hashset时,会导致无法正确查找对象,因为哈希集合首先通过hashcode定位对象,再用equals确认相等性,只重写equals会导致逻辑上相等的对象可能被放入不同的哈希桶中,破坏集合类的正常工作
常用的集合
list:arraylist、linkedlist set:hashset、treeset map:hashmap、treemap、hashtable
反射
反射是Java提供的动态机制,允许程序再运行时获取类的信息操作其属性和方法,通过Class、Filed、Method等核心类实现,常用于框架开发(如spring的依赖注入)。
代理
代理是一种设计模式,通过代理对象控制对真实对象的访问。Java支持静态代理(手写编写代理类)和动态代理(运行时生成),动态代理包括JDK动态代理和CGLIB动态代理,JDK动态代理要求目标类实现接口,而CGLIB通过继承继承生成子类代理。Spring AOP默认使用JDK动态代理,若无接口则使用CGLIB。代理模式广泛应用于日志、事务、RPC等场景
面向对象的特性,分别在什么地方有应用
继承:实现代码复用和扩展、多态:同一接口不同实现、封装:隐藏内部细节提供安全访问(如getter、setter方法)
权限修饰符
public:修饰的全部都可以调用 protected:子类可以调用 default:同一个包下的可以调用 private:只有在当前类中才可以调用
异常体系
Java中异常throwable主要分为error和exception,error通常是虚拟机发生无法恢复的错误,比如内存不足堆栈溢出等 exception包括runtimeexception运行时异常 和ioexception受查异常 运行时异常主要是指数组异常和空指针