9、JavaSE总结

9、JavaSE总结

9.1 Java语言

9.1.1 MarkDown语法
9.1.2 简单的Dos命令
9.1.3计算机语言发展
9.1.4 Java的诞生

1995年诞生:JavaSE、JavaME、JavaEE

2006年Hadoop大数据系列

9.1.5 JDK、JRE

JDK:开发者工具包、配置环境变量(配置Javahome、编辑环境变量)

JRE:运行环境

9.2 HelloWorld

  public class Hello{public static void main(String[] args){System.out.print("Hello,World!");}}

javac编译Java文件的,编译之后会生成一个class文件

java命令执行class文件

编译型语言和解释型语言

安装了IDEA的开发工具

9.3 基础语法

9.3.1 注释

行内注释

多行注释

文档注释,javadoc生成帮助文档

9.3.2 标识符

关键字

9.3.3 数据类型

基本数据类型:八大基本类型

整数:byte(1字节)、 short(2字节)、 int(4字节)、long(8字节)

  1. 0b二进制
  2. 0x16进制
  3. 0 八进制

浮点数:float(4字节)、double(8字节)扩展了金融中使用了BigDecimal类型

字符:char(2字节)

扩展了

  1. ASCII码
  2. UTF-8
  3. Unicode
  4. 转义字符:\u0000、\b、\n、\r、\t

布尔值:boolean(1位)

引用数据类型

接口

数组

9.3.4 类型转换
  1. 自动类型转换

    低转高(字节数、子类父类)

  2. 强制类型转换

    高转低:(低)高

9.3.5 变量和常量
  1. 变量

    1. 定义:type varName [=value];

    2. 作用域

      类变量

      实例变量

      局部变量

  2. 常量

    1. 定义 final MAX_A =10
  3. 命名规则

    1. 所有变量、方法、类名:见名知意
    2. 类成员变量:首字母小写和驼峰原则(除了第一个单词以外,后面的单词首字母大写):monthSalary
    3. 局部变量:首字母小写和驼峰原则
    4. 常量:大写字母和下划线:MAX_VALUE
    5. 类名:首字母大写和驼峰原则:Man,GoodMan
    6. 方法名:首字母小写和驼峰原则:run(),runRun()
9.3.6 运算符
  1. 算数运算符:+ - * / % ++ –
  2. 赋值运算符:=
  3. 关系运算符:> < >= <= == != instanceof
  4. 逻辑运算符:&& || !
  5. 位运算符:& | ^ ~ >> << >>>
  6. 条件运算符:? :
  7. 扩展运算符:+= -= *= /=
9.3.7 包机制

防止命名冲突

  1. 域名倒写
  2. package
  3. import
9.3.8 JavaDoc
  1. JDK帮助文档

  2. javadoc

    参数信息@author 作者名@version 版本号@since 指明需要最早使用的JDK版本@param 参数名@return 返回值情况@throws 异常抛出情况
    
  3. 生成帮助文档

    javadoc -encoding UTF-8 -charset UTF-8 Doc.java
    # -encoding UTF-8设置编码为UTF-8这样可以正常显示中文
    # -charset UTF-8 设置字符集编码为UTF-8也是为了正常显示中文
    

9.4 Java流程控制

9.4.1 顺序结构
  1. 用户交互Scanner
  2. 程序默认的顺序结构,自上而下的结构
9.4.2 选择结构
  1. if单选择结构
  2. if-else双选择结构
  3. if-else多选择结构
  4. switch(JDK7支持了Spring类型)、case穿透现象、default
9.4.3 循环结构
  1. while:尽量避免死循环
  2. do-while
  3. for
  4. 增强for循环
9.4.4 break、continue
  1. break:跳出循环
  2. continue:终止当次循环
  3. return:结束方法的运行

9.5 方法

  1. 什么是方法:语句块的集合

  2. 方法的定义

    修饰符 返回值 方法名(参数名){return 返回值}

  3. 方法的调用

    1. 类名.方法
    2. 对象.方法
  4. 方法重载:名字相同,参数列表不同

  5. 命令行传参

  6. 可变参数:…必须放在最后一个参数

  7. 递归:自己调用自己,给自己一个出口

9.6 数组

  1. 数组的定义

  2. 数组的使用

    通过下标拿到值

    数组下标越界ArrayIndexoutofBounds

    增强for循环

  3. 二维数组

  4. Arrays类

  5. 排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、堆排序、基数排序

