自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 Java高级Day52-BasicDAO

","张无忌","男","2000-1-1","111");这样的通用类,称为 BasicDao,是专门和数据库交互的,即完成对数据库(表)的crud操作。System.out.println("===查询单行单列值===");System.out.println("===查询单行结果===");System.out.println("===查询结果===");//返回多个对象(即查询的结果是多行的),针对任意表。//开发通用的dml发明合法,针对任意的表。//查询单行单列的方法,返回单值的方法。

2024-09-28 22:27:31 803

原创 Java高级Day51-apacheDBUtils

commons-dbutils 是 Apache 组织提供的一个开源JDBC工具类库,它是对JJDBC的封装,使用dbutils能极大简化jdbc编码的工作量QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增删改查和批处理使用QueryRunner类实现查询ResultSetHandler接口:该接口用于处理 java.sql.ResultSet,将数据按要求转换为另一种形式ArrayHandler:把结果集种的第一行数据转成对象数组。

2024-09-26 22:47:16 654

原创 Java高级Day50-连接池

传统的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证IP地址,用户名和密码。需要数据库连接的时候,就向数据库请求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易导致服务器崩溃。每一次数据库连接,使用完后都得断开,如果程序出现异常而未能关闭,将导致数据库内存泄漏,最终导致重启数据库。传统获取连接的方式,不能控制创建的连接数量,如连接过多,也可能导致内存泄漏,MySQL崩溃。

2024-09-24 22:20:51 347

原创 Java高级Day49-事务和批量处理

JDBC程序中当一个Connection对象创建时,默认情况下是自动提交事务:每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚JDBC程序中为了让多个SQL语句作为一个整体执行,需要使用事务调用Connection的setAutoCommit(false)可以取消自动提交事务在所有的SQL语句都成功执行后,调用 Conncetion 的 commit();方法提交事务在其某个操作失败或出现异常时,调用 Conncetion 的 rollback();方法回滚事务。

2024-09-22 22:03:30 768

原创 Java高级Day48-JDBC-API和JDBC-Utils

/2.这时调用者可以选择捕获该异常 或 默认处理,比较方便。//演示如果使用JDBCUtils工具类,完成dml 和 select。//顶柜相关的属性(4个),因为只需要一份,因此做成static。//3.创建PreparedStatement 对象。//这是一个工具类,完成mysql的连接和关闭资源。//1.将编译异常转成 运行异常。//在实际开发中,可以如下处理。//连接数据库,返回Connection。//读取相关的属性值。//在static代码块去初始化。//2.组织一个sql。

2024-09-21 20:42:24 916

原创 Java高级Day47-Statement

Statement对象用于执行静态SQL语句并返回其生成的结果的对象在连接建立后,需要对数据库进行访问,执行命名或是SQL语句,可以通过Statement【存在SQL注入】,PreparedStatement【预处理】,CallableStatement【存储过程】Statement对象执行SQL语句,存在SQL注入风险SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令,恶意攻击数据库。

2024-09-20 23:26:06 888

原创 Java高级Day46-数据库连接方式和ResultSet底层

表示数据库结果集的数据表,通常通过执行查询数据库的语句生产ResultSet对象保持一个光标指向其当前的数据行,最初,光标位于第一行之前next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false,因此可以在while循环中使用循环来遍历结果集//通过Properties对象获取配置文件的信息​//1.注册驱动//2.得到连接//3.得到Statement//4.组织sql//执行给定的SQL语句,该语句返回单个ResultSet对象。

2024-09-19 16:20:37 844

原创 Java高级Day45-JDBC入门

JDBC为访问不同的数据库提供了统一的接口,为使用者屏蔽了细节问题Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作规定一套接口规范,让不同的数据库厂商实现,在java程序中统计调用接口的方法即可。

2024-09-18 21:17:14 846

原创 Java高级Day44-反射暴破

/3.创建PrivateTest的类,利用Class类得到私有的name属性,修改私有的name属性,并调用getName()的方法打印name属性值。System.out.println("reVal的运行类型是=" + reVal.getClass());System.out.println(say.invoke(null, 200, "李四", '女'));//o 的运行类型是Student。System.out.println(say.invoke(o, 100, "张三", '男'));

2024-09-17 23:16:47 1002

原创 Java高级Day43-类加载

