Junit单元测试:
java的jar包:
代码的打的特定的压缩包
Object类:
Object类是java中所有类父类
java.lang.Object
public final native Class> getClass(); // 获取类的字节码文件
public native int hashCode(); // 获取对象的hashcode
equals() // 比较对象,默认使用== 比较内存地址
native关键字
被它修饰的方法,叫做本地方法
都是没有实现体。
JVM在底层使用C/C++实现。
引用传递和对象拷贝:
引用传递:将栈引用进行复制,堆中的对象始终是一个
对象拷贝:堆对象会进行复制
在java中,如果需要拷贝对象,一定要去该类实现Cloneable接口
对象的深浅拷贝:
浅拷贝:将对象的第一层完成拷贝,是的两个对象完成了基本的分离
有可能还存在着藕断丝连
优点:内存占有较少
缺点:如果存在底对象,则子对象没有拷贝,还是指向同一个。
深拷贝:
将两个对象完成分离,彼此之间将无任何关系。
递归拷贝
java实现深拷贝有两种方法。
1、所有相关对象都是实现浅拷贝
2、通过序列化对象实现深拷贝
对象 <==> 字节数据
对象 <==> 字符串数据(如JSON)
toString() // 打印对象时调用
notify()
notifyAll()
wait() // 存在三个重载
finalize() // 该方法在GC触发前,会自动触发
// 在当前对象被GC前,会自动触发
// 适合于做一些垃圾回收前的各种工作
面试题,这三种的区别和联系:
final
finally
finalize() 在jdk9之后过时了
String类:
字符串类Java的底层实现的类,final修饰安全考虑
字符串本质是一个常量。
字符串缓冲池:字符串常量池
面试题:java中字符串常量池在什么地方?
jdk7之前,字符串常量池在方法区
jdk7之后,字符串常量池被设计到了堆内存中
String s = "Jack"; // 这种方式创建字符串
String ss = new String("Jack"); //
字符串拼接问题:
字符串拼接时,如何判断拼接后的结果是否相等(==)
|-- 常量始终是常量
|-- 编译时,如果结果确定,则会相等??
因为字符串是常量,字符串在大量拼接,容易产生垃圾数据。
字符串是一种常量,一旦产生一个字符,如果常量池中,不存在这个字符串
,则会将这个字符串保存常量池(永久性、系统退出)
因此在开发过程中,一定注意,不要大量拼接字符串,以避免产生大量无用的字符串
消耗内存
StringBuffer和StringBuilder
这两个对象都是jdk底层提供用来拼接大量字符串从对象,
不会产生大量无用常量,替代字符串的大量拼接,提高效率。
StringBuffer:
所有操作方法上加上了同步锁,所以是线程安全的
StringBuilder:
没有加同步锁,因此非线程安全的!!!