
一、日志
作用:记录一个系统运行的过程和详情
优势:可以将系统执行的信息选择性的记录到指定的位置(控制台、文件中、数据库中);
可以随时以开关的形式控制是否记录日志,无需修改源代码。
| 输出语句 | 日志技术 | |
| 输出位置 | 只能是控制台 | 可以将日志信息写入到文件或者数据库中 |
| 取消日志 | 需要修改代码,灵活性比较差 | 不需要修改代码,灵活性比较好 |
| 多线程 | 性能较差 | 性能较好 |
日志规范:一些接口,提供给日志的实现框架设计的标准。
常见规范:Commons Logging 、Simple Logging Facade for Java
二、Logback日志框架
Logback主要分为三个技术模块:
logback-core: logback-core 模块为其他两个模块奠定了基础,必须有。
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API。
logback-access 模块与 Tomcat 和 Jetty 等 Servlet 容器集成,以提供 HTTP 访问日志功能
在项目下新建文件夹lib,导入Logback的相关jar包到该文件夹下,并添加到项目库中去。
将Logback的核心配置文件logback.xml直接拷贝到src目录下。
日志级别:TRACE < DEBUG < INFO 作用:用于控制系统中哪些日志级别是可以输出的,只输出级别不低于设定级别的日志信息。 三、阶段项目实战——电影购票系统 电影类
用户类 顾客类 没有特殊的功能所以直接继承用户类即可 商家类 整体的功能结构 登录首页 登录 判断用户是否存在 商家页面 电影信息更新功能 电影下架功能 判断电影是否存在 电影上架功能 查看信息 顾客界面 购票 以上为一些主要功能,还有一些细节的功能不再展示了 。 Day2 一、File类 功能:定位文件,获取文件本身的信息、删除文件、创建文件等 绝对路径:从盘符开始 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。
二、IO流 IO流也称为输入、输出流,就是用来读写数据的。 I表示intput,是数据从硬盘文件读入到内存的过程,称之输入,负责读。 O表示output,是内存程序的数据从内存到写出到硬盘文件的过程,称之输出,负责写。 流的四大类: 字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流称为字节输入流。 字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流称为字节输出流。 字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流称为字符输入流。 字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流称为字符输出流 文件字节输入流:每次读取一个字节
文件字节输入流:每次读取一个字节数组
文件字节输出流 使用字节流完成文件复制
字符流 try-catch-finally实现资源释放 try-catch-resource释放资源
字节流、字符流如何选择? 字节流适合做一切文件数据的拷贝(音视频,文本) 字节流不适合读取中文内容输出 字符流适合做文本文件的 *** 作(读,写) 缓冲流 缓冲流也称为高效流、或者高级流。之前学习的字节流可以称为原始流 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能 字节缓冲流性能优化原理: 字节缓冲输入流自带了8KB缓冲池,直接从缓冲池读取数据,所以性能较好。 字节缓冲输出流自带了8KB缓冲池,数据就直接写入到缓冲池中去,写数据性能高。 转换流 字符输入转换流InputStreamReader可以解决字符流读取不同编码乱码的问题,可以指定编码把原始字节流转换成字符流,如此字符流中的字符不乱码 字符输出转换流OutputStreamWriterl可以指定编码把字节输出流转换成字符输出流,从而可以指定写出去的字符编码。 对象序列化 以内存为基准,把内存中的对象存储到磁盘文件中去,称为对象序列化。 对象必须实现序列化接口 打印流 打印流一般是指:PrintStream,PrintWriter两个类。 打印功能二者是一样的使用方式 PrintStream继承自字节输出流OutputStream,支持写字节 PrintWrite继承自字符输出流Writer,支持写字符 Day3 多线程 线程是一个程序内部的一条执行路径。(main方法的执行其实就是一条单独的路径) 多线程是从软硬件上实现多条执行流程的技术。 多线程的创建方法: 1、继承Thread类 优点:简单 缺点:无法继承其他类,不利于扩展 2、实现Runnable接口 优点:线程任务类只是实现接口,可以继续继承类和实现接口,扩展性强 。 缺点:编程多一层对象包装,如果线程有执行结果是不可以直接返回的。 匿名内部类实现 3、利用Callable FutureTask接口实现 优点:扩展性强,可以再线程执行完毕后去获取线程执行的结果 缺点:编码复杂 线程安全 多个线程同时 *** 作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题。 原因: 存在多线程并发 同时访问共享资源 存在修改共享资源 线程安全问题案例模拟
同步代码块 作用:把出现线程安全问题的核心代码给上锁。 原理:每次只能一个线程进入,执行完毕后自动解锁,其他线程才可以进来执行。 锁对象的规范要求 规范上:建议使用共享资源作为锁对象。 对于实例方法建议使用this作为锁对象。 对于静态方法建议使用字节码(类名.class)对象作为锁对象。 同步方法 作用:把出现线程安全问题的核心方法给上锁。 原理:每次只能一个线程进入,执行完毕以后自动解锁,其他线程才可以进来执行。 Lock锁 线程通信 所谓线程通信就是线程间相互发送数据,线程间共享一个资源即可实现线程通信。 模拟电话通信:
线程池 线程池就是一个可以复用线程的技术。 网络编程 网络编程可以让程序与网络上的其他设备中的程序进行数据交互。 使用UDP通信实现:发送消息、接收消息
使用UDP通信实现:多发多收消息
使用UDP通信实现:广播、组播 广播:
组播 TCP通信 Day5 单元测试 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性 JUnit是使用Java语言实现的单元测试框架,它是开源的,Java开发者都应当学习并使用JUnit编写单元测试。
反射 反射是指对于任何一个Class类,在"运行的时候"都可以直接得到这个类全部成分。 在运行时,可以直接得到这个类的构造器对象:Constructor 在运行时,可以直接得到这个类的成员变量对象:Field 在运行时,可以直接得到这个类的成员方法对象:Method 这种运行时动态获取类信息以及动态调用类中成分的能力称为Java语言的反射机制。
反射的作用: 可以在运行时得到一个类的全部成分然后 *** 作。 可以破坏封装性。(很突出) 也可以破坏泛型的约束性。(很突出) 更重要的用途是适合:做Java高级框架 基本上主流框架都会基于反射设计一些通用技术功能。 注解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。 XML解析案例
工厂设计模式 对象通过工厂的方法创建返回,工厂的方法可以为该对象进行加工和数据注入可以实现类与类之间的解耦 *** 作 装饰设计模式 装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)