一、Java的发展史
1、简介
Java为Java编程语言和其对应三大平台的总称,Java编程语言是sun公司开发的一门面向对象的网络编程语言,以前叫Oak编程语言。
2、三大平台
(1)J2SE
JavaSE为Java平台的标准版,主要用于开发桌面程序
(2)J2EE
JavaEE为Java平台的企业版,主要用于开发企业项目,一般为web项目开发
(3)J2ME
JavaME为Java平台的微型版,主要用于开发移动应用
3、版本区分
(1)JDK1.0-JDK1.4
(2)Java5
a.引入泛型;;b.自动装箱/拆箱;c.静态引入...
(3)Java6
a.支持脚本语言;b.引入JDBC4.0API;c.引入Java compiler API...
(4)Java7
a.支持switch语句块中对字符串的判断;b.支持一个try语句块可以捕获多个异常;c.支持动态语言...
(5)Java8
a.支持lambda表达式;b.增强了日期和时间API的功能;c.对垃圾回收作了改进...
(6)目前最新版本为2021年3月份发布的Java16,但是由于各种兼容性和稳定性问题,目前大部分企业基本上还是在使用Java8.
额外补充:调试和运行工具
(1)JRE:Java Running Environment,Java程序运行所需环境
(2)JDK:Java Development Kit,Java开发工具,其中包含了JRE,另外还有像Javac等等各种各样的调试开发工具
(3)Javac:java编译器,将.java代码文件编译成.class字节码文件
(4)Java:运行java程序
(5)Jar:打包工具
(6)Jconsole:进行系统监控和调试工具
二、Java的作用跟应用场景
1、作用特性
(1) 简单
(2)面向对象
(3)与平台无关
(4)安全
2、应用场景
(1)安卓APP
(2)服务器
(3)网站
(4)大数据
(5)嵌入式
三、面向对象特性
1.封装性
指所有具有共性的对象抽象为类,他们的特点和操作都分别封装到类的属性和方法里。
2.继承性
指子类可通过继承父类,获得父类的属性和方法。
3.多态性
分别为编译时的多态(方法重载:同方法名不同参数)和运行时的多态(方法重写:同方法声明不同方法实现)。
额外补充:权限优先级
public<default<protected<private
(1)public:所有类均能访问
(2)default:只有同包内的类以及包外的子类能访问
(3)protected:只有同包内的类能访问
(4)private:只能类内访问
四、基本数据类型
1.int:4B,范围为(-2的31次方~2的31次方-1),对应封装类为Integer
2.short:2B,对应封装类为Short
3.long:8B,对应封装类为Long
4.float:4B,数值后需带上“f”,对应封装类为Float
5.double:8B,数值后需带上“d”,对应封装类为Double
6.boolean:1B,对应封装类为Boolean
7.byte:1B,对应封装类为Byte
8.char:2B,字符需用单引号引用‘’,Java对字符采用了unicode,对应封装类为Character
五、异常
1.异常分类
Throwable父类分为
(1)Error子类
为程序无法处理的错误,例JVM运行时发生的错误,包括栈溢出和内存泄漏错误。
(2)Exception子类
a.运行时异常:为RuntimeException极其子类,例空指针异常、数组下标越界异常、类转换异常等等
b.非运行时异常(编译时异常):为RuntimeException之外的类,例IOException、SQLException等等
2.异常处理
(1)throws:当方法无法处理异常时,在方法定义处声明抛出异常给方法调用者处理
(2)throw:运用在方法体里,抛出异常语句后面的语句将不被执行,此异常会被对应catch捕抓到
(3)try-catch-finally:先try,后catch,finally总是被执行(一般用于资源的释放等等)
六、内部类
1.分类
(1)成员内部类:写在类内,作为类的一个成员,内部类可以无条件访问对应外部类任何权限的属性和方法
(2)局部内部类:写在方法内,作为方法的一个局部变量,没有权限声明
(3)匿名内部类:不需对象声明,一般用于接口回调,比如事件监听等
(4)静态内部类:写在类内,只不过多了static声明,不依赖于外部类
2.作用
(1)便于将具有相似逻辑关系的类写在一起,同时也可以很好对外界进行隐藏
(2)另一种层面上的多继承
(3)便于写事件驱动程序
七、注解
1.自定义注解
@Target(ElementType.FIELD) //指定注解的使用对象,使用在类上、方法上还是属性上等等 @Retention(RetentionPolicy.RUNTIME) //指定注解的生命周期 @Documented //表示该注解可以被文档化 public @interface FruitName { //注解声明和定义 String value() default ""; //注解的成员变量 }
2.常用注解
@Override 重写, 标识覆盖它的父类的方法
@Deprecated 已过期,表示方法是不被建议使用的
@Suppvisewarnings 压制警告,抑制警告
@Inherited 允许子类继承父类中的注解
八、序列化/反序列化和克隆
1.序列化/反序列化
(1)定义
序列化:将对象转化为字节流的过程;反序列化:将字节流转化为对象的过程
(2)作用
a.用于网络传输;b.用于存储
(3)实现
a.方法一:A类实现Serializable接口->通过ObjectOutputStream实现序列化方法->通过ObjectInputStream实现反序列化方法
b.方法二:A类实现Externalizable接口(继承于Serializable接口)->声明一个无参的public构造方法->重写writeExternal和readExternal方法
(4)其它
a.serialVersionID:序列化版本号,用于版本控制,序列化和反序列化需要一致的serialVersionID才可以;有两种定义方式,一种为赋值1L,另一种就是通过类名、接口名、方法名等等生成一个64位的哈希段
b.静态变量不能被实例化
c.一个变量被Transient声明,可以防止该变量被序列化到文件中
2.克隆
(1)定义
指的是把一个对象的内容复制到另一个对象中
(2)作用
实现内容的拷贝,常用于一些需临时对象存储的场景中
(3)分类
a.浅拷贝:只是涉及到一些非引用类型的属性赋值
b.深拷贝:包含了引用类型的赋值,即涉及了多层的拷贝
(4)实现
a.A类实现Cloneable接口->重写clone方法->调用clone方法返回拷贝对象
b.A类实现Serializable接口->自定义克隆方法deepClone(利用ByteArrayOutputStream和ObjectOutputStream把对象写到流中,然后利用ByteArrayInputStream和ObjectInputStream读取对象,最后将该对象返回)->调用自定义克隆方法返回拷贝对象即可
九、反射
1.定义
所谓反射,为通过Java的类加载原理获取到对应类的所有信息以及操作对应对象的属性和方法。封装保证了Java的安全性,反射让Java拥有了动态性即更加灵活,两者互不矛盾
2.作用/应用场景
a.JDBC连接数据库
b.Spring框架里通过xml解析为Bean
...
3.使用
(1)类对象的获取
a.Class a=Class.forName("类的全限定类名")
b.类.class属性
c.对象.getClass()
(2)常用方法
getName():获得类的完整名字。
getFields():获得类的public类型的属性。
getDeclaredFields():获得类的所有属性。包括private 声明的和继承类
getMethods():获得类的public类型的方法。
getDeclaredMethods():获得类的所有方法。包括private 声明的和继承类
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
getConstructors():获得类的public类型的构造方法。
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的构造方法创建这个类的一个对象。
属性Filed实例.set(类对象示例,参数):设置对象的属性指为指定参数
方法Method实例.invoke(类对象实例):调用对象的方法
十、泛型
1.定义
所谓泛型,即“类型参数化”,也就是定义的数据类型在编译时逻辑上是不确定的,但是在运行时是确定的也就是需要指定
2.作用
使得编码可以更加灵活,在运行中可以处理更多的可能性
3.使用
(1)分类
a.泛型类:在类名右边写上<泛型声明标识符T或E或K或V>,例class Student<T>{}
b.泛型接口:在接口名右边写上<泛型声明标识符T或E或K或V>,例interface StudentMapper<T>{}
c.泛型方法:在权限声明和返回值中间写上<泛型声明标识符T或E或K或V>,例public <T> String getName(T a)
(2)其它
a."?"为泛型通配符,它是一个实参!!!
b.不能创建一个确切的泛型数组
c.泛型上下界:<T extends 父类>,此处的T数据类型必须是指定“父类”的子类
十一、集合
1.定义
Java用于实现存储的工具或数据结构
2.分类
(1)Collection接口
A.List接口(实现类如下)
a1.LinkedList:链表;非同步非线性安全;增删查改快,查询慢
a2.ArrayList:数组;非同步非线性安全;查询快,增删查改慢
a3.Vector:矢量;同步线性安全;
a3-1.Stack:Vector的实现类
B.Set接口(实现类如下)
b1.HashSet:不可重复,且原顺序不变
b1-1.LinkedHashSet:不可重复,通过链表维护插入顺序
b2.TreeSet:顶层结构为二叉树,不可重复,且可排序
(2)Map接口
常见实现类如下:
A.Hashtable:键值对存储,线程安全
B.HashMap:键值对存储,底层结构为数组和链表(红黑树),线程非安全
b1.LinkedHashMap:顶层实现结构为双向链表和哈希表
b2.ConcurrentHashMap:线程安全
b3.WeakHashMap
C.TreeMap:顶层结构为二叉树,便于排序,存储键值对
3.其它
上述各种集合,要着重掌握各自的底层结构和存储原理、优缺点、安全性、使用场景等等!!
十二、IO
1.定义
输入输出流,java.io为java处理io的工具包,通过io可以实现数据的存储和网络传输
2.分类
(1)字节流
输入流:
a.InputStream
输出流:
a.OutputStream
(2)字符流
输入流:
a.Reader
输出流:
a.Writer
十三、多线程
待补充
十四、设计模式
待补充
十五、网络编程
待补充