6,行为型模式6.5 状态模式6.5.1 概述【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。
类图如下:
代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123public interface ILift { //电梯的4个状态 //开门状态 public final static int OPE ...
6,行为型模式6.11 解释器模式6.11.1 概述
如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。
123456789101112131415161718//用于两个整数相加public static int add(int a,int b){ return a + b;}//用于两个整数相加public static int add(int a,int b,int c){ return a + b + c;}//用于n个整数相加public static int add(Integer ... arr) { int sum = 0; for (Integer i : arr) { sum += i; } return sum;}
上面的形式比较单一、有限,如果形式变化非常多,这就不符合要求,因为加法和减法运算,两个运算符与数值可以有无限种组合方式。比如 1+2+3+4+5、1+2+3-4等等。 ...
day1
1.了解Java
2.掌握JDK安装和环境变量的配置
3.理解Java代码的执行流程
4.使用notepad++书写第一个Java代码
1.什么是JavaJava是一门编程语言
思考问题:
人和人沟通?
中文 英文
人和计算机沟通?
计算机语言: C C++ C# php python
2. Java诞生
前身叫Oak(橡树)
目前最流行的版本还是JDK8
3.Java三大平台体系
JavaSE(J2SE):
标准版:各个应用平台的基础
JavaEE(J2EE):
企业版:为企业的环境进行开发的
JavaME(J2ME):
微型版:致力于嵌入式开发
4.Java是跨平台的
Java源代码(你写的这个代码)-》编译-》字节码文件的-》运行(JDK中执行的)-》安装在不同的系统中
5.JDK开发环境的搭建和配置【重点】5.1几个概念
JVM: Java虚拟机
jre:Java运行环境
jdk:Java开发工具
jdk里面包含了jvm和jre
5.2jdk的安装0
打开JDK安装包直接下一步下一 ...
day1812345678回顾1·Object toString() equals() hashCode()2.hashSet这个类3.TreeSet这个类
今天内容
1.TreeSet的底层
2.匿名内部类【开发用的】
3.内部类
4.map
1.二叉树的了解1234567891011121314151617181920212223242526272829303132通过查阅API我们得知TreeSet集合是基于TreeMap的实现,而TreeMap是基于二叉树(红黑树)结构,也就是说TreeSet集合的底层使用的二叉树(红黑树)结构。树结构:它也是数据结构中的一种。在计算机领域中树结构指的是倒立的树。树结构存储的数据,每个数据也需要节点来保存。而TreeSet集合底层是二叉树的数据结构,什么是二叉树呢?二叉树:每个节点的下面最多只能有2个子节点。说明:最多表示一个节点下面可以有两个子节点或者一个子节点或者没有子节点。在二叉树的根节点左侧的节点称为左子树,在根节点的右侧的节点称为右子树。既然已经得知TreeSet集合底层是二叉树,那么二叉树是怎样存储数据的呢?是怎样保证存储的数 ...
day1在今日内容
0 复习昨日
1 本周安排
2 第二阶段介绍
3 HTML
0 复习昨日
1 本周安排前面的Java知识
类,对象,属性,方法
String,日期操作,包装类操作
集合操作
本周
HTML 1天
CSS 1天
JavaScript 3天
前端知识比后端简单,注意是记单词,要求就是会用
见到别人写的页面要认识
2 第二阶段介绍第一阶段是java基础,第二阶段是javaweb,我们要是还有第一阶段的知识来完成javaweb项目的开发.即学完第二阶段就可以完成一个简单项目,理解项目开发流程,知道一个项目的请求响应的过程.
第二阶段(五周)
前端
数据库
javaweb知识
项目开发
前端浏览器页面发请求
java代码处理请求,操作数据库
java代码根据数据库结果,做出响应
3 HTML3.1 HTML介绍我们进行web开发,web开发中前端页面就是由HTML编写.
html是一种开发页面的编程语言,全称Hypertext Markup Language(超文本标记语言)
超文本,比普通文本功能丰富,图片,动态效果,超链接,多媒体等 ...
day11今日内容
0 复习昨日1 JDBC概述2 JDBC开发步骤3 完成增删改操作4 ResultSet5 登录案例
0 复习昨日
1 写出JQuery,通过获得id获得dom,并给input输入框赋值的语句$(“#id”).val(“值”)
2 mysql内连接和外连接的区别内连接只会保留完全符合关联条件的数据外连接会保留表(左外保留左表)中不符合关联条件的数据
3 事务是什么?事务是逻辑一组操作,要么全部成功,要么全部失败
4 索引有什么好处和坏处索引可以提高查询效率
如果表是经常性的需要增删改,有索引在就会非常慢
1 JDBC概述
目前我们操作数据库,只能通过命令行(cmd)或者图形工具Navicat来操作数据库.
但是实际开发时配合页面数据对数据操作,如果还是使用命令行(cmd)或者图形工具Navicat来操作就很麻烦!
JDBC就是另外一种操作数据库的方式.(Java操作数据库)
JDBC: Java DataBase Connectivity Java 数据库连接
JDBC的设计思想
Mysql厂商提供了驱动包,如下(jar包)(jar包就是把jav ...
1、本系列博客,主要是面向Java8的虚拟机。如有特殊说明,会进行标注。
2、本系列博客主要参考尚硅谷的JVM视频教程,整理不易,所以图片打上了一些水印,还请读者见谅。后续可能会加上一些补充的东西。
3、尚硅谷的有些视频还不错(PS:不是广告,毕竟看了人家比较好的教程,得给人家打个call)
4、转载请注明出处,多谢~,希望大家一起能维护一个良好的开源环境。
第1章-JVM和Java体系架构前言你是否也遇到过这些问题?
运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!
想解决线上JVM GC问题,但却无从下手。
新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了。
每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。
大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。
开发人员如何看待上层框架
一些有一定工作经验的开发人员,打心眼儿里觉得SSM、微服务等上层技术才是重点,基础技术并不重要 ...
第2章-类加载子系统内存结构概述简图
详细图英文版
中文版
注意:方法区只有HotSpot虚拟机有,J9,JRockit都没有
如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?
类加载器
执行引擎
类加载器子系统类加载器子系统作用:
类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。
ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。
加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)
类加载器ClassLoader角色
class file(在下图中就是Car.class文件)存在于本地硬盘上,可以理解为设计师画在纸上的模板,而最终这个模板在执行的时候是要加载到JVM当中来根据这个文件实例化出n个一模一样的实例。
class file加载到JVM中,被称为DNA元数据模板(在下图中就是内存中的Car ...
此章把运行时数据区里比较少的地方讲一下。虚拟机栈,堆,方法区这些地方后续再讲。
运行时数据区概述及线程前言本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段
当我们通过前面的:类的加载 –> 验证 –> 准备 –> 解析 –> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区
类比一下也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品。
运行时数据区结构运行时数据区与内存
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。
我们通过磁盘或者网络IO得到的数据,都需要先加载到内存中,然后CPU从内存中获取数据进行读取,也就是说内存充当了 ...
虚拟机栈简介虚拟机栈的出现背景
由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的【如果设计成基于寄存器的,耦合度高,性能会有所提升,因为可以对具体的CPU架构进行优化,但是跨平台性大大降低】。
优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
内存中的栈与堆
首先栈是运行时的单位,而堆是存储的单位。
即:栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放哪里
虚拟机栈基本内容
Java虚拟机栈是什么?
Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用,栈是线程私有的
1234567891011121314151617181920public class StackTest { public static void main(String[] args) ...