java知识点
java中的collection:https://www.cnblogs.com/taiwan/p/6954135.html
hashtable和hashmap:hashtable的key和value不允许为null,hashmap的key和value可以为null
hashtable的方法是Synchronized,hashmap没有,是非线程安全的,线程不安全的hashmap采用的是快速失败机制(线程不安全的集合对象在迭代过程中有其他线程修改了集合对象结构或者元素数量,有可能会抛出异常:ConcurrentModificationException)
运算符优先级:(从大到小)
java的jvm:
内存分为三个区:堆(heap),方法区(method),栈(stack)
堆区被所有的线程共享,只存放对象的实例和数组
方法区杯所有线程共享,用于存储已经被虚拟机加载的类信息、常量、静态变量
栈区,每一个线程都有一个栈区,栈区中保存方法的基础数据类型和对象的引用
异常捕捉:try catch finnally
执行try如果有错则执行catch,然后执行finnally(finnalyy语句一定会执行)
finally语句一定会在return之前执行,finally的return或者throw语句会覆盖try-catch语句中的return
静态方法:用static修饰,使用公共的内存空间,所以的对象可以直接引用,可以通过类型或者对象名.方法名调用
在实例化类的时候,静态会被优先加载,且只加载一次,不受实例化的影响就可以使用
垃圾回收还是会造成内存泄漏问题,内存泄漏:一个不被使用的对象或者变量还在内存中占用存储空间,在c中由程序员来释放内存
在java中引入了垃圾回收机制来释放内存,但是还是会存在内存泄漏,
内存泄漏的两种情况:①堆中申请的内存没有释放②对象已不被使用(如连接没有关闭),GC机制只能解决①情况
造成内存泄漏的原因:1.静态集合类,生命周期同程序一样,对象在程序结束之前将不能释放,造成浪费
2.各种连接:数据库连接,网络连接,IO连接,不使用时不关闭
3.释放对象时没有删除相应的监听器
内存溢出:申请的内存不足够使用,内存泄漏会导致内存溢出
sleep()和wait():sleep是thread类中的,wait是object中的,sleep不释放锁,wait释放锁,wait、notify必须在Synchronized中使用
类加载的过程:
字符串:
indexof(str):从左至右返回指定字符串的下标
lastindexof(str):从右至左返回指定字符串的下标
(下标都从左往右由0开始)
substring(begin,end):返回由begin到end-1的字符内容
String、Stringbuffer、Stringbuilder
String是不可变字符,每次修改是是生成新的string对象,传值和传地址没有什么区别
Stingbuilder:可变长字符,效率高,线程不安全
Stringbuffer:可变长字符,效率低,线程安全