虚拟机会包装一个类的< client >()方法在多线程环境中被正确的加锁,同步,如果多个线程同时区初始化一个类,那么只会有一个线程去执行这个类的< client >()方法,其他线程都需要阻塞等待,知道活动线程执行< client >()方法完毕。JVM会在该阶段对静态变量,分配内存并默认初始化(对应数据类型的默认初始值,如0,0L,null,false等)这些变量所使用的内存都将在方法区中进行分配。到初始化阶段,才真正开始执行类中定义的Java程序代码,此阶段是执行< client >()方法的过程。

2024-09-16 17:20:25 1014

原创 Java高级Day42-Class类

Class也是类,因此也继承ObjectClass类对象不是new出来的,而是系统创建的//Class类对象不是new出来的,而是系统创建的//(1)传统new对象//(2) 反射方式,刚才没有debug到 ClassLoader类的 loadClass,原因是没有注销Cat cat = new Cat();// 仍然是通过 ClassLoader类加载Cat类的 Class对象对于某个类的Class类对象,在内存中只有一份,因为类只加载一次。

2024-09-15 19:35:00 923

原创 Java高级Day41-反射入门

/(3) 通过 cls 得到你加载的类 com.reflection.question.Cat 的 mothName 的方法对象。//传统写法 对象.成员变量 , 反射:成员变量对象.get(对象)//(2) 通过cls 得到你加载的类 com.reflection.question.Cat 的对象实例。System.out.println("o的运行类型=" + o.getClass());//传统方法 对象.方法() , 反射机制 方法.invok(对象)

2024-09-14 20:58:40 802

原创 Java高级Day40-QQ项目全代码

System.out.println("用户 id=" + u.getUserID() + " pwd=" + u.getPasswd() + "验证失败");System.out.println("\n===========网络通信二级菜单(用户"+ userID +")==========");System.out.println("===========欢迎(用户"+ userID +"登陆成功)==========");System.out.println("请输入想聊天的用户号(在线):");

2024-09-13 20:01:22 660

原创 Java高级Day39-QQ项目用户登录及基本框架

System.out.println("\n===========网络通信二级菜单(用户"+ userID +")==========");System.out.println("===========欢迎(用户"+ userID +"登陆成功)==========");System.out.println("==========登陆服务器失败==========");System.out.println("===========欢迎登录网络通信系统==========");

2024-09-10 16:20:36 703

原创 Java高级Day38-网络编程作业

/2.客户端可以输入一个音乐文件名,比如高山流水,服务端收到音乐名后,可以给客户端返回这个音乐文件,如果服务器没有这个文件,返回一个默认的音乐即可。//封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口。//封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口。//2.连接上后,生成Socket,通过socket.getOutputStream()//插入换行流,表示回复内容结束。

2024-09-07 19:42:49 817

原创 Java高级Day37-UDP网络编程

/封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口。//封装的 DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口。1.当客户端连接到服务器后,实际上客户端也是通过一个端口的服务端进行通讯的,这个端口是TCP/IP来分配的,不确定的,随机的。// 当有数据包发送到9998端口时,就会接收到数据,如果没有数据包发送到,就会阻塞等待。//2.将需要发送的数据,封装到DatagramPacket对象。

2024-09-06 19:58:31 1118

原创 Java高级Day36-网络编程

套接字开发网络应用程序被广泛采用,以至于成为事实上的标准通信的两端都要有Socket,是两台机器间通信的端点网络通信其实就是Socket间的通信Socket允许程序把网络连接当成一个流,数据在两个Socket间通过IO传输一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。

2024-09-05 23:29:56 572

原创 Java高级Day35-Properties

/null代表注释。System.out.println(split[0] + "值是:" + split[1]);//2.使用Properties类添加key-val到新文件mysql2.properties中。properties.setProperty("user","汤姆");//1.使用Properties类完成对mysql.properties的读取。

2024-09-01 11:59:55 547

原创 Java高级Day34-流补充

/boolean -> Boolean(实现了Serializable)//double -> Double(实现了Serializable)//char -> Character(实现了Serializable)System.out.println(ois.readObject());//String(实现了Serializable)//int -> Integer(实现了Serializable)//因为print底层使用的是write,所以我们可以直接调用write进行打印/输出。

2024-08-31 15:27:52 957

原创 Java高级Day33-节点流处理流

/关闭流,这里注意,只需要关闭BufferedReader,因为底层会自动关闭节点流。//关闭外层流即可,传入的FileWriter(filePath)会在底层关闭。处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。//readLine读取一行内容,但没有换行。//使用BufferedReader读取文本文件,并显示在控制台。//按行读取,效率高。//当返回null时,表示文件读取完毕。//每读取一行,就写入。节点流是底层流/低级流,直接跟数据源相接。