9.7 面向对象

  1. 什么是面向对象

  2. 类与对象

    类是对象的抽象:类是模板class,所有的对象都是根据这个模板刻出来的。

    对象是类的具体

  3. 构造器:new对象,每个类都有一个默认的无参构造,如果手动定义了无参构造就必须要手动添加一个无参构造,单例模式,需要构造器私有。

    栈存放引用

    堆存放具体的对象

  4. 封装:该露的露,该藏的藏

    属性私有,提供相应的public的get、set方法。

  5. 继承

    extends关键字

    object类是所有类的老祖宗

    子类拥有父类的全部特性

    方法重写

    this

    super

    Java是单继承只能继承一个父类,但是可以实现多个接口

  6. 多态:父类的引用指向子类的对象,可以使用instanceof相互的转型

  7. 修饰符

    public

    protected

    Private

    default

    static

    abstract

    final

  8. 接口

    interface

    接口是一个约束,只能定义方法名

    子类实现接口,必须重写其中的方法

    只有一个方法的接口叫做函数式接口,可以使用lambda表达式简化

    接口比抽象类更抽象

  9. 内部类

    局部内部类:方法里面的

    静态内部类:方法外面类里面的

    匿名内部类:方法里面的

9.8 异常

  1. 异常机制:异常总接口:Throwable

    1. Exception,Exception捕获不到需要抛出到Throwable,Exception捕获不到Error,需要捕获Error就要到Error去捕获

      分为运行时异常和检查型异常

      1. 运行时异常
        1. 1/0
        2. ClassNotFound
        3. NullPoint:空指针异常
        4. 未知的类型转换:UnknownType
        5. 下标越界异常
      2. 检查型异常
    2. Error

      AWT错误

      JVM错误

      1. 栈溢出:StackOverFlow递归死的话就会报这个错误
      2. Java内存溢出:OutOfMemory:当计算的数大的时候就会报这个错误
  2. 处理异常

    1. 五个关键字
      1. try{要捕获的异常代码块}
      2. catch(捕获异常){}:先小后大
      3. finally{无论捕不捕获都执行的代码块}
      4. throw在方法内部手动抛出异常
      5. throws方法抛出异常
    2. 自定义异常:继承Exception类即可

9.9 Java常用类

  1. Object类

    1. hashcode()
    2. toString()
    3. clone()
    4. getClass()
    5. notify()
    6. wait()
    7. equals()
  2. String类

    不可变性,它是不可能被改变的,操作量较少的时候使用String

    1. StringBuffer:可变长,append(),当多线程数据量较大时使用
    2. StringBuilder:单线程数据量较大,效率高,不安全。
  3. Math类

    常见的数学运算

  4. Random类

    生成随机数:UUID

  5. File类

    1. 创建文件
    2. 查看文件
    3. 修改文件
    4. 删除文件
  6. 包装类

    1. 自动装箱
    2. 自动拆箱
  7. Date类

    1. Date
    2. SimpleDateFormat:yyyy -MM-dd HH:mm:ss
    3. Calendar(建议使用)

9.10 集合框架

  1. Collection
    1. List(有序可以重复):建议使用iterator迭代器遍历
      1. ArrayList(常用):add添加、remove删除、contains包含、size大小
      2. LinkedList链表:链表都有头跟尾
        1. getFirst()
        2. getLast()
        3. removeFirst()
        4. addFirst()
      3. Vector
      4. Stack
    2. Set(无序不可重复)
      1. HashSet(常用)
      2. TreeSet
  2. Map
    1. HashMap(重点,常用)在项目中不用数据库存可以用HashMap存,在JDK1.7的数据结构是数组+链表,而在JDK1.8则变成了hash表=数组+链表+红黑树
    2. TreeMap
  3. Collections工具类
  4. 泛型:约束,避免类型转换之间的问题

9.11 IO流

