写在最前边:

研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。
韩顺平老师课程地址:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0
阅读提醒:本笔试适合有编程语言基础的伙伴阅读,因为本兔兔是本专业的,有c、c++、python 、sql基础,笔记中特别的基础的内容就没有记录。完全零基础的小伙伴建议跟着韩老师的课程自己记录。


============================= ❀ 坦 克 大 战 ❀ =============================

============================== ❀ 1.0 版 本 ❀ ==============================

用到泛型及其之前的知识

一、Java绘图坐标体系

1、像素——密度单位(与厘米这种长度单位完全不是一回事

与分辨率有关:分辨率越高像素越大,密度越高,展示的东西越丰富。
像素 = 分辨率的长× 宽

2、坐标介绍

二、Java绘图入门

1、步骤

代码实例
import javax.swing.*;
import java.awt.*;
public class MyPanel extends JPanel{@Overridepublic void paint(Graphics g) {super.paint(g);g.drawOval(0,0,50,50);}
}
public class DrawCircle extends JFrame {private MyPanel mp = null;public static void main(String[] args) {new DrawCircle();}public DrawCircle(){mp = new MyPanel();this.add(mp);this.setSize(200,200);this.setVisible(true);}
}

2、重要类的方法

3、paint方法何时被调用

4、Graphics类(画笔)的绘图方法

https://www.bilibili.com/video/BV1fh411y7R8/?p=572&spm_id_from=pageDriver&vd_source=863cd5165874b9e91cbd88db7b5eaa82

5、Java事件处理机制——以键盘控制小球移动为例

此时,通过之前知识的运用,我们可以画出很多坦克,并且控制自己坦克的移动。还需要在2.0版本实现敌人坦克的自动移动呀↓

============================== ❀ 2.0 版 本 ❀ ==============================

加入多线程基础知识

补充:IDEA中的 jconsole可视化线程工具

1、一些概念

  • 程序:一段代码,静态的

····· 例如:迅雷应用代码

  • 进程:程序运行一次,动态的(具有产存在、消亡的过程)

·······例如:迅雷应用

  • 线程:进程创建的一个实体,一个进程可以有多个线程。线程就是小任务,一个应用程序可以有很多小任务。

······例如:迅雷应用中的下载任务

  • 并发与并行:

······都是执行多任务的前提:
······单核CPU 是并发——通过交替执行使得用户认为在同时执行
······多核CPU 是并发——真正的同时执行
······当电脑执行任务个数超过CPU个数,则并发和并行在电脑中都存在
······Java查看电脑CPU的个数

2、线程分类

3、Java创建线程的方法本质都是使用Start0()

  • 方法一:继承Thread,重写run()方法为自己的业务逻辑,然后该类就可以看为一个线程

class Cat extends Thread{run(){....}
}
public  class  Thread01{//main方法就是 主线程 public static void main(String[] args) throw InterruptedException{//Cat对象就是一个线程Cat cat = new Cat();cat.start(); //主线程不会被阻塞for(int i = 0 ; i < 10 ;i++){...}}

记住1:进程结束的标志 不是主线程main结束,要看所有线程是否结束。
记住2:线程 也可以开辟 另一个线程

为什么在main使用start()方法启动线程而不是run()呢?

run()是一个普通方法,没有启动线程,并且会阻塞程序直到run执行完毕程序再继续执行 。
start()源码:


  • 方法二:实现Runnable接口,重写run()方法为自己的业务逻辑,然后该类就可以看为一个线程(底层使用了代理模式)韩老师讲解视频地址

    对单继承机制的补充,使得某类继承了其他类的情况还可以使用多线程。同时适用于多个线程共享一个资源的情况。

线程类中的声明同上。但是创建线程不能直接使用start类,而是封装到Thread中才可以使用start()。

>public  class  Thread02{//main方法就是 主线程 public static void main(String[] args) throw InterruptedException{//Cat对象就是一个线程Cat cat = new Cat();//cat.start(); 不能使用了Thread thread = new Thread(cat);thread .start();//主线程不会被阻塞for(int i = 0 ; i < 10 ;i++){...}}

4、线程终止

5、线程常用方法1

优先级:

interrupt()方法,一般用于中断(唤醒)正在休眠的线程。会抛给正在休眠的线程一个异常,那么在catch中我们就可以写上自己的 中断休眠后的业务逻辑代码。这也是为什么sleep()方法必须用try-catch的原因

6、线程常用方法2

7、线程常用方法3

8、线程7大状态

``java中的 Thread.State枚举了六种状态,但是RUNNABLE状态还可以细分为两个内核状态。

  • #####NEW
  • RUNNABLE
    • Ready 就绪态
    • Running 执行态
  • BLOCKED
  • WAITING
  • TIME_WAITING
  • TERMINATED

9、线程同步机制 Synchronized

``首先注意,锁的对象应该是同一个呀。如果我们new 了好几个那么底层就不是一个对象了,线程之间也没有争抢了。

使用Synchronized的2种方法

  • 同步 代码块推荐使用,范围精准

  • 同步 方法


注意:run()方法不要写成Synchronized的呀

10、互斥锁

锁实际是在对象/.class上,而不是代码块上

synchronized (this)是非公平锁


细节5

细节6

11、死锁

12、释放锁

释放锁的4种时机
不会 释放锁的2种情况

============================== ❀ 3.0 版 本 ❀ ==============================

加入I/O流知识


1、一些概念

流不生产数据,只是文件数据的搬运工

2、常用文件操作 File类的使用

3、IO流原理


每创建一个IO流类的对象,其实就是分配了一个外卖小哥来送货(文件数据),至于到底一个文件中的数据怎么全部运输完(输入内存/输出到外部),根据每个外卖小哥自己的方法来决定,并且外卖小哥运输完成这一单后,应该被释放,以便可以继续接活

4、IO流分类


以上四种可以两两组合成为四种 【抽象类】成为IO流中其他类的抽象基类,也就是说其他IO流类都是这四种抽象类的子类:





细节:字符流FileWriter进行写操作时,必须 close或者flush一下(刷新一下,否则还没有写入指定文件)



5、节点流和处理流




  • 节点流、处理流的区别和联系


6、配置文件的读写操作

配置文件不用IO流读写,而是使用专门的类Properties类:

韩顺平java基础——坦克大战(含有线程、I\O流的讲解)相关推荐

  1. Java基础 - 坦克大战(第四章,线程基础)

    文章目录 线程终止 基本说明 案例 线程常用方法1 细节 线程常用方法2 礼让(yield) 插队(join) 案例 线程常用方法3 用户线程和守护线程 用户线程 守护线程 常见的守护线程(垃圾回收机 ...

  2. Java基础 - 坦克大战(第五章,坦克移动、与被击中效果功能)

    文章目录 坦克大战0.3 新建Shot类 坦克大战0.4版 1.让敌人坦克发射子弹(多颗子弹) 思路 2.当我方坦克击中敌人坦克时,敌人的坦克就消失 3.实现敌人坦克爆炸后消失 注意图片位置 4.实现 ...

  3. b站韩顺平老师的坦克大战

    一.主要的几个类 Mypanel WwyTankGame01 AnemyTank //写代码时候把单词拼错了哈哈不好意思 Bomb Recorder Node Shot Tank Hero 二.功能实 ...

  4. Java笔记(韩顺平Java基础12-14章)

    Java学习笔记(第12章 P444-P459)(第13章P460-P498)(第14章P499-P553) 第12章 异常-Exception 异常介绍 编译异常 异常处理 try-catch异常处 ...

  5. JAVA——Java后端技术体系韩顺平框架图_韩顺平Java基础学习路线图

    第一阶段:Java基础 变量.控制结构.OOP(封装,继承,多态).数组.Java API.异常和处理.集合.泛型.IO.反射.网络通信 第二阶段:Java高级 Java多线程/高并发 1.1 并发基 ...

  6. Java基础 坦克大战01绘制坦克

    java绘图坐标体系 坐标体系-像素 1.绘图还必须搞清一个非常重要的概念-像素 一个像素等于多少厘米? 2.计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的.例如,计算机显示器的分辨率是800 ...

  7. Java基础 - 坦克大战(第三章,线程基础与线程使用)

    文章目录 本章内容 - 多线程处理 绘制敌方坦克 线程基础 线程相关概念 程序(program) 进程 什么是线程 其他相关概念 单线程 多线程 并发 并行 获取当前电脑处理器(cpu)个数 Java ...

  8. Java笔记(韩顺平Java基础7-8章)

    Java学习笔记(第7章 P191-P263)(第8章 P264-P360) 第7章 面向对象编程(基础部分) 类与对象 成员方法 成员方法传参机制(!!!) 方法递归调用(!!!) 方法重载(Ove ...

  9. 韩顺平java基础学习笔记一

    目录 面向对象编程(基础部分) 7.1类和对象 7.2 成员方法 7.3 成员方法传参机制(非常非常重要) 7.4 方法递归调用(非常非常重要,比较难) 7.5 方法重载(OverLoad) 7.6 ...

最新文章

  1. 在命令行导出MySQL数据到Excel
  2. 90 亿美元的“Java 第一版权案”终落幕:谷歌胜,甲骨文败!
  3. BZOJ3998 TJOI2015弦论(后缀数组+二分答案)
  4. CSS 布局经典问题初步整理
  5. 普通软件项目开发过程规范(五)—— 总结
  6. 【LeetCode】217. Contains Duplicate (2 solutions)
  7. Mine Number(搜索,暴力) ACM省赛第三届 G
  8. 【线性代数及其应用】02 -矩阵代数
  9. 如何判断自己的手机是山寨机?如何判断山寨机的芯片型号和平台?
  10. C编程实例-“约瑟夫问题” 解法
  11. 手把手教你如何用VBA统计问卷调查表
  12. 五人合伙最佳股份分配_五个人合伙,股份如何划分才合理?
  13. 基于java springboot的图书管理系统设计和实现
  14. 减法公式运算法则_六年级数学各种运算法则与学习方法
  15. Linux用户与内核空间交互—procfs
  16. VC6 VS2010 环境变量
  17. python数据爬取并可视化代码,python爬取摩拜单车API数据并做可视化分析(源码)...
  18. 设计模式之简单化_Mediator中介者模式_只有一个仲裁者
  19. C语言答案解析,C语言题库带详细讲解答案解析.doc
  20. python 时间表_python获取起止日期段中的时间列表

热门文章

  1. 计算机化系统验证的生命周期是几年,采用GMAP5方法的计算机化系统验证的生命周期文件及活动(课件).pdf...
  2. h5封装table表格 vue
  3. InVEST模型 | HAbitat quality模块计算生境质量
  4. Neo4j安装与配置
  5. R语言igraph包的使用
  6. 电子产品21个权威认证
  7. matlab时域微分,实验一 MATLAB用于时域分析.doc
  8. iOS单元测试之接口测试
  9. Android 深入探讨sigleTask和singletop的区别
  10. 【实验五 一维数组】7-2 sdut-C语言实验-整数位