JavaSe
2021-04-23 15:36:41 1 举报
AI智能生成
JavaSe基础知识点,其中带有项目
作者其他创作
大纲/内容
IO流
1、File
2、输入流
字节流
InputStream
FileInputStream
BufferedInputStream
ObjectInputStream
字符流
Reader
FileReader
BufferedReader
3、输出流
字节流
OutputStream
FileOutputStream
BufferedOutputStream
ObjectOutputStream
字符流
Writer
FileWriter
BufferedWriter
4、转换流
InputStreamReader
OutputStreamWriter
5、使用IO流实现棋谱保存
多线程
基本概念
程序
保存在硬盘上的可执行文件
进程
当程序运行时,会将程序运行需要的内容加载到内存中,就会产生一个进程
进程是操作系统进行资源分配的基本单位
操作系统会为每个进程分配一个进程号,即进程id,这个id在整个操作系统中是唯一的
只有需要进行网络访问的进程才会被分配端口号
线程
线程是进程真正做事的单位
一个进程可以有多个线程,但至少有一个线程,称为主线程
创建方式
继承Thread
示例:创建三个线程分别打印10次
缺点:OOP单继承局限性,线程对象之间的数据共享不方便
实现Runnable接口
上面示例使用Runnable实现会是什么样的效果
画图解析程序运行状态
练习:使用线程龟兔赛跑,乌龟每0.01秒走一步,兔子每0.01秒走10步,但是走20步就停1秒,一共100步
Thread类的常用方法
start()
run()
getName()
setName()
currentThread()
sleep()
TimeUnit.SECONDS.sleep();
join()
setPriority()
yield()
interrupt()
isInterrupted()
interrupted()
生命周期
新建-NEW:线程刚刚创建,还没有启动
可运行状态-RUNNABLE:由线程调度器可以安排执行
就绪-READY:线程可以被运行,但还没有被CPU真正运行
正在运行-RUNNING:线程中的代码正被CPU运行
等待中-WAITING:等待被唤醒
TIMED WAITING:隔一段时间后自动唤醒
阻塞-BLOCKED:被阻塞,正在等待锁
死亡-TERMINATED:线程结束
生命周期图
示例演示
同步
关键字
synchronized
方法
代码块
同步锁
死锁问题
线程间的通信
wait()
notify()
notifyAll()
生产者与消费者
volatile关键字
阿里面试题:双重检测锁DCL对象半初始化问题
Idea插件-jClasslib使用
JVM指令手册
Java对象的创建过程
线程相关类
CountDownLatch(闭锁)
CountDownLatch(int count)
countDown()
await()
面试题
单核CPU设定多线程是否有意义?
工作线程数是不是设置的越大越好?
工作线程数(线程池中线程数量)设多少合适?
jprofiler工具使用
arthas
网络编程
1、什么是网络编程
2、通信要素
IP和端口号
网络通信协议
TCP
UDP
3、InetAddress
4、TCP通信
Socket
ServerSocket
练习
客户端与服务端通信一次
控制台网络聊天室实现,只是服务端与单个客户端
控制台网络聊天室实现,只是服务端与多个客户端
控制台聊天室实现,客户端与客户端
群聊功能
单对单聊天
5、UDP通信
DatagramSocket
DatagramPacket
6、URL编程
7、实现中国象棋网络对战
反射与内省
反射
什么是反射
Java反射机制是在运行中,对任意一个类,能够获取得到这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法;
这种动态获取类信息以及动态调用类对象方法的功能叫做Java语言的反射机制
对于任意一个对象,都能够调用它的任意一个方法;
这种动态获取类信息以及动态调用类对象方法的功能叫做Java语言的反射机制
相关类
1、Class
类的模板,可以获取一个类的所有组成部分
常用方法
2、Field
3、Method
4、Constructor
5、Annotation
暴力反射
Field:setAccessible(true)
内省
Introspector
BeanInfo
PropertyDescriptor
注解
注解的定义
关键字
@interface
常见注解
@Override(方法重写标记)
@Deprecated(方法已经过时)
@SuppressWarnings(对程序中的警告去除)
元注解
定义:元注解顾名思义我们可以理解为注解的注解,
它是作用在注解中,方便我们使用注解实现想要的功能。
它是作用在注解中,方便我们使用注解实现想要的功能。
分类
@Retention
英文意思有保留、保持的意思,它表示注解存在阶段是保留在源码(编译期),
字节码(类加载)或者运行期(JVM中运行)。
在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期
字节码(类加载)或者运行期(JVM中运行)。
在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期
@Retention(RetentionPolicy.SOURCE)
注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)
默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME)
注解会在class字节码文件中存在,在运行时可以通过反射获取到
总结
如果我们是自定义注解,则通过前面分析,
我们自定义注解如果只存着源码中或者字节码文件中就无法发挥作用,
而在运行期间能获取到注解才能实现我们目的,
所以自定义注解中肯定是使用 @Retention(RetentionPolicy.RUNTIME)
我们自定义注解如果只存着源码中或者字节码文件中就无法发挥作用,
而在运行期间能获取到注解才能实现我们目的,
所以自定义注解中肯定是使用 @Retention(RetentionPolicy.RUNTIME)
@Target
使用@Target元注解表示我们的注解作用的范围就比较具体了,可以是类,方法,方法参数变量等
@Target(ElementType.TYPE)
作用接口、类、枚举、注解
@Target(ElementType.FIELD)
作用属性字段、枚举的常量
@Target(ElementType.METHOD)
作用方法
@Target(ElementType.PARAMETER)
作用方法参数
@Target(ElementType.CONSTRUCTOR)
作用构造函数
@Target(ElementType.LOCAL_VARIABLE)
作用局部变量
@Target(ElementType.ANNOTATION_TYPE)
作用于注解(@Retention注解中就使用该属性)
@Target(ElementType.PACKAGE)
作用于包
@Target(ElementType.TYPE_PARAMETER)
作用于类型泛型,即泛型方法、泛型类、泛型接口 (jdk1.8加入)
@Target(ElementType.TYPE_USE)
类型使用.可以用于标注任意类型除了 class (jdk1.8加入)
@Document
将类的使用到的注解添加到javadoc生成的文档中去
@Inherited
父类上的注解同时会继承到子类上
@Repeatable(JDK1.8加入)
注解属性
通过以上源码,我们知道注解本身就是Annotation接口的子接口,也就是说注解中其实是可以有属性和方法,
但是接口中的属性都是static final的,对于注解来说没什么意义,而我们定义接口的方法就相当于注解的属性,
也就对应了前面说的为什么注解只有属性成员变量,其实他就是接口的方法,这就是为什么成员变量会有括号,
不同于接口我们可以在注解的括号中给成员变量赋值。
但是接口中的属性都是static final的,对于注解来说没什么意义,而我们定义接口的方法就相当于注解的属性,
也就对应了前面说的为什么注解只有属性成员变量,其实他就是接口的方法,这就是为什么成员变量会有括号,
不同于接口我们可以在注解的括号中给成员变量赋值。
类型分类
注解属性类型可以有以下列出的类型
1.基本数据类型
2.String
3.枚举类型
4.注解类型
5.Class类型
6.以上类型的一维数组类型
1.基本数据类型
2.String
3.枚举类型
4.注解类型
5.Class类型
6.以上类型的一维数组类型
格式
属性类型 属性名() default 默认值;
自定义注解
定义
相关反射方法
isAnnotationPresent(Class cls)
判断是否存在指定的注解
getAnnotation(Class cls)
获取注解对象
在JDBC封装上添加注解支持
1、概述
1、软件及硬件
2、图形软件及命令行
3、JDK的下载与安装
JRE与JDK的区别
JDK下的目录介绍
JDK的常用命令
javac 文件名.java:编译Java代码,并产生.class字节码文件
java
-version:查看当前Java版本等信息
类名:运行Java类
javadoc 文件名.java:将Java源码中的文档注释生成相应的html文档
4、32位系统与64位系统的区别
注意:64位的Eclipse或Idea必须安装64位的JDK,32位的JDK也只支持32位的Eclipse或Idea
5、JDK环境变量配置
6、命令行常用命令
盘符:
cd
cd ..
cd 目录
dir
tab键使用
7、Windows常用快捷键
Ctrl + C
Ctrl + V
Win + D
Win + E
Win + R
8、第一个Java程序
创建.java后缀名文件
编写
编译
运行
常见错误
当public修饰类时。类名与文件名不一致
main方法忘记写或写错
9、Java中的注释
单行注释
多行注释
文档注释
文档标记
@author
@version
@since
@see
@link
@code
@param
@return
@exception
@throws
文档生成命令:javadoc命令
10、JDK是如何实现跨平台
举例:虚拟机就像一个翻译器,可以将英语、日语、法语翻译为中文
C语言:在不同的平台上执行时都必须先重新编译成相应平台的文件,才可以执行
Java语言:编译成无平台无关的class文件,由java虚拟机运行即可
11、关于全角输入法的坑
基础语法
1、标识符
命名规则
命令规范
2、关键字和保留字
3、变量
概念
内存中的一个存储区域
三个要素
变量名
变量类型
值
作用
分类
属性
位置
分类
实例属性
类属性
常量:一旦赋值不可修改
有默认值
练习:请描述一下上述代码
局部变量
位置
方法体中
方法形参
代码块中
格式
没有默认值
练习:请描述一下上述代码
作用域
局部变量
属性
初始化
属性:自动初始化为默认值
局部变量:不会被自动初始化,必须手动指定
使用
1、先定义后使用
2、使用之前必须初始化
常见错误
变量名大小写演示
关键字或保留字做变量名演示
变量名包含关键字演示
局部变量未初始化就使用演示
4、数据类型
基本数据类型
整型
byte
short
int
long
字符型
char
ASCII值表
浮点型
float
double
布尔型
boolean
排序
转换
自动转换
强制转换
混合运算
引用数据类型
类
String类简介
数组
接口
包装器类
类型
Byte
Short
Character
Integer
Long
Float
Double
Boolean
String与基础数据类型的转换
常用方法
Scanner
常用方法
阻塞的理解
5、运算符
算术运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
三元运算符
运算符的优先级顺序
键盘输入获取
6、循环结构
for循环
格式
死循环写法
while循环
格式
死循环写法
do-whilte循环
格式
死循环写法
流程控制语句
break
continue
return
代码内存分析示意图
7、数组
一维数组
定义
初始化
静态
动态
长度
索引
空指针异常
数组索引越界异常
遍历
数组内存示意图
基本数据类型数组
引用数据类型数组
方法简介
高级使用
最大值
最小值
平均值
求和
复制
反转
Math类使用
数组的排序
冒泡排序
选择排序
插入排序
数组工具类Arrays的使用
8、Git代码管理工具的使用
下载与安装
环境变量配置
github与gitee的区别
git的基本操作命令
git的工作原理示意图
clone命令
再次提交代码与更新代码
面向对象编程
1、面向对象与面向过程
2、类和类的成员
类的定义格式
类与对象
引用,即命名对象
匿名对象
以图形类为例
直线-Line
矩形-Rect
圆-Circle
使用Swing绘制图形
类的成员
属性
实例属性
类属性
常量的定义
方法
定义
实例方法
类方法
形参
调用
实例方法
类方法
实参
重载
举例,三个不同颜色的方块,只看颜色,不看文字
可变参数
传参
举例:两个人A和B在吃冰激凌
值传递
A在吃,B也想吃,A就再买一个给B。A和B每人一个
地址传递
A在吃,B也想吃,A把自己的给B吃一口,请问A手上的冰激凌是否有变化
重写
构造方法
作用
创建对象同时给属性赋值,同时在堆内存中开辟内存空间
底层实现过程
student stu = new Student();
重载
this
调用重载的构造方法
区分同名的局部变量和属性
注意
构造方法不支持被重写
构造方法第一行代码不是super(实参),就是this(实参)
构造方法最后一行代码都是return
代码块
普通代码块
静态代码块
内部类
实例内部类
静态内部类
面试题
一个实例变量在对象初始化的过程中会被赋值几次?
分配内存时,会被赋予默认值
属性在定义时,有赋值语句
如果属性为静态属性,会调用clinit方法
属性在代码块中有赋值语句
属性在构造方法中有赋值语句
3、三大特征
封装
get和set方法
toString方法
继承
权限修饰符
继承的方式
super
属性
方法
方法的重写
子类对象的创建过程
类型转换
类型转换异常
多态
条件
继承
实现
理解
使用
对象的比较
==操作符
equals方法
equalsIgnore方法
抽象
关键字
类
方法
构造方法的作用
相关冲突的关键字
接口
关键字
实现
default修饰符
匿名内部类对象
final关键字
类
属性
方法
中国象棋项目
Swing基础
JFrame
JPanel
onpaint
repaint
Graphics
Image
Point
Java常用类
1、字符串类
String
StringBuffer
StringBuilder
三者之间的性能比较
2、System
3、日期处理类
java.util.Date
SimpleDateFormat
Calendar
LocalDate(JDK1.8)
parse(String)
异常处理
1、java.lang.Throwable
java.lang.Error(错误)
OutOfMemoryError
java.lang.Exception(编译时异常)
java.lang.RuntimeException(运行时异常)
NullPointerException
ArithmeticException
ClassCastException
ArrayIndexOutOfBoundsException
NumberFormatException
IO流异常
线程异常
反射异常
网络编程异常
JDBC编程异常
2、异常抛出
throws
方法重写时,如果父类被重写的方法,有异常抛出,在子类重写时,则可以不抛出异常或者保持一致,也可以抛出比父类异常更精确的异常
举例:工作中出现问题或失误时,不去解决,而只是将问题往上反馈
3、异常捕获
try-catch-finally
举例:工作中出现问题,找出来,并且提供解决方案
4、异常触发
throw
5、自定义异常
集合
1、Collection
Set接口
HashSet
SortedSet
iterator
hasNext()
next()
List接口
ArrayList
LinkedList
Vector
遍历
循环遍历
Iterator
hasNext()
next()
2、Map接口
HashMap
TreeMap
Hashtable
Properties
iterator
hasNext()
next()
3、对象排序接口
Comparable
Comparator
4、Collections工具类
reverse
swap
sort
max
min
copy
5、实现象棋基本功能
使用集合管理棋子
实现各类棋子的规则
实现棋盘规则
选择
重新选择
移动
吃子
实现悔棋功能
实现将军功能
泛型
枚举
关键字
enum
定义与使用
自定义属性值
使用枚举列举棋子类型
0 条评论
下一页