一切的IO流就是进来和出去,进口和出口,input和output,按照字节说可以分为InputStream和OutputStream,按照字符流分可以分为Writer和Reader,有中文的时候不要用字节流要用字符流。

  1. 字节流
    1. 输出:OutputStream
    2. 输入:InputStrem
  2. 字符流
    1. Reader
    2. Writer写出
  3. 处理流
    1. buffer
      1. bufferInputStrem
      2. bufferOutputStream
      3. bufferReader
      4. bufferWriter
    2. data:通信的时候必须要转换成这个,不转换的话就没办法传
      1. DataInputStrem
      2. DataOutputStream
    3. 转换流
      1. inputStreamReader
      2. OutputStreamWriter
    4. 过滤流:Filter
      1. FilterInputStrem
      2. FilterOutputStream
      3. FilterReader
      4. FilterWriter
    5. print:打印是无法写入的
      1. PrintWriter
      2. PrintStream
    6. Object流:也是四个
    7. 文件流File
  4. 节点流
    1. CharArray
      1. CharArrayReader
      2. CharArrayWriter
      3. CharArrayInputStrem
      4. CharArrayOutputStream
    2. 管道流:pipe
      1. PipeOutputStream
    3. String
      1. StringReader
      2. StringWriter

使用这些流的时候要注意序列化

9.12 多线程

  1. 进程和线程

  2. run方法的调用和start方法的区别

  3. 线程创建的方式

    1. Thread:实现了Runnable接口,start0,本地方法Java无权调用,交给底层C处理:Private native void start0()
    2. Runnable:函数式接口,可以被lambda表达式简化
    3. Callable:可以有返回值
  4. 静态代理

  5. lambda表达式

    函数式编程

    避免内部类定义过多不便于阅读

    手动把内部类推导成lambda表达式

  6. 线程的状态

    新建、就绪、运行、阻塞、死亡

  7. 常用方法

    1. sleep
    2. join
    3. yield
    4. isLive
    5. start
    6. setPriority
    7. interrupt
  8. 线程同步

    1. 多个对象操作同一个资源:并发

    2. 为了处理并发要用到“锁”:队列+锁

    3. Synchronized解决线程同步问题

      1. 同步方法:有弊端的,锁太多了

      2. 同步代码块(常用)

      3. 第一个线程进来拿到锁,后面就要排队了,直到这个人释放锁,后面人拿到锁才能进去

      4. 两个人都抱着对方的锁就会产生死锁,死锁的四个条件

        1. 互斥:一个资源只能被一个资源使用不能被两个进程使用
        2. 请求与保持:一个进程因为一个资源被阻塞了,就不能抱着这个资源不放不然就彻底死了。
        3. 不剥夺条件:即进程已经获得了资源,在没有使用完这个资源之前不能强行的拿走。
        4. 循环等待条件:很多个线程形成了一个圈之后,相互有需求

        代码中出现了以上四种情况,代码一定会产生死锁。当然破坏其中任何一个条件这个死锁就被解开了。

      如果是同步方法的话,如果对方方法加锁的话,在方法中有代码块A,A是只读的,所有人都可以读取,而在方法中B代码块才是可写的,如果加锁的话,A和B都会被锁上,而实际上只用锁B就行了,最常用的还是同步代码块。同步代码块一般锁的是this

    4. Lock(优先级高):也属于JUC下面的

      一般常用

      1. ReentrantLock常用方法
        1. Lock
        2. tryLock
        3. unLock
    5. 线程同步中的锁的使用顺序是

      优先使用Lock锁,然后是同步代码块,最后是同步方法

  9. 线程通信

    线程与线程之间是相互隔离的,如何实现他们的通信,有两个方法

    1. 通过缓冲区:消息队列是它的原型,做一个缓冲让他妈呢存放数据,也就是两个线程都到缓冲区拿数据,从而实现线程的通信。
    2. 标志位(信号灯):两个线程去读标志位,如果这个标志位发生了变化,两个线程就做相应的变化,也就是现实生活中的红绿灯,两辆车行驶的时候完全没有关系,但是因为有了红绿灯实现了井井有条的通信。

    这里面会用到object的两个方法

    1. wait()
    2. notifyall()
  10. 线程池(Pool)

    线程每次创建都要消耗资源,如果我们提前准备好一些资源放在池子里,就解决了这个问题

    1. 池化技术,就像数据库的连接池一样,因为经常连接数据库是非常消耗资源的,不停的连接断开,因此就先准备一些连接,用的时候直接用就好了
    2. 池的大小
    3. 最大连接数
    4. 连接时间
    5. 保持时间

9.13 网络编程

  1. URL

  2. IP

  3. 端口

  4. Socket变成

  5. TCP编程

    三次握手、四次挥手、面相连接

  6. UDP编程

    无连接,以包Packet发送

  7. 聊天通信

  8. 文件上传下载

  9. Tomcat

