​https://snailclimb.gitee.io/javaguide​

一、Java基本功

Java一次编译,字节码通过JVM,处处运行
jsp会转化为servlet,也要由jdk编译
OracleJDK性能更好,更稳定,但不开源
Java无指针访问内存,更安全。C++支持多重继承,Java接口可以多继承。C++字符串后默认加'\o'表示结束
小程序继承自JApplet,主类需要是public,嵌入浏览器调用init/run启动,无main方法
javax和java均为标准API的一部分,只是名字无区别
字符占2字节,存整数值,字符串存地址
单行/多行/文档注释
const和goto是Java保留字
泛型:通过安全检测机制,本质是参数化类型。通配符:TEKV?
==基本类型比较值,引用类型比较地址。equals等价于==比较地址
String类重写equals方法,在常量池中查找相同的,赋给引用变量
重写equals方法必须重写hashcode,hashset先判断hashcode再判断equals方法决定是否能够插入
Float和Double并未实现常量池,直接比较不相等
浅拷贝:基本类型值传递,引用类型引用传递;深拷贝引用类型创建新对象,并复制内容

二、Java面向对象

面向过程无需实例化类,性能高;面向对象灵活易于维护,但性能低(半编译,不能直接被执行) 

执行子类构造前,会默认调用super无参构造(帮助子类进行初始化),因此需要在父类补充无参构造。

成员变量有默认初值

对象相等是内容相等,引用相等是内存地址 相等

子类拥有父类的所有属性和方法,但无法访问私有部分

静态方法可不通过对象调用,故静态方法中不能调用非静态变量,只能访问静态成员 

String使用final修饰字符数组保存字符串,故String对象不可变。StringBuilder/StringBuffer保存字符串的数组没有用final修饰,故可变

String不可变,StringBuffer(性能提升不大)对方法加同步锁,均线程安全。

StringBuilder/StringBuffer继承AbstractStringBuilder类,包含expandCapacity,append,insert,indexOf等方法

Object类:getClass/hashCode/equals/clone/toString/notify/notifyAll/wait/finalize(垃圾回收时触发)

transient关键字阻止变量序列化

读取键盘输入:BufferedReader = (InputStreamReader(System.in))

BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
String s = input.readLine();

三、Java核心技术

工具类方法

异常基类Throwable,两个子类Exception异常(能被程序本身处理)和Error错误

try...catch捕获异常,JDK7后使用try-with-resources释放资源,try声明资源无finally

线程是进程执行单位,也被称为轻量级进程

Java基础知识篇【gitee】_子类

 

按流的角色可以分为节点流和处理流

输入流的基类InputStream/Reader,输出流的基类OutputStream/Writer

流操作:缓冲操作、文件操作、基本类型操作、对象序列化、转化控制、打印控制、管道操作、数组操作

Java基础知识篇【gitee】_子类_02

 

BIO (Blocking I/O),同步阻塞I/O,读取写入在单个线程内完成;

NIO (Non-blocking/New I/O),同步非阻塞I/O,提供阻塞和非阻塞模式,适用于高负载,高并发;

AIO (Asynchronous I/O),也被称为NIO2,异步非阻塞的IO模型,基于事件和回调机制实现,执行完操作不会阻塞


作者:哥们要飞​