2024-08-29 20:56:34 797

原创 Java高级Day32-字节输入流

FileReader 和 FileWriter 是字符流,即按照字符来操作ioread:每次读取单个字符,返回该字符,如果文件末尾返回到 -1read(char[]):批量读取国歌字符到数组,返回读取到的字符数,如果到文件末尾返回-1new String(char[]):将char[]转换成Stringnew String(char[],off,len):将char[]的指定部分转换成StringFileWriter常用方法。

2024-08-28 21:26:46 628

原创 Java高级Day31-IO流文件

I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输。new File(File parent,String child) //根据父目录文件+子路径构建。new File(String parent,String child) //根据父目录+子路径构建。//方式3:new File(String parent,String child)//方式2:new File(File parent,String child)file.isDirectory //是否是目录。

2024-08-19 21:55:45 687

原创 Java高级Day30-线程补充

/主线程每隔1s,输出hi,一共10次,当输出到第5次,启动一个子线程,每隔1s输出hello,等该线程输出10次hello后,退出,主线程继续输出hi,直到主线程退出。也可以这样理解:线程同步,即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。线程执行同步代码块时,其他线程调用了该线程的suspend()方法将该线程挂起,该线程不会释放锁。守护线程:一般是为工作现场服务的,当所有的用户线程结束,守护线程自动结束。

2024-08-16 17:13:31 318

原创 Java高级Day29-多线程

线程右进程创建的,是进程的一个实体一个进程可以有多个线程。

2024-08-15 19:44:13 660

原创 Java高级Day28-让坦克动起来

先绘制好坦克的四个方向: //根据坦克方向,来绘制对应坦克 //direct来表示方向(0:向上 1:向右 2:向下 3:向左) switch (direct){ case 0://表示向上 g.fill3DRect(x, y, 10,60,false);//画出坦克左边的轮子 g.fill3DRect(x + 30, y, 10,60,false);//画出坦克右边的轮子

2024-08-13 22:35:24 279

原创 Java高级Day27-绘制坦克大战

/画出坦克右边的轮子。画矩形边框 drawRect(int x,int y,int width,int height)画椭圆边框 drawOval(int x,int y,int width,int height)填充矩形 fillRect(int x,int y,int width,int height)填充椭圆 fillOval(int x,int y,int width,int height)//初始化自己的坦克。

2024-08-12 21:34:43 888

原创 Java高级Day26-自定义泛型