9.14 GUI(可选)

  1. AWT

    1. frame
    2. 事件
      1. 鼠标监听事件
      2. 键盘监听事件
      3. 窗口事件
      4. 文本框监听事件
      5. 动作事件
  2. Swing

    1. 文本框
    2. 标签
    3. 按钮
    4. 文本域
    5. 面板
    6. 布局方式
    7. 关闭窗口
    8. 列表

9.15 注解和反射

  1. 注解
    1. 元注解
    2. 内置注解
    3. 自定义注解
    4. 反射读取注解
  2. 反射
    1. Class
    2. 类加载机制
    3. Method
    4. Field
    5. Construct
    6. 破坏私有关键字
    7. 性能分析
    8. 反射获得注解、泛型
  3. 单例模式的探究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87913.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue Mock.js介绍和使用与首页导航栏左侧菜单搭建

前言&#xff1a; 因为使用Vue开发&#xff0c;组件写的太多&#xff0c;组件与组件之间的传递数据复杂&#xff0c;所以要用到Mock和Bus事件 一&#xff0c;关于Mock 1.1.什么是Mock.js Mock.js是一个模拟数据的生成器&#xff0c;用来帮助前端调试开发、进行前后端的原型分离…

upload-labs靶场未知后缀名解析漏洞

upload-labs靶场未知后缀名解析漏洞 版本影响&#xff1a; phpstudy 版本&#xff1a;5.2.17 ​ 1 环境搭建 1.1 在线靶场下载&#xff0c;解压到phpstudy的www目录下&#xff0c;即可使用 https://github.com/c0ny1/upload-labs1.2 已启动&#xff1a;访问端口9000&…

似然和概率

前言 高斯在处理正态分布的首次提出似然&#xff0c;后来英国物理学家&#xff0c;费歇尔 概率是抛硬币之前&#xff0c;根据环境推断概率 似然则相反&#xff0c;根据结果推论环境 P是关于x的函数&#xff0c;比如x为正面朝上的结果&#xff0c;或者反面朝上的结果&#xf…

数据大爆炸:大数据分析如何改变我们的世界

文章目录 大数据分析的基本概念数据的三个V大数据分析的技术 大数据分析在商业中的应用1. 个性化营销2. 风险管理3. 供应链优化4. 客户服务 大数据分析在医疗保健中的应用1. 疾病预测2. 患者治疗3. 医疗设备监控 大数据分析在科学研究中的应用1. 天文学2. 生物学3. 气象学 大数…

如何搭建自己的gitlab服务器

这里使用Termus工具连接服务器&#xff0c;然后根据步骤走即可&#xff01; 安装 1.配置yum源安装gitlab vim /etc/yum.repos.d/gitlab-ce.repo修改或新增下面配置并保存 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum…

pycharm中配置torch

在控制台cmd中安装好torch后&#xff0c;在pycharm中使用torch&#xff0c;需要进行简单设置即可。 在pycharm中新建一个工程&#xff0c;在file文件中打开setting 在setting中找到project interpreter编译器 找到conda environment的环境配置&#xff0c;设置好相应的目录 新…

2023年蓝帽杯取证复现

案件介绍 2021 年 5 月&#xff0c;公安机关侦破了一起投资理财诈骗类案件&#xff0c;受害人陈昊民向公安机关报案称其在微信上认识一名昵称 为 yang88 的网友&#xff0c;在其诱导下通过一款名为维斯塔斯的 APP &#xff0c;进行投资理财&#xff0c;被诈骗 6 万余万元。接警…

华为OD机考算法题:篮球比赛

目录 题目部分 解读与分析 代码实现 题目部分 题目篮球比赛难度难题目说明篮球(5V5)比赛中&#xff0c;每个球员拥有一个战斗力&#xff0c;每个队伍的所有球员战斗力之和为该队伍的总体战斗力。现有 10 个球员准备分为两队进行训练赛&#xff0c;教练希望 2 个队伍的战斗力…

如何搭建VUE项目开发环境?

搭建Vue.js项目的开发环境通常包括以下主要步骤&#xff1a; 1、安装Node.js和npm&#xff1a; Vue.js项目需要Node.js和npm&#xff08;Node Package Manager&#xff09;作为基础环境。你可以从Node.js官网下载并安装它们&#xff1a;Node.js官网 安装完成后&#xff0c;你…

