学习Java快两年了,从Java SE到Java EE,看书的时间除了最开始学的那段时间后面基本是项目中用啥才看啥,没有深入研究细节,基础知识也不够扎实。决定从今天起痛改前非,多注意细节,多夯实基础,早日成为一个Java大牛吧哈哈.
Java序列化:Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。当想把内存中的对象存入磁盘、通过socket传输等时需要序列化对象。序列化需要实现Serializable接口。对象的序列化是基于字节的,不能使用Reader和Writer等基于字符的文件流。序列化是针对对象而言,对于类的静态变量来说不生效。总结三点:当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;static,transient修饰的变量不能被序列化;
I/O流:一张图展示
集合类:还是一张图,笔试面试必考基础:
static关键字用法:修饰变量、修饰方法:表明这些变量和方法与类相关通过类名即可访问不通过对象。修饰类:只能修饰内部类,取消与外部类的引用,这时内部类不能访问外部类的非静态变量。修饰静态代码块:在类加载时执行,优先级>构造块(不用static修饰的代码块)>构造函数。修饰包名:可在代码中直接使用静态方法而不用写引入的类名。
多线程:在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 。当所有用户线程执行完毕时守护线程才会结束,典型的守护线程是GC(垃圾回收)。thread.setDaemon(true)必须在thread.start()之前设置,否则会跑出一个IllegalThreadStateException异常。不能把正在运行的常规线程设置为守护线程。 在Daemon线程中产生的新线程也是Daemon的(这和守护进程不一样)。不是所有的应用都可以分配给Daemon线程来进行服务,比如读写操作或者计算逻辑。因为在Daemon Thread还没来的及进行操作时,虚拟机可能已经退出了。