class 类名{成员普通成员可以使用泛型(属性、方法)使用泛型的数组,不能初始化(因为数组new无法确定泛型类型,无法在内存开辟空间)静态方法中不能使用类的泛型泛型类的类型,是在创建对象时确定的(因为创建对象时,需要指定确定类型)如果在创建对象时,没有指定类型,默认为Object//1.Tiger后面泛型,所以我们把Tiger就称为自定义泛型类//2.T,R,M泛型是标识,一般是单个大写字母//3.泛型标识可以有多个​R r;T t;M m;

2024-08-11 22:08:14 375

原创 Java高级Day25-泛型

泛型又称参数化类型,是JDK5.0出现的新特征,解决数据类型的安全性问题在类声明或实例化时只要指定好需要的具体的类型即可Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCaastException异常。同时,代码更简洁、健壮泛型的作用是:可以在类声明时通过一个标识表示某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型//泛型的作用是:可以在类声明时期通过一个标识表示类中某个属性的类型//或者是某个方法的返回值的类型,或者是参数类型E s;

2024-08-10 21:44:50 480

原创 Java高级Day24-集合最后补充

存放元素的健值对 即K-Vhashtable的键和值都不能为null,否则会抛出NullPointerExceptionhashtable使用方法基本上和HashMap一样hashtable是线程安全的,hashmap是线程不安全。

2024-08-09 19:57:24 468

原创 Java高级Day23-HashMap

当添加key-val时,通过key的哈希值得到在table的索引。如果该索引处有元素,继续判断该元素的key是否和准入加入的key相等,如果相等,直接替换val;如果添加时发现容量不够,需要扩容。HashMap没有实现同步,因此线程是不安全的,方法没有做同步互斥的操作,没有synchronized。以后再扩容,则需要扩容table为原来的2倍,临界值为原来的2倍,既24,以此类推。与HashSet一样,不保证映射的顺序,因为底层是以hash表的方式来存储的。如果添加相同的key,会覆盖原来的key。

2024-08-07 22:04:32 508

原创 Java高级Day22-Map

Map的Key可以为null,Value也可以为null,注意Key为null,只能有一个,但value可以有多个。Map中的Key和value可以是任何引用类型的数据,会封装到HashMap&Node对象中。Key和Value之间存在单向一对一关系,即通过指定的key总能找到对应的value。Map中的Key不允许重复,原因和HashSet一样,若key相同,则会替换。//1.第一组:先取出所有的Key,通过Key取出对应的Value。//这里可以使用所有的Collections使用的遍历方法。

2024-08-06 20:43:50 327

原创 Java高级Day21-Set、HashSet

无序(添加和取出的顺序不一致),没有索引不许重复元素,所以最多包含一个null。

2024-08-04 22:42:35 930

原创 Java高级Day20-Vector、LinkedList

每个节点(Node对象),里面又维护了prev、next、item三个属性,其中通过prev指向前一个,通过next指向后一个节点。//让last引用指向jerry,就是双向链表的尾节点。System.out.println("=====从头到尾遍历=====");System.out.println("=====从尾到头遍历=====");System.out.println("=====从头到尾遍历=====");//定义一个Node类,Node对象,表示双向链表的一个节点。

2024-08-02 22:39:53 867

原创 Java高级Day19-List、ArrayList

List集合类中元素有序(即添加顺序和取出顺序一致)、且可以重复List集合中的每个元素都有其对应的顺序索引,即支持索引List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

2024-07-31 23:35:04 395

原创 Java高级Day18-集合

Map 接口的实现子类 是双列集合,存放的是 K-V (haspMap.put("NO1","北京"))col.add(new Book("三国演义","罗贯中",10.1));col.add(new Book("三国演义","罗贯中",10.1));col.add(new Book("红楼梦","曹雪芹",34.6));col.add(new Book("红楼梦","曹雪芹",34.6));col.add(new Book("小李飞刀","古龙",5.1));//返回下一个元素,类型是Object。

2024-07-30 23:05:13 284

原创 Java高级Day17-日期类

System.out.println("月: "+c.get(Calendar.MONTH)+1);System.out.println("日: "+c.get(Calendar.DAY_OF_MONTH));System.out.println("分钟: "+c.get(Calendar.MINUTE));System.out.println("小时: "+c.get(Calendar.HOUR));System.out.println("年: "+c.get(Calendar.YEAR));

2024-07-28 21:29:15 295

原创 Java高级Day16-Math类,Arrays类

/4.copyOf 数组元素的复制 从数组中拷贝arr.length个元素到newArr数组中,若拷贝元素多余arr,用null填补。//5.fill 数组元素的填充 使用99去填充num数组,替换原来的元素。//因为数组是引用类型,所以通过sort排序后,会直接影响到实参。//4.floor 向下取整,返回<=该参数的最小整数。//3.cell 向上取整,返回>=该参数的最小整数。//1,toString 返回数组的字符串形式。//2.sort 排序(自然排序和定制排序)//Math常用方法(静态)

2024-07-27 16:20:51 247

原创 Java高级Day15-String,StringBuffer,StringBuilder

先在堆中创建空间,里面维护了value属性,指向常量池的zkw空间,如果常量池没有zkw,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址。2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高。1.String保存的是字符常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低。indexOf //获取字符在字符串中第1此出现的索引,索引从0开始,如果找不到,返回-1。

2024-07-25 22:19:41 793

原创 Java高级Day14-包装类Wrapper

/底层使用的是Integer.valueOf(n2)Integer i2 = Integer.parseInt(str4);//底层仍然是intValue()方法。//其范围-128~127 在范围内就是直接返回,反之new Integer(xx)//演示int-->Intever的装箱和拆箱。//jdk5以后,就可以自动装箱和拆箱。//String ->包装类。//包装类->String。//jdk5前是手动装箱。

2024-07-22 19:29:50 548

原创 Java高级Day13-异常补充

1.定义类:自定义异常类名继承Exception或RuntimeException2.如果继承Exception,属于编译异常3.如果继承RuntimeException,属于运行异常//当接受Person对象年龄时,要求范围在18~100之间,否则抛出异常if (!throw new AgeException("年龄需要在18~120之间");System.out.println("你的年龄范围正确");//自定义一个异常。

2024-07-20 22:41:52 950

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除