Java深入理解线程的三大特性

目录 1 CPU缓存导致可见性问题2 线程切换导致原子性问题3 性能优化导致有序性问题4 JMM(Java Memory Model)5 volatile6 synchronized 1 CPU缓存导致可见性问题 线程的三大特性&#xff1a; 可见性&#xff1a;Visibility有序性&#xff1a;Ordering原子性&#xff1a;Atomic…

谈谈最近招人的感受!

最近折腾新的项目&#xff0c;面试了很多实习生小伙伴&#xff0c;我说说我的一些「面试」感受&#xff0c; 虽然是一个老生常谈的话题&#xff0c;但是依然提一下。 准时很重要&#xff1a;提前一点时间&#xff0c;踩个点&#xff0c;别迟到&#xff0c;面试的过程中由于每个…

2023年前端流行什么技术和框架了?

Web前端三大主流框架有React、Vue.js和Angular&#xff0c;由于接触过Vue.js&#xff0c;接下来主讲最新的Vue3.0&#xff01; Vue3.0作为最新版本的Vue.js框架&#xff0c;拥有更强大的性能和更丰富的功能&#xff0c;为低代码开发平台注入了全新的活力。而JNPF快速开发平台作…

Go业务开发常用关注点

本文对实际开发场景中面对高频的场景&#xff0c;总结出来的一些处理方案&#xff0c;希望能对业务开发的同学提供帮助&#xff01; 1. 结构体转换 实际开发中会面对一个相似的数据结构&#xff0c;由于引用不同的包&#xff0c;需要开发转换到对应的结构上&#xff0c;本质上…

浅谈xss

XSS 简介 XSS,全称Cross Site Scripting,即跨站脚本攻击,是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。需要强调的是,XSS不仅…

setTimeout,setInterval,setImmdeiate的区别

setTimeout, setInterval, 和 setImmediate 是 JavaScript 中用于执行异步操作的定时器函数&#xff0c;它们之间有一些重要的区别&#xff1a; 1. setTimeout: - setTimeout 用于在一定的延迟时间后执行一个函数。 - 它接受两个参数&#xff1a;要执行的函数和延迟的毫…

webpack、vue.config.js

一、webpack学习 简述 webpack是一个静态资源打包工具&#xff0c;它会以一个或多个文件作为打包的入口&#xff0c;将我们整个项目的文件编译组合成一个或多个文件输出出去。输出的文件就是编译好的文件&#xff0c;可以运行在浏览器中。一般的我们将webpack输出的文件叫做b…

使用ElementUI结合Mock完成主页的搭建

目录 一、Mock ( 1 ) 讲述 ( 2 ) 作用 二、引用 三、主页搭建 学习后带来的收获 一、Mock ( 1 ) 讲述 Mock.js是一个用于前端开发中模拟数据的库。它可以帮助开发人员在前端开发过程中模拟接口返回的数据&#xff0c;从而实现前后端分离开发。Mock.js提供了一套简单易…

Python和Scrapy构建可扩展的框架

构建一个可扩展的网络爬虫框架是利用Python和Scrapy实现高效数据采集的重要技能。在本文中&#xff0c;我将为您介绍如何使用Python和Scrapy搭建一个强大灵活的网络爬虫框架。我们将按照以下步骤展开&#xff1a; 1. 安装Scrapy&#xff1a; 首先&#xff0c;确保您已经安装了…

如何计算3种卷积之后的尺寸(普通卷积,转置卷积,空洞卷积)

文章目录 前言一、普通卷积二、转置卷积三、空洞卷积 前言 三种卷积之后的feature map的尺寸如何计算。包括普通卷积&#xff0c;转置卷积&#xff0c;空洞卷积。可以在下面这个链接看到三种卷积的动态图。 卷积动态图 一、普通卷积 普通卷积比较简单了&#xff0c;其计算方式…

《动手学深度学习 Pytorch版》 6.4 多输入多输出通道

import torch from d2l import torch as d2l6.4.1 多输入通道 简言之&#xff0c;多通道即为单通道之推广&#xff0c;各参数对上即可。 def corr2d_multi_in(X, K):# 先遍历“X”和“K”的第0个维度&#xff08;通道维度&#xff09;&#xff0c;再把它们加在一起return sum…