设计模式之创建者模式
GOF23创建型模式
单例模式
工厂模式
抽象工厂模式
建造者模式
原型模式
结构性模式
适配器模式
桥接模式
装饰模式
组合模式
外观模式
享元模式
代理模式
行为型模式
模板方法模式
命令模式
迭代器模式
观察者模式
中介者模式
备忘录模式
解释器模式
状态模式
策略模式
职责链模式
访问者模式
创建型模式单例模式饿汉单例模式代码1234567891011121314151617181920212223242526package com.xiheya.single;/** * @Author {xiheya} * @Date: 2022/03/15/ 16:44 * @Description *///饿汉单例模式public class Hungry { //可能会浪费空间,尽管对象空间没有被使用,但是还是会被开辟出来。 private byte[] data1 = new byte[1024*1024]; private byte[] data2 = new byte[1024*1024]; private byte[] ...
排序算法
冒泡排序代码:12345678910111213141516171819202122232425262728293031package com.xiheya.sort;/** * @Author {xiheya} * @Date: 2022/03/16/ 17:21 * @Description */public class BubbleSort { public static void main(String[] args) { int[] arr = {1,3,2,6,5,9,4}; bubbleSort(arr); System.out.print("finish: [" ); for (int x : arr) { System.out.print(x + "\t"); } System.out.println("]"); ...
Java基础小结
面向过程 & 面向对象面向过程思想—>自上而下面向对象就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
步骤清晰简单,第一步做什么,第二步做什么……
面向过程适合处理一些较为简单的问题
面向对象思想—>自下而上面向对象就是根据类创建对象,每个对象都有自己的属性和方法,而这些属性和方法都是围绕对象服务的,你会发现用到的属性和方法都是对象。
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题。
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
什么是面向对象
面向对象编程(Object_Oriented Programming, OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的形式(封装)数据
抽象 —>将有共同特征的物体抽象成一个类,比如泰迪、哈士 ...
Java异常02
捕获异常try catch关键字
try:监控类型
catch:想要捕获的异常,可以捕获异常
finally:可以处理善后工作,(可以不要finally)
使用 try catch关键字可以在出现异常时实现程序不终止,继续跑完程序。我们只需要在try catch中处理这些异常就可以了。
123456789101112131415161718192021222324package com.xiheya.exception;/** * @Author {xiheya} * @Date: 2022/03/14/ 9:47 * @Description */public class Test { public static void main(String[] args) { //假设要捕获多个异常:我们要从小到大的去捕获 // 快捷键 Ctrl + Alt + T 快速捕获异常。 try{ //try 监控类型 ...
Java异常01
异常定义
实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序在跑着,内存或硬盘可能就满了。等等
软件程序再运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文是:Exception,意思是例外。这些,例外情况,或者叫异常,怎么让我们写的程序做出合理的处理,而不至于程序崩溃?
异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。
异常发生在程序运行期间,他影响了程序正常的程序执行流程
分类简单分类需要掌握以下三种类型的异常
检查性异常:最具代表的检查性异常时用户错误或问题引起的异常,这是程序羊无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略
运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
错误ERROR:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生 ...
Java面向对象04
static 关键字静态变量与静态方法
静态的变量 多线程中会用到(包含static关键字)
非静态的变量(不包含static关键字)
非静态方法中可以直接调用静态方法,而静态方法中无法调用非静态方法.
如果变量是静态变量我们就可以直接通过类名去访问这个变量,而非静态变量不可以直接通过类名来访问。
静态方法可以直接被调用,非静态方法需要实例化类对象之后,才可以通过对象来调用。
代码
1234567891011121314151617181920212223242526272829package com.xiheya.oop.demo07;/** * @Author {xiheya} * @Date: 2022/03/13/ 20:44 * @Description */public class Student { private static int age; //静态的变量 多线程中会用到 private double score; //非静态的变量 public ...
Java面向对象03
封装
该露的露,该藏的藏
我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用
封装(数据的隐藏)
通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。
记住这句话:属性私有,get/set
封装的作用:
1.提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护性增加了
代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859package com.xiheya.oop.demo04;/** * @Author {xiheya} * @Date: 2022/03/13/ 12:00 * @Description */public class Student {// 属性私有 private String name; ...
Java面向对象02
构造器
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
1.必须和类的名字相同
2.必须没有返回类型,也不能写void
代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869package com.xiheya.oop.demo02;/** * @Author {xiheya} * @Date: 2022/03/12/ 22:50 * @Description *///学生类public class Student { //一个类即使什么都不写,也会存在一个构造方法 // 显示的定义构造期。// 属性:字段 String name; int age;// 方法// 实例化初始值// 1.使用new关键字,实质上是调用构造器// 2.构造器一般用来 ...
Java面向对象01
面向过程& 面向对象面向过程思想—>自上而下面向对象就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
步骤清晰简单,第一步做什么,第二步做什么……
面向过程适合处理一些较为简单的问题
面向对象思想—>自下而上面向对象就是根据类创建对象,每个对象都有自己的属性和方法,而这些属性和方法都是围绕对象服务的,你会发现用到的属性和方法都是对象。
物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
面向对象适合处理复杂的问题,适合处理需要多人协作的问题。
对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理。
什么是面向对象
面向对象编程(Object_Oriented Programming, OOP)
面向对象编程的本质就是:以类的方式组织代码,以对象的形式(封装)数据
抽象 —>将有共同特征的物体抽象成一个类,比如泰迪、哈 ...
Java数组03
Arrays类
数组的工具类java.util.Arrays
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据进行一些基本操作。
查看JDK帮助文档
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而”不用“使用对象来调用(注意:是”不用”而不是“不能”)
具有以下常用功能:
给数组赋值:通过fill方法。
对数组排序:通过sort方法,按升序
比较数组:通过equals方法比较数组中元素值是否相等
查找数组元素:通过binarySearch方法能对排列好的数组进行二分查找法操作
代码实现:
123456789101112131415161718package com.xiheya.Array;import java.util.Arrays;/** * @Author {xiheya} * @Date: 2022/03/12/ 16:19 * @Description */public class ArrayDemo05 { publ ...
Java数组02
内存分析
Java内存分析
数组的声明在栈当中,创建空间及赋值操作在堆中。
三种初始化静态初始化12int[] a = {1,2,3};Man[] mans = {new Man(1,1),new Man(2,2)};
动态初始化1234int[] a = new int[5];a[0] = 1;a[1] = 2;……
数组的默认初始化
数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
代码:
123456789101112131415161718192021package com.xiheya.Array;/** * @Author {xiheya} * @Date: 2022/03/12/ 10:45 * @Description */public class ArrayDemo02 { public static void main(String[] args) { //静态初始化 i ...
Java数组01
数组的定义
数组是相同类型数据的有序集合
数组描述的是相同类型的若干个数据,按照一定先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它。
数组声明创建
首先必须声明数组变量,才能再程序中使用数组。语法如下:
12dataType[] arrayRefVar; //首选方法dataType arrayRefVar[]; //效果相同,但不是首选方法
Java语言使用new操作符来创建数组,语法如下:
1dataType [] arrayRefVar = new dataType[arraySize];
数组的元素是通过索引访问的,数组索引从0开始。
获取数组长度:arrays.length
123456789101112131415161718package com.xiheya.Array;/** * @Author {xiheya} * @Date: 2022/03/12/ 10:21 * @Description */public class Demo01 { pub ...
Java方法
方法定义
Java方法是语句的集合,它们在一起执行一个功能
方法是解决一类问题的步骤的有序组合
方法包含于类或对象当中
方法在程序中被创建,在其他地方被引用
设计方法的原则
方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保持方法的原子性,就是一个方法只完成一个功能,这样利于我们后期的扩展
方法的命名规则:首字母小写,后面是驼峰命名规则。
设计一个方法:实现简单的两个数的加法:
12345678910111213141516package com.xiheya.Method;/** * @Author {xiheya} * @Date: 2022/03/11/ 16:23 * @Description */public class Demo01 { public static void main(String[] args) { System.out.println(add(1,2)); //方法的调用 } public static int add(int a ...
Java流程控制03
循环结构while 循环
while 是最基本的循环
语法
123while(布尔表达式){ //循环内容}
只要布尔表达式为true,则循环一直执行下去
我们大多数情况下会让循环停止下来,我们需要一个让表达式失效的方式来结束循环
少部分情况循环需要一直执行,比如服务器的请求响应监听
循环条件一直为true就会造成无限循环【死循环】,正常业务中,应当避免死循环。它会影响程序性能或者造成程序卡死崩溃
设计一个程序计算1+2+3+4+5+……+100;
代码:
1234567891011121314151617181920package com.xiheya.struct;/** * @Author {xiheya} * @Date: 2022/03/08/ 17:44 * @Description */public class WhileDemo01 { public static void main(String[] args) { int i = 0; int total = ...