java基础
2021-07-16 09:36:45 82 举报
AI智能生成
java的基本学习路线
作者其他创作
大纲/内容
<div> 环境配置</div>
java简介
java的由来、特点
<div><br></div><div>java语言的特点</div>
java运行机制
<div><span style="font-size: inherit;">java是跨平台的</span><br></div>
<div><br></div><div>java回收机制(GC)</div>
<div><span style="font-size: inherit;">java语法基础</span><br></div>
java的注释规范
注释的分类
单行注释
使用//或/* */
<div><span style="font-size: inherit;">多行注释</span><br></div>
使用/*<br> *注释内容<br> */
<div><span style="font-size: inherit;">文档注释</span><br></div>
使用/**<br> * @author 用户名<br> */
<div><span style="font-size: inherit;">注释的规范</span><br></div>
<div>java的数据类型</div>
基本数据类型
数值型
byte(1)
<div><span style="font-size: inherit;">short(2)</span><br></div>
<div><span style="font-size: inherit;">int(4)</span><br></div>
<div><span style="font-size: inherit;">long(8)</span><br></div>
<div><span style="font-size: inherit;">浮点型</span><br></div>
float(4)
<div><span style="font-size: inherit;">double(8)</span><br></div>
<div><span style="font-size: inherit;">字符型</span><br></div>
char(2)
<div><span style="font-size: inherit;">布尔型</span><br></div>
boolean
<div><span style="font-size: inherit;">引用数据类型</span><br></div>
类、对象、数组等
<div><span style="font-size: inherit;">运算符</span><br></div>
算数运算符
+ 、- 、*、 /、 %、 +=、 -= 、/= 、%=
<div><span style="font-size: inherit;">位运算</span><br></div>
&、|、^、<<、>>、>>>
<div>自增、自减运算</div>
++、--
<div>比较运算</div>
> 、< 、==、 !=、 >=、 <=
<div><span style="font-size: inherit;">逻辑运算符</span><br></div>
&&、||、!
<div><span style="font-size: inherit;">条件运算符</span><br></div>
条件表达式?值1:值2
<div><span style="font-size: inherit;">程序结构</span><br></div>
顺序结构
从上到下,从左到右依次执行
<div><span style="font-size: inherit;">选择结构</span><br></div>
if - else
<div><span style="font-size: inherit;">switch - case -default</span><br></div>
break
<div>continue</div>
<div><span style="font-size: inherit;">循环结构</span><br></div>
for
<div><span style="font-size: inherit;">while</span><br></div>
<div><span style="font-size: inherit;">方法和函数</span><br></div>
形参与实参的概念
形参
函数定义时给定的参数叫做形参
<div><br></div><div>实参</div>
调用调用时传递给函数的参数叫做实参
<div><span style="font-size: inherit;">按值传递</span><br></div>
<div><span style="font-size: inherit;">按地址(引用)传递</span><br></div>
<div>函数的重载</div>
<div><span style="font-size: inherit;">变长(可变)参数</span><br></div>
<div><span style="font-size: inherit;">数组</span><br></div>
一维数组
<div>二维数组</div>
<div>多维数组</div>
<div><span style="font-size: inherit;">面向对象</span><br></div>
什么是面向对象?
面向对象映射的是人类社会的思维方式
<div>类</div>
是对对象的规范定义
<div>面向对象的核心</div>
<div>抽象</div>
从同类个体中将群体的共性进行抽象
封装
将抽象的结果封装到类中
<div><span style="font-size: inherit;">继承</span><br></div>
父类角度:<br> 继承是使用已有的类派生新的类的一种方法途径;<br> 子类角度:<br> 子类通过继承获取父类允许子类获得的属性和行为一种途径;
<div><span style="font-size: inherit;">多态</span><br></div>
多态是父类和子类之间的一种关系;<br>对于同名的行为子类展示或者扩展出来的与父类不同的行为状态;<br>
<div><span style="font-size: inherit;">访问修饰符</span><br></div>
private
私有的,本类可访问
<div>默认</div>
本包的类可访问
<div><span style="font-size: inherit;">protected</span><br></div>
受保护的,本包的类及其子类可访问
<div><span style="font-size: inherit;">public</span><br></div>
公开的,任何类都可访问
<div><span style="font-size: inherit;">构造方法</span><br></div>
<div>构造方法与普通方法的区别</div>
构造方法名是固定的,是以类名作为构造方法名的;<br>
<div>构造方法没有返回值;<br></div>
<div>构造方法可以使用访问控制修饰符进行修饰,这和普通方法一样;<br></div>
<div>构造方法不能被其他的普通方法调用; <br></div>
<div>构造方法可以被 new 操作符调用;<br></div>
<div>构造方法之间可以调用,但是调用方式是通过 this(实参列表) 来进行调用;this必须放在第一行;<br></div>
<div>构造方法可以重载;<br></div>
<div> 构造方法的语法规则<br></div>
每个类如果没有明确的显式写出构造方法,则由jvm默认提供一个不带参数的默认的构造方法;<br>
<div>如果一个类有显式的构造方法,则jvm默认提供的构造方法就失效了,如果还想使用默认的构造方法,则需要手动显式写出;<br></div>
<div>构造方法不能继承,不能重写,没有多态;<br></div>
<div> 继承下的构造方法的语法:<br></div>
子类在执行构造方法的同时会递归的调用父类的构造方法;【在执行子类的构造方法之前会把所有父类的构造方法执行一遍】<br>
<div>子类的构造方法默认调用的是父类的默认的构造方法,所以要求被调用的父类提供默认的构造方法;<br></div>
<div>如果子类需要显式的调用父类的构造方法,则需要使用 super(实参列表) 来调用父类的构造方法;<br></div>
<div>super(实参列表)要求必须防在第一行; <br></div>
<div>变量</div>
成员变量
在类中定义的变量
<div>局部变量</div>
在方法中定义的变量
<div>关键字</div>
<div>this</div>
指代当前类的实例对象
this. 表示当前类的;用于区分被同名局部变量覆盖成员变量;<br>
<div><span style="font-size: inherit;">this(实参列表) 表示调用当前类的构造方法;【只能在第一行】</span><br></div>
<div>super</div>
指代当前类的父类的实例对象
super. 表示当前类的父类的属性和行为;用于区分被子类同名方法重写的父类方法;<br>
<div>super(实参列表) 表示调用当前类的父类的构造方法;【只能在第一行】<br></div>
<div> static</div>
静态的
静态在jvm中是常驻内存的
非静态语句块在类每次new时都会执行,并且是在构造方法之前执行的;静态语句块只执行一次
<div> 静态的生命周期:从加载jvm开始到jvm运行结束为止</div>
<div> static可以修饰:类、方法、成员变量、语句块</div>
<div>语句块:使用 {} 标识的代码块; 主要作用是改变作用域范围<br></div>
<div>static只能修饰成员变量不能修饰局部变量<br></div>
<div>static修饰的静态方法或者静态语句块只能调用静态的对象【静态成员变量、静态的方法】<br></div>
<div>非静态的方法可以调用静态的和非静态的对象;也就是非静态方法可以调用所有的<br></div>
<div>static修饰的成员变量和方法可以类名直接调用;所以静态的成员变量也叫作类变量<br></div>
<div>static修饰的语句块叫做静态语句块,静态语句块只执行一次;作用:用于类加载的一些初始化操作;有点类似于构造方法的初始化作用<br></div>
<div> final</div>
最终的
final可以修饰类、方法、变量(成员变量和局部变量)
<div>修饰类表示该类不可被继承,防止继承滥用的</div>
<div>final修饰的方法表示这个方法不能够被子类重写,防止通过重写修改父类来修改父类方法的逻辑<br></div>
<div>final修饰的变量表示这个变量的值一旦被初始化,则不允许再进行修改<br></div>
基本类型:不允许在修改【值不能改】
<div>引用类型:不允许修改引用地址,存储空间中的内容可以修改; 【地址的值不能改;地址的存储空间内容可以改】</div>
<div>static final 修饰的成员变量 叫做静态常量 ; <br>命名规则 字母全部大写用_分割;<br> 静态常量要求声明时就要进行初始化; </div>
<div><span style="font-size: inherit;">abstract</span><br></div>
抽象的
abstract可以修饰类、方法;<br> abstract修饰的类叫做抽象类;修饰的方法叫做抽象方法;
<div> interface</div>
接口
接口是一组行为规范的定义; <br>接口是一种特殊的抽象类;<br>特殊到需要使用interface重新定义;<br>
<div>支持多继承(实现)</div>
类多继承接口:一个类【class】可以继承多个接口;使用implements关键进行继承【实现】
<div>接口多继承接口:一个接口可以继承多个接口;使用extends关键字进行继承;<br></div>
<div>Util</div>
Object
Object是java中顶级类,是所有类的直接或间接父类
<div>【所有类都会包含这些方法】<br> hashCode() clone() equals() toString() wait() notify()<br></div>
<div>String</div>
String适用于处理字符串的工具类,字符串本质上是一个字符的数组
<div>String字符串一旦初始化之后,长度是不可以改变的;<br> String字符串具有数组的特性,可以使用下标进行访问;<br> 掌握字符串和字符之间的异同点;<br> 掌握字符换工具类中常用的方法;<br></div>
<div>包装类</div>
采用面向对象的方式对基本数据类型进行封装
byte-->Byte
<div>short-->Short</div>
<div>int-->Integer</div>
<div>long-->Long</div>
<div>float-->Float</div>
<div>double-->Double</div>
<div>char-->Character</div>
<div>boolean-->Boolean</div>
<div>内部类</div>
定义在类内部的类就是内部类
成员内部类
定义在成员变量位置上的内部类就是成员内部类
<div>静态内部类★★★</div>
使用static修饰的成员内部类就是静态内部类
<div>局部内部类<br></div>
定义在局部变量位置上的内部类就是局部内部类
<div>匿名内部类★★★<br></div>
没有变量名的局部内部类就是匿名内部类,也是定义在局部变量位置上的内部类
<div>java对象的执行顺序:<br></div>
<div>(1)执行父类的静态语句块;</div> (2)执行子类的静态语句块;<br> (3)执行父类非静态语句块;<br> (4)执行父类的构造方法;<br> (5)执行子类的非静态语句块<br> (6)执行子类的构造方法<br>
静态语句块首先执行;【只执行一次】<br>非静态语句块;【每次new都执行,且在构造方法之前】<br>构造方法;
<div> ==与equals:</div>
==
== 判断两个变量的地址引用是否相同; 地址引用相同内容一定相同;反之,不一定;<br>
<div>== 操作符是判定的两个对象是否相等;【基本类型是值相等;对象类型是通过判定地址引用是否相同来判定相等,也就是判定是否为同一个存储地址】<br></div>
<div>equals</div>
equals是用来判定内容是否相同;
<div>equals方法一般是用来判定两个对象的内容是否相同<br></div>
<div>其他的子类必须对继承自Objcet类的equals方法进行重写;重写的目的是 让equals方法具有判断内容相等的功能;例如 String类,重写了equals方法;<br></div>
<div>异常</div>
Throwable
Error
错误,是jvm在运行过程中不应该发生的严重问题;一般会影响jvm继续运行,且是不可控的
<div>Exception</div>
异常,是jvm在运行过程可以捕获的可以处理可以预料一些问题;一般异常不会影响jvm继续运行;但是异常需要进行捕获处理
<div>异常的分类</div>
根据发生的时机分为
编译时异常
发生在编译阶段的异常;要求必须进行异常处理,否则无法通过编译; 也叫作 检查性异常
<div>运行时异常<br></div>
发生在运行阶段的异常;不要求进行异常处理,【一般通过良好的编程规范来进行规避】,数组越界异常、除数为0异常、空指针异常
<div>根据异常是否需要进行预处理<br></div>
检查性异常
要求在编码时必须进行显式的异常处理;也叫作 编译时异常
<div>非检查型异常<br></div>
在编码是不要求记性显式的异常处理,但是在运行时会发生的异常; 也叫作 运行时异常
<div>集合</div>
Collection接口
List接口
ArrayList类
类似数组,查改快,增删慢
<div>LinkedList类</div>
类似链表,增删快,查改慢
<div>Set接口</div>
HashSet类
使用hash散列存储,没有下标,无法使用下标遍历<br>继承了Iterator接口,可以使用迭代器进行遍历
<div>是不可重复的,无序列的,没有排序,<b>可以为null</b></div>
<div>TreeSet类</div>
使用红黑树【平衡二叉树】存储,没有下标,所以无法使用下标遍历;<br>继承了Iterator接口,可以使用迭代器进行遍历
<div> 是不可重复的,无序列的,排序的,<b>不能为null</b></div>
<div>LinkedHashSet类</div>
使用双向链表存储,没有下标,无法使用下标遍历<br>继承了Iterator接口,可以使用迭代器进行遍历
<div>是不可重复的,有序列的,没有排序,<b>可以为null</b></div>
<div>Map接口</div>
HashMap类
使用hash散列存储,没有下标,所以无法使用下标遍历
<div>键值是不可重复的,无序列的,没有排序的,可以为null</div>
<div>TreeMap类</div>
使用红黑树【平衡二叉树】存储,没有下标,所以无法使用下标遍历
键值是不可重复的,无序列的,排序的,不能为null
<div>LinkedHashMap类</div>
使用双向链表存储,没有下标,所以无法使用下标遍历
键值是不可重复的,有序列的,没有排序的,可以为null
<div>Collections工具类</div>
<div>Comparable</div>
使某个类实现接口后具有比较的功能,通过重写comparaTo(Object o)方法
Comparator
可以通过匿名类实现接口或者创建一个比较类来实现接口,通过重写compara(Object o1,Object o2)方法实现
<div>泛型</div>
泛型是对某一类未知的类型的统称
<div><span style="font-size: inherit;">在集合中使用泛型来表示集合可以处理的类型范围</span><br></div>
<div>要求在能够明确泛型的地方一定要使用明确的泛型,可以减少不必要的非检查性异常<br></div>
<div>IO流</div>
字节流
InputStream
FileInputStream
<div>ObjectInputStream</div>
<div>OutputStream</div>
FileOutputStream
<div>ObjectOutputStream</div>
<div>字符流</div>
Reader
InputStreamReader
<div> Writer</div>
OutputStreamWriter
<div>多线程</div>
实现的方式
继承Thread类
<div>实现Runnable接口</div>
<div>程序</div>
代码+数据
<div>进程</div>
在cpu中动态执行的程序就是进程;进程是操作系统分配资源的基本单位;【像一条流水线】
<div>线程</div>
是微进程;一个进程中包含若干个线程,线程之间是共享进程的资源的;线程是cpu资源调度的基本单位;【像流水线上的工人】
<div>线程状态</div>
五态图
新建线程
<div>可运行状态(就绪)</div>
<div>阻塞</div>
<div>运行状态</div>
<div>死亡(销毁)</div>
七态图
新建线程
实现Runnable接口
继承Thread类
<div>可运行状态</div>
调用start方法
<div>阻塞</div>
调用sheep方法
<div>调用join方法</div>
<div>运行状态</div>
<div>等待队列</div>
调用wait方法
<div>锁池</div>
调用notify、notifyAll方法
<div>死亡(销毁)</div>
<div>死锁</div>
形成的条件<br>(必须全部满足才能形成死锁)
互斥条件;【资源具有互斥性,只能有一个进程使用】<br> 不可剥夺条件;【一旦持有之后,不会主动放弃】<br> 请求与保持条件;【先申请一部分资源,再继续申请后续资源】<br> 循环等待条件;【资源不足时可以继续等待】
<div>解锁</div>
只需打破其中一条即可
将内存中某个时间的<b>快照</b>值写出到文件进行保存;<br> 对象流要求必须进行序列化才能处理<br>
序列化 (Serialization)
序列化:是一组信息在经过IO、网络等传输过程中,对这组信息进行编码,保证接收方可以按照编码的进行重新组合该对象【反序列化】
需要进行序列化的对象需要实现一个 Serializable 接口,该接口没有方法,只是一个标识性接口,告诉jvm要进行序列化处理
<div>瞬时(transient)</div>
一般和序列化进行搭配使用;<br> 作用就是使用transient修饰的属性,不会被序列化;<br>在序列化过程中,该属性的值会使用默认值代替;<br>
网络编程
反射
JDBC
0 条评论
下一页