java小笔记
网友小椒
这个作者很懒,什么都没留下…
展开
-
数据库连接池
概念一个容器(集合),存放数据库连接的容器。当系统初始化后,容器被创建,容器会申请一些连接对象,当用户访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。好处1️⃣节约资源2️⃣用户访问高效实现1️⃣标准接口:DataSource方法:获取连接:getConnection();归还连接:Connection.close(); 如果连接对象Connection是从连接池中获取的,调用Connection.close()方法,则不会再关闭连接,而是归还连接池。2️⃣原创 2020-12-01 15:56:47 · 124 阅读 · 0 评论 -
JDBC管理事务
事务:一个包含多个步骤的事务的业务操作,如果这个业务操作被事务管理,这多个步骤要么同时成功,要么同时失败。开启事务:在执行sql前开启提交事务:在sql执行完提交事务回滚事务:在catch中回滚事务public class jdbcdemo10 { public static void main(String[] args) { Connection conn=null; PreparedStatement p1= null; Prepared原创 2020-11-30 23:24:47 · 150 阅读 · 0 评论 -
JDBC练习-登录案例
需求:1️⃣通过键盘录入用户名和密码2️⃣判断用户是否登录成功步骤:1️⃣创建一个数据库表CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, usernamme VARCHAR(32), PASSWORD VARCHAR(32) );INSERT INTO USER VALUES(NULL,'zhangsan','123');INSERT INTO USER VALUES(NULL,'lisi','234');2️原创 2020-11-30 18:58:01 · 222 阅读 · 0 评论 -
JDBC1
概念JDBC:Java DataBase Connectivity Java数据库连接,Java语言操作数据库。JDBC本质:是官方定义的一套操作所有关系型数据库的规则,即接口。各个数据库产商去实现这套接口,提供数据库驱动jar包,可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类入门步骤:1️⃣导入驱动jar包复制jar包到项目的libs目录下add as library2️⃣注册驱动3️⃣获取数据库连接对象 Connection4️⃣定义sql5️⃣获取执行原创 2020-11-30 17:57:03 · 99 阅读 · 0 评论 -
注解
注解:说明程序的,给计算机看注释:用文字描述程序,给程序员看·定义:注解也叫元数据,一种代码级别的说明,与类、接口、枚举是在同一层次。可以声明在包、类、方法、局部变量、方法参数等的前面、用来对这些元素进行说明,注释。作用:1、编写文档:通过代码里标识的注解生成文档【生成文档】1、代码分析:通过代码里标识的注解对代码进行分析【反射】3、编译检查:通过代码里标识的注解让编译器能实现基本的编译检查【override】使用注解 @注解名称JDK中预定义的一些注解1.@Override:检测该被注解原创 2020-11-26 01:38:32 · 78 阅读 · 0 评论 -
反射案例
/*框架类需求:不改变代码的前提下,创建任意类的对象并执行其中的任意方法实现:1、配置文件2、反射步骤:1、将需要创建的对象的全类名和需要执行的方法定义在配置文件中2、在程序中加载读取配置文件3、使用反射技术来加载类文件进内存4、创建对象5、执行方法*/public class ReflectTest {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuch原创 2020-11-25 22:35:45 · 55 阅读 · 0 评论 -
反射
概述反射:框架设计的灵魂框架:半成品软件。可以在框架的基础上进行软件开发,简化编码反射:将类的各个组成部分封装为其他对象,反射机制好处:1.可以在程序运行过程中,操作这些对象2.可以解耦,提高程序的可扩展性获取class对象的方式:1、Class.forName(“全类名”):将字节码文件加载进内存,返回class对象多用于配置文件,将类名定义在配置文件中,读取文件,加载类2、类名.class:通过类名的属性class获取多用于参数的传递3、对象.getClass(): getCla原创 2020-11-25 21:46:34 · 70 阅读 · 0 评论 -
Junit测试
如测试计算器类Assert.assertEqualspublic class CalculatorTest {/**测试add * */@Testpublic void testadd(){ // System.out.println("我被执行了"); Calculator c =new Calculator(); int result = c.add(1,2); //System.out.println(result); //断言 这个结果是3 .原创 2020-11-25 15:34:49 · 79 阅读 · 0 评论 -
方法的引用
概念public class demo01Printable {public static void main(String[] args) { printString((s)->{ System.out.println(s); });//lambda表达式/* 分析:lambda表达式目的:打印参数传递的字符串 1、System.out对象已经存在 2、println方法也是已经存在的 可以优化lambda表达式 */ printString(原创 2020-11-25 01:08:49 · 129 阅读 · 0 评论 -
练习 集合元素处理
传统方式public class demo01StreamTest {public static void main(String[] args) { ArrayList<String> one =new ArrayList<>(); one.add("张三"); one.add("李四"); one.add("赵柳二"); ArrayList<String>one1= new ArrayList<>();原创 2020-11-25 00:12:05 · 46 阅读 · 0 评论 -
Stream流的常用方法
forEach遍历/*forEach:该方法接收一个Consumer接口函数,将每一个流元素交给该函数处理简单记:forEach方法:用来遍历流中的数据是一个终结方法,遍历之后就不能继续调用Stream流中的其他方法*/public class demo01Stream_ForEach {public static void main(String[] args) { //获取一个Stream流Stream<String>stream= Stream.of("张三","原创 2020-11-24 02:03:11 · 863 阅读 · 1 评论 -
Stream流
传统方式遍历集合/*使用传统方式遍历集合*/public class demo01Stream {public static void main(String[] args) { List<String> list =new ArrayList<>(); list.add("sdsds"); list.add("sdqqsds"); list.add("sdseeeeeds"); List<String> list1 =n原创 2020-11-24 01:33:50 · 647 阅读 · 0 评论 -
Function接口
Function接口/*Function接口:根据一个类型的数据得到另一个类型的数据前者称为前置条件,后者称为后置条件Function接口中最重要的抽象方法是:R apply(T t)根据类型T的参数获取类型R的结果使用的场景例如:将String类型转换为Integer类型*/public class demo01Function {/* 定义一个方法 方法的参数传递一个字符串类型的整数 方法的参数传递一个Function接口,泛型使用(String,Integer)原创 2020-11-23 23:19:44 · 385 阅读 · 0 评论 -
常用函数式接口
/*常用的函数式接口Supplier接口仅包含一个无参的方法:T get(),用来获取一个泛型参数指定类型的对象数据Supplier接口被称为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据*/public class demo01Supplier {//定义一个方法,方法的参数传递Supplier<T>接口,泛型执行String,get方法会返回一个Stringpublic static String getString(Supplier<原创 2020-11-23 21:01:28 · 218 阅读 · 1 评论 -
函数式接口作为方法的返回值类型案例
/*如果一个方法的返回值类型是一个函数式接口,可以直接返回一个lambda表达式当通过一个方法来获取一个Compartor接口类型的对象作为排序器时,可以调用该方法获取*/public class demo02Comparator {//定义一个方法,方法的返回值类型是函数式接口public static Comparator<String> getComparator(){ /*return new Comparator<String>() {原创 2020-11-20 19:12:02 · 297 阅读 · 0 评论 -
函数式接口作为方法的参数案例
/*Runnable接口是一个函数式接口假设有一个startThread方法使用该接口作为参数,可以使用lambda进行传参这种情况和Thread类的构造方法参数为Runnable没有区别*/public class demo01Runnable {//定义一个方法startThread,方法的参数使用函数式接口Runnablepublic static void startThread(Runnable run){ //开启多线程 new Thread(run).start(原创 2020-11-20 18:52:17 · 365 阅读 · 0 评论 -
优化日志案例
/*使用lambda优化日志案例lambda的特点:延迟加载使用前提:必须存在函数式接口*/public class demo02Lambda {//定义一个显示日志的方法,方法参数传递日志等级和MessageBuilder接口public static void showLog(int level, MessageBuilder messageBuilder) { //对日志等级判断,如果是1级,调用MessageBuilder接口的方法messagebulider if(l原创 2020-11-20 16:56:31 · 84 阅读 · 0 评论 -
函数式接口
概念:函数式接口在java中指:有且仅有一个抽象方法的接口。函数式编程的体现就是lambda。语法糖:使用更加方便,但原理不变的代码语法。/*函数式接口:有且仅有一个抽象方法的接口接口中可以包含其他的方法(默认,静态,私有)注解 @FunctionalInterface 作用:可以检测接口是否是一个函数式接口是:编译成功否:编译失败(接口中没有抽象方法,抽象方法的个数多于一个)*/@FunctionalInterfacepublic interface MyFunctionalInte原创 2020-11-20 00:54:12 · 643 阅读 · 0 评论 -
模拟BS服务器
分析代码实现/*创建BS版本的服务器*/public class TCPServer {public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8080); /* 开始多线程读取服务器的照片 让服务器一直处于监听的状态 */ while (true){ Socket socket = se原创 2020-11-19 22:56:56 · 274 阅读 · 0 评论 -
文件上传优化
客户端public class TCPClient {public static void main(String[] args) throws IOException { //1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 FileInputStream fis = new FileInputStream("D:\\IdeaProjects\\basic-code\\aaaa\\q\\1.jpg"); //2.创建一个客户端Socke原创 2020-11-19 18:57:02 · 98 阅读 · 0 评论 -
文件上传案例
文件上传原理文件上传客户端/*文件上传案例的客户端:读取本地文件,上传到服务器,读取服务器回写的数据明确:数据源:D:\IdeaProjects\basic-code\aaaa\qaq\qaq.jpg目的地:服务器实现步骤:1、创建本地字节输入流:FileInputStream对象,绑定读取的数据源2、创建一个客户端Socket对象,构造方法中绑定的IP地址和端口号3、使用Socket的方法getOutputStream,获取网络字节输出流OutputStream对象4、使用本地字节原创 2020-11-19 13:43:37 · 269 阅读 · 0 评论 -
TCP通信的服务器端
/*TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据表示服务器的类:java.net.ServerSocket构造方法:ServerSocket(int port)创建绑定到特定端口的服务器套接字。服务器端明确的事:必须知道是哪个客户端请求的服务器 用accept方法获取要请求连接的客户端对线Socket成员方法:accept()侦听并接受到此套接字的连接实现步骤:1、创建服务器ServerSocket对象和系统要指定的端口号2、使用ServerSocke原创 2020-11-19 01:01:24 · 444 阅读 · 0 评论 -
TCP通信的客户端代码实现
/*TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据表示客户端的类:java.net.Socket:此类实现客户端套接字(也可以叫“套接字”)。套接字是两台机器间通信的端点。套接字:包含了IP地址和端口号的网络单位构造方法:Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号参数:String host:服务器主机的名称/服务器的IP地址int port:服务器的端口号成员方法:OutputStre原创 2020-11-19 00:43:34 · 312 阅读 · 0 评论 -
TCP通信概述
概述TCP通信能实现两台计算机之间的数据交互,通信的两端,严格区分为客户端(Client)和服务器(Server)在Java中,提供了两个类用于实现TCP通信程序:1.客户端: java.net.Socket 类表示。创建 Socket 对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。2.服务端: java.net.ServerSocket 类表示。创建 ServerSocket 对象,相当于开启一个服务,并等待客户端的连接。服务器端必须明确:1.多个客户端同时和服务器进行交原创 2020-11-18 23:56:33 · 1108 阅读 · 0 评论 -
网络编程入门
1.1 软件结构:1、C/S结构:Client/Server结构,客户端与服务器结构,如qq。2、B/S结构: Browser/Server结构,流浪器和服务器结构,如谷歌。1.2网络通信协议网络通信协议:对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。协议中对数据的传输格式、传输速率、传输步骤等做了 统一规定,通信双方必须同时遵守,最终完成数据交换。TCP/IP协议:传输控制协议/因特网互联协议( Transmission Control Protocol/Internet P原创 2020-11-18 23:16:20 · 134 阅读 · 0 评论 -
打印流
/*PrintStream 打印流为其他输出流添加了功能,使他们能方便打印各自数据值表示形式特点:1、只负责数据的输出,不负责数据的读取2、永远不会抛出IOException3、有特有的方法 print printlnsetOut(PrintStream out)可以修改输出语句的目的地为参数传递的打印流的目的地*/public class demo04PrintStream {public static void main(String[] args) throws FileNotFo原创 2020-11-18 18:55:16 · 63 阅读 · 0 评论 -
序列化和反序列化
Person p = new Person(“jack”,10);把对象以流的方式,写入到文件中保存,叫做对象的序列化writeObject()ObjectOutputStream:对象的序列化流把文件中保存的对象,以流的方式读取出来,叫做对象的反序列化ObjectInputStream:对象的反序列化流readObject() 接收:Object obj = new Person(“jack”,10);对象的序列化/*把对象以流的方式,写入到文件中保存,叫做对象的序列化构造方法:原创 2020-11-18 18:00:19 · 68 阅读 · 0 评论 -
练习 转换文件编码
/*将GBK编码的文件,转换为utf-8编码的文件分析:1、创建InputStreamReader对象 传递字节输入流和指定的编码表名称GBK2、创建OutputStreamWriter对象,传递字节输出流和指定的编码表名称UTF-83、使用InputStreamReader对象的方法read4、使用OutputStreamWriter对象的方法writer,把读取的数据写入文件中5、释放资源*/public class demo07Test {public static void ma原创 2020-11-18 17:01:18 · 258 阅读 · 4 评论 -
编码问题
/*FileReader可以读取默认编码格式(UTF-8)的文件读取系统默认编码(GBK中文)会产生乱码*/public class demo04FileReader {public static void main(String[] args) throws IOException { FileReader fr =new FileReader("D:\\IdeaProjects\\basic-code\\aaaa\\我是GBK.txt"); int len =0; wh原创 2020-11-18 16:45:56 · 65 阅读 · 0 评论 -
练习 文本排序
对文本信息/*练习:对文本的内容进行排序按照(1,2,3,4)顺序排序分析:1、创建一个HashMap集合对象,可以存储每行文本的序号(1,2,3,4) value:存储每行的文本2、创建字节缓冲输入流对象3、创建字节缓冲输出流对象4、使用readline读取文本5、对读取到的文本进行切割 获取序号和文本内容6、把切割好的序号和文本内容存储到HashMap集合中7、遍历HashMap集合,获取每一个键值对8、拼接键值对为一个文本行9、使用write写入文件中10、释放资源*/原创 2020-11-18 14:08:36 · 176 阅读 · 1 评论 -
字符缓冲流
1.1 字符缓冲输出流 构造方法public BufferedReader(Reader in):创建一个新的缓冲输入流public BufferedWriter(Writer out);创建一个新的缓冲输出流/*BufferedWriter 继承Writer共性成员方法:writer(int c)写入单个字符writer(char[] cbuf)写入字符数组abstract void write(char[] cbuf.int off,int len)写入字符数组的某一部分write(S原创 2020-11-18 12:38:19 · 220 阅读 · 0 评论 -
字节缓冲流
1.1概述缓冲流的基本原理,在创建对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。1.2字节缓冲流构造方法public BufferedInputStream(InputStream in);创建一个新的缓冲输入流public BufferedOutputStream(OutputStream out);创建一个新的缓冲输出流1.3字节缓冲输出流/*public BufferedOutputStream(OutputStream out);原创 2020-11-18 00:16:29 · 279 阅读 · 2 评论 -
Properti集合
/*Properties集合 extends Hashtable<k,v> implements Map<k,v>Properties类表示了一个持久的属性集,Properties可保存在流中或者从流中加载。属性列表中每个键及其对应值都是一个字符串Properties集合是唯一一个和IO流相结合的集合可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储load,把硬盘中保存的文件,读取到集合中使用属性列表中每个键及其对应值都是一个原创 2020-11-17 21:51:02 · 94 阅读 · 0 评论 -
IO异常处理
/*JDk1.7之前的异常处理*/public class demo10 {public static void main(String[] args) { //提高变量fw的作用域 FileWriter fw=null; try{ //可能会产生异常的代码 fw = new FileWriter("D:\\IdeaProjects\\basic-code\\aaaa\\qaq.txt",true);//加上appen:true // 续写原创 2020-11-17 19:48:40 · 125 阅读 · 2 评论 -
字符输出流的续写和换行
/*续写和换行*/public class demo09 {public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("D:\\IdeaProjects\\basic-code\\aaaa\\qaq.txt",true);//加上appen:true原创 2020-11-17 19:20:05 · 197 阅读 · 0 评论 -
字符输出流写数据的其他方法
字符输出流的其他方法:*/public class demo08Writer {public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("D:\\IdeaProjects\\basic-code\\aaaa\\qaq.txt"); char[] cr= {'a','b','c'}; fw.write(cr,1,2); //写一部分 fw.wr.原创 2020-11-17 19:13:15 · 43 阅读 · 0 评论 -
字符输出流 flush和close方法的区别
/*字符输出流的使用步骤:1、创建FileWriter对象2、把FileWrite中的方法write,把数据写入到内存缓冲区中3、使用FileWriter中的方法flush,把内存缓冲区的数据,刷新到文件中4、释放资源*/public class demo06Writer {public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("D:\\IdeaProjec原创 2020-11-17 17:00:38 · 498 阅读 · 1 评论 -
字符输入流
/*reader:字符输入流,是字符输入流的最顶层的父类,定义了一些共性的成员方法,是一个抽象类共性的成员方法:1、int read()读取单个字符并返回2、int read(char[] cbuf)一次读取多个字符,将字符读入数组3、close 释放资源FileReader :文件字符输入流作用:把硬盘文件中的数据以字符的方式读取到内存中构造方法:1、String fileName 文件的路径2、File file 一个文件作用:创建一个FileReader对象 把FileRead原创 2020-11-17 16:28:07 · 1425 阅读 · 0 评论 -
字节输入输出复制文件
/*文件复制练习:一读一写明确:复制文件的来源 目的地文件复制的步骤:1、创建一个字节输入流对象,构造方法中绑定要读取的数据源2、创建一个字节输出流对象,构造方法中绑定要写入的目的地3、使用字节输入流对象的方法read读取文件4、使用字节输出流中的方法write,把读取到的字节写入目的地的文件中5、释放资源*/public class demo03CopyFile {public static void main(String[] args) throws IOException {原创 2020-11-17 15:30:51 · 76 阅读 · 0 评论 -
IO 字节输入流InputStream
/*InputStream:字节输入流此抽象类是表示字节输入流的所有类的超类定义了所有子类共性的方法:1、int read()从输入流中读取数据的下一个字节2、int read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中FileInputStream extends InputStream文件字节输入流 作用:把硬盘文件中的数据,读取到内存中使用构造方法FileInputStream(String name)FileInputStream(File fil原创 2020-11-17 14:52:04 · 89 阅读 · 0 评论