Java基础笔记3(注释、标识符、数据类型、类型转换)
Java基础笔记3(注释、标识符、数据类型、类型转换)注释单行注释1//单行注释 多行注释1234/*多行注释多行注释*/ 文档注释1234/** * @Description Helloworld * @Author PlanZ */ IDEA自定义注释样式 标识符关键字 abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return strictfp short static super switch synchronized this throw throws transient try void volatile while 标识符 所有的标识符以字母(A-Z或a-z),美元符($),下划线(_)开始,不可以以数字开头 首字母之后可以是字母(A-Z或a-z),美元符($),下划线(_),数字(0-9)的任意组合 不能使用关键字作为变量名或方法名 大小写敏感 数据类型强类型语言要求变量的使用要严格符合规定,所有变量必须先定义后使用 弱类型语言弱类型语言也称为弱类型定义语言。与强类型语言定义相反。 vb,php等就属于弱类型语言。 Java的数据类型分为两大类基本类型(Primitive Type) 数值类型 整数类型 byte占1个字节范围:-128-127 short占2个字节范围:-32768-32767 int占4个字节范围:-2147483648-2147483647 long占8个字节范围:-9223372036854775808-9223372036854775807 浮点类型 float占4个字节 double占8个字节 字符类型 char占2个字节 boolean类型 boolean占1位,其值只有true和false 引用类型(Reference...
Java基础笔记2(编译型和解释型)
Java基础笔记2(编译型和解释型)编译型和解释型计算机不能理解高级语言,只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:编译型和解释型。 编译型一次编译,多次执行。(运行速度快,跨平台性差) 源程序执行前编译,只编译一次,以后运行时不需要编译。 使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。 编译型语言:C、C++、Objective等 解释型边解释,边执行。(跨平台性好,效率较低) 直接将源代码解释成机器码并立即执行。 使用专门的解释器,逐行解释源程序为特定平台的机器码并立即执行。代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。 解释型语言:Python等 JAVA程序运行机制Java既具有编译型特点,也具有解释型特点。 因为有JVM的存在,Java可以一次编译,到处运行。 Java编译型特点:所有的Java代码都是要编译的成字节码文件。 Java解释型特点:编译后的Java代码不能直接运行,需要在JVM上进行解释运行。(或编译运行)
Java基础笔记1(介绍、环境搭建与卸载)
Java基础笔记1(介绍、环境搭建与卸载)Java发展史1972年C诞生 贴近硬件,运行极快,效率极高 操作系统,编译器,数据库,网络系统等 指针和内存管理 1982年C++诞生 面向对象 兼容C 图形领域、游戏等 新语言 语法像C 没有指针 没有内存管理 真正的可移植性,一次编写,到处运行 面向对象 类型安全 高质量类库 Java初生 1995年的网页简单而粗糙,缺乏互动性 图形界面程序(Applet) Bill Gates说:这是迄今为止设计的最好的语言! Java 2 标准版(J2SE):占领桌面 Java 2 移动版(J2ME):占领手机 Java 2 企业版(J2EE):占领服务器 大量巨头加入 Java发展 基于Java开发了大量平台、系统、工具 构建工具:Ant, Maven, Jekins 应用服务器:Tomcat, Jetty, Jboss, Websphere, weblogic(三高问题:高可用、高性能、高并发) Web开发:Struts, Spring, Hibernate, myBatis 开发工具:Eclipse, Netbean, intellij idea, Jbuilder …… 2006:Hadoop(大数据领域) 2008:Android(手机端) Java特性和优势 简单性 面向对象 可以执行 高性能 分布式 动态性(反射) 多线程 安全性 健壮性 Java三大版本 JavaSE:标准版(桌面程序、控制台开发) JavaME:嵌入式开发(手机、小家电) JavaEE:企业级开发(Web端,服务器开发) JDK、JRE、JVM JDK:Java Development Kit JRE:Java Runtime Environment JVM:Java Virtual Machine Java环境搭建环境搭建 下载电脑对应版本的JDK 安装JDK(建议准备一个存放环境的文件夹) 配置环境变量 右键点击计算机-属性-高级系统设置-高级-环境变量 或 控制面板-系统安全-系统-高级系统设置-高级-环境变量 新建JAVA_HOME系统变量 变量名:JAVA_HOME 变量值:(JDK安装目录) 编辑PATH系统变量 新建...
DevTools热部署
spring-boot-devtools模块能够实现热部署,添加类、添加方法、修改配置文件、修改页面等,都能实现热部署。原理就是重启项目,但比手动重启快,其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。
A-Star算法介绍
A-Star算法介绍算法介绍A*(念做:A Star)算法是一种很常用的路径查找和图形遍历算法。它有较好的性能和准确度。 A*算法最初发表于1968年,由Stanford研究院的Peter Hart, Nils Nilsson以及Bertram Raphael发表。它可以被认为是Dijkstra算法的扩展。 广度优先搜索为了更好的理解A*算法,我们首先从广度优先(Breadth First)算法讲起。 正如其名称所示,广度优先搜索以广度做为优先级进行搜索。 从起点开始,首先遍历起点周围邻近的点,然后再遍历已经遍历过的点邻近的点,逐步的向外扩散,直到找到终点。 这种算法就像洪水(Flood fill)一样向外扩张,算法的过程如下图所示: 在上面这幅动态图中,算法遍历了图中所有的点,这通常没有必要。对于有明确终点的问题来说,一旦到达终点便可以提前终止算法,下面这幅图对比了这种情况: 在执行算法的过程中,每个点需要记录达到该点的前一个点的位置 — 可以称之为父节点。这样做之后,一旦到达终点,便可以从终点开始,反过来顺着父节点的顺序找到起点,由此就构成了一条路径。 Dijkstra算法Dijkstra算法是由计算机科学家Edsger W....
Typora使用说明
Typora使用说明空格与换行Typora 在空格与换行部分主要是使用 CommonMark 作为标注规范。 空格:在输入连续的空格后,Typora 会在编辑器视图里为你保留这些空格,但当你打印或导出时,这些空格会被省略成一个。你可以在源代码模式下,为每个空格前加一个 \ 转义符,或者直接使用 HTML 风格的 &nbps; 来保持连续的空格。 软换行:需要说明的是,在 Markdown 语法中,换行(line break)与换段是不同的。且换行分为软换行和硬换行。在 Typora 中,你可以通过 Shift + Enter 完成一次软换行。软换行只在编辑界面可见,当文档被导出时换行会被省略。 硬换行:你可以通过 空格 + 空格 + Shift + Enter 完成一次硬换行,而这也是许多 Markdown 编辑器所原生支持的。硬换行在文档被导出时将被保留,且没有换段的段后距。 换段:你可以通过 Enter 完成一次换段。Typora 会自动帮你完成两次 Shift + Enter 的软换行,从而完成一次换段。这也意味着在 Markdown 语法下,换段是通过在段与段之间加入空行来实现的。 Windows 风格(CR+LF)与 Unix 风格(CR)的换行符:CR 表示回车 \r ,即回到一行的开头,而 LF 表示换行 \n ,即另起一行。所以 Windows 风格的换行符本质是「回车 + 换行」,而 Unix 风格的换行符是「换行」。这也是为什么 Unix / Mac 系统下的文件,如果在 Windows 系统直接打开会全部在同一行内。 你可以在 文件 - 偏好设置 - 编辑器 - 默认换行符 中对此进行切换。 emoji 表情在 Typora 中,你可以用 :emoji: 的形式来打出 emoji,软件会自动给出图形的提示。 LaTeXTypora 原生支持 LaTeX 语法,你有两种方式输入 LaTeX 风格的数学公式: 行内公式(inline):用 ... 括起公式,公式会出现在行内。 块间公式(display):用 $$$…$$$ 括起公式(注意 $$$$ 后需要换行),公式会默认显示在行中间。 代码高亮Typora 中代码的插入也可以分为行内和块间两种: 行内代码:用`…` 或 ``…``...
迪杰斯特拉算法
迪杰斯特拉算法算法 初始化距离向量 d(长度为 V ),起点设为0,其他点设为无穷大 初始化集合 Q,含义为尚未确定距离的顶点的集合,将所有顶点加入 从 Q 中弹出距离最小的顶点 u 遍历 u 的所有仍在 Q中的邻居 w , 判断 d[u] + length(u,w) < d[w]是否成立,如果成立,更新d[w] = d[u] + length(u,w), 否则无视 回到 3 开始循环,直到 Q为空集 时间复杂度 初始化 d 和 Q 均为 O(V) 外层循环,每次删除一个顶点,共 V 个顶点,故为O(V) 内层 Extrac-min 为O(V),遍历邻居为 O(N)(N 为每个节点最大的邻居数) 综上,复杂度为 O(V) + O(V^2) + O(VN) ~O(V^2) 优化时间复杂度依赖于最小优先队列的实现方式,如果用数组存储最小优先队列的话,时间复杂度才是O(V^2),因为每次调用extractmin都要遍历整个数组 图实现如我们现在有如下有向加权图: 计算点 A 到其他顶点的最短距离。 同样的,我们创建 vertexes 数组来临时保存点 A 到其他顶点的最短路距离。在算法计算过程中,从点 A 开始往其他顶点扩散遍历。同时以当前遍历到的边结合 vertexes 数组中的值,不断更新 vertexes 数组中的值。 首先我们以邻接表来表示这个图: 123456789101112131415161718192021222324252627282930313233343536373839public class Graph { private class Edge {// 表示边 public int sid;// 边的起始节点 public int tid;// 边的结束节点 public int w;// 边的权重 public Edge(int s, int t, int w) { this.sid = s; this.tid = t; this.w = w; } } private class Vertex...
贝尔曼福特算法
贝尔曼福特算法松弛算法想像一下图论中的graph 是用毛线和珠子组成的网状结构,两颗珠子之间毛线的长度即edge上的权值,一开始十分松乱的放在桌上。现在你要求SSSP(单源最短路),当发现从源点s到当前点u有两条路径,relax操作可以想象成用力把s和u两点往外撑开。这时候依照生活经验,我们可以很自然的看到s点和u点之间较短的那条边处于紧绷状态,而较长的那条边处于松弛状态。因此非常形象的把这个操作称为松弛操作。 负环路负环路(环路权重之和为负数) Bellman Ford算法每次对所有的边进行松弛,每次松弛都会得到一条最短路径,所以总共需要要做的松弛操作是V - 1次。在完成这么多次松弛后如果还是可以松弛的话,那么就意味着,其中包含负环。 思路 初始化时将起点s到各个顶点v的距离dist(s->v)赋值为∞,dist(s->s)赋值为0 后续进行最多n-1次遍历操作(n为顶点个数,上标的v输入法打不出来…),对所有的边进行松弛操作,假设: 所谓的松弛,以边ab为例,若dist(a)代表起点s到达a点所需要花费的总数, dist(b)代表起点s到达b点所需要花费的总数,weight(ab)代表边ab的权重, 若存在: (dist(a) +weight(ab)) < dist(b) 则说明存在到b的更短的路径,s->…->a->b,更新b点的总花费为(dist(a) +weight(ab)),父节点为a 遍历都结束后,若再进行一次遍历,还能得到s到某些节点更短的路径的话,则说明存在负环路 思路上与狄克斯特拉算法(Dijkstra...
JavaWeb笔记
在Java中,动态web资源开发的技术统称为JavaWeb。