自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态代理

代理可以无侵入式的给对象增强其他的功能。如何为Java对象创建一个代理对象。

2024-04-07 10:30:27 295

原创 Java反射

1.反射:反射允许对封装类的字段,方法和构造函数的信息进行编程访问。①class.forName("全类名");---->源代码阶段。①获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑。对于任意一个对象,都可以把对象所有的字段名和值,保存到文件中去。反射可以跟配置文件结合的方式,动态的创建对象,并调用方法。③对象.getClass();------>运行阶段。②类名.class------>加载阶段。②结合配置文件,动态的创建对象并调用方法。练习2:跟配置文件结合动态创建。

2024-04-07 09:49:04 278

原创 TCP通信练习

运行时: 在浏览器输入127.0.0.1:10001。服务器:接收客户端上传的文件,上传完毕之后给出反馈。客户端:发送一条数据,接收服务端反馈的消息并打印。客户端:将本地文件上传到服务器,接收服务器的反馈。服务器:接收数据并打印,再给客户端反馈消息。想要服务器不停止,能接收很多用户上传的图片。运行结果:先运行服务器端,再运行客户端。运行结果:先运行服务器,再运行客户端。练习7:BS接收浏览器的消息并打印。服务器:多次接收数据,并打印。运行结果:运行4次结果。用户端不用改和上面一样。服务器:接收数据并打印。

2024-04-05 19:03:16 399

原创 TCP通信协议

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象。①创建客户端的Socket对象(Socket)与指定服务端连接。①创建服务器端的Socket对象(ServerSocket)TCP通信程序(三次握手)(图片来自哔站黑马程序员)②监听客户端连接,返回一个Socket对象。③获取输入流,读数据,并把数据显示在控制台。通过Socket产生IO流来进行网络通信。运行结果:先运行服务器端,再运行客户端。通信之前要保证连接已经建立。TCP通信程序(四次挥手)

2024-04-05 14:31:56 209

原创 单播,组播,广播

广播只需要将组播的发送端的代码改为255.255.255.255就可以了。其中224.0.0.0~224.0.0.255为预留的组播地址。组播地址:224.0.0.0~239.255.255.255。广播地址:255.255.255.255。运行结果:先运行三个接收端,再运行发送端。

2024-04-04 22:32:08 131

原创 网络编程练习:聊天室

UDP发送数据:数据来源于键盘录入,知道输入的数据是886.发送数据结束。UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收。然后点OK,就可以了。

2024-04-04 21:39:37 209

原创 Java网络编程

192.168.开头的就是私有地址,范围为192.168.0.0--192.168.255.255,专门为组织机构内部使用,以此节省ip。:127.0.0.1,也可以是localhost:是回送地址,也称本地回环地址,也称本机IP,永远只会寻找当前所在本机。B/S(Browser/Server 浏览器/服务器):只需要一个浏览器,用户通过不同的网址,客户访问不同的服务器。③协议:数据在网络中传输的规则,常见的协议有UDP,TCP,http,https,ftp。①IP:设备在网络中的地址,是唯一的标识。

2024-04-04 21:13:29 535

原创 Java线程池

1.创建线程池2.提交任务3.所有的任务全部执行完毕,关闭线程池Executors:线程池的工具类通过调用方法返回不同类型的线程池对象public static ExecutorService newCachedThreadPool()---->创建一个没有上限的线程池public static ExecutorService newFIxedThreadPool(int nThreads)--->创建有上限的线程池(图片来自哔站黑马程序员)①创建一个池子,池子中是空的②提交任务时,池子会创建新的线程对象,

2024-04-04 17:38:51 323

原创 多线程练习

有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为。创建两个抽奖箱(线程)设置线程名称分别为抽奖箱1,抽奖箱2。假设:100块分成了3个红包,现在有5个人去抢。其中红包是共享数据,5个人是5条线程。每次抽出一个奖项就打印一个(随机)抽奖箱1又产生了一个100元大奖。抽奖箱1又产生了一个200元大奖。抽奖箱1又产生了一个800元大奖。抽奖箱2又产生了一个700元大奖。抽奖箱1又产生了一个10元大奖。XXX抢到了XXX元。XXX抢到了XXX元。XXX抢到了XXX元。

2024-04-04 16:21:03 295

原创 Java多线程

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。当其他的非守护线程执行完毕后,守护线程会陆续结束(并不会执行完所有代码就结束了)void wait()--------->当前线程等待,直到被其他线程唤醒。void notifyAll()-------->唤醒所有线程。void notify()-------->随机唤醒单个线程。简单理解:应用软件中互相独立,可以同时运行的功能。生产者和消费者必须使用同一个阻塞队列。运行结果:两个线程交替执行。

2024-04-04 13:45:55 395

原创 Java练习:自动点名器

运行结果:(运行了两次)

2024-04-03 17:38:28 275

原创 字节打印流、字符打印流

特点2:特有的写出方法可以实现,数据原样写出(例如:打印97 文件中:97)特点1:打印流只操作文件目的地,不操作数据源(只有写,没有读)分类:PrintStream,PrintWriter两个类。特点3:特有的写出方法,可以实现自动刷新,自动换行。打印一次数据=写出+换行+刷新。(图片来自哔站黑马程序员)

2024-04-02 20:23:38 733

原创 序列化流(ObjectOutputStream)和反序列化流(ObjectInputStream)

②序列化对象后,修改了JAvaBean类,再次反序列化会出问题,会抛出InvalidClassException异常。解决方案:给该成员变量加transient关键字修饰,该关键字标记的成员变量不参与序列化过程。需求:将多个自定义对象序列化到文件中,但是由于对象的个数不确定,反序列化流该如何读取呢。①序列化流写到文件中的数据是不能修改的,一旦修改就无法再次读回来了。一旦实现了这个接口,那么就表示当前的Student类可以被序列化。③如果一个对象中的某个成员变量的值不想被序列化,读取时该变量默认初始化值。

2024-04-02 17:38:16 370

原创 转换流基本用法

转换流:是字符流和字节流之间的桥梁作用:字节流想要使用字符流中的方法。

2024-04-02 16:18:02 283

原创 缓冲流练习

要求:当程序运行超过三次给出提示:本软件只能免费使用3次,欢迎您注册会员后继续使用。第四次及之后运行控制台输出:本软件只能免费使用3次,欢迎您注册会员后继续使用~第一次运行控制台输出:欢迎使用本软件,第1次使用免费~第二次运行控制台输出:欢迎使用本软件,第2次使用免费~第三次运行控制台输出:欢迎使用本软件,第3次使用免费~实现一个验证程序运行次数的小程序,练习2:软件运行次数。

2024-04-01 21:27:14 416

原创 字节流和字符流综合练习

字节流和字符流的使用场景字节流:拷贝任意类型的文件字符流:读取纯文本文件的数据;往纯文本文件中写出数据。

2024-04-01 20:12:12 230

原创 字符集(ASCII,GBK,Unicode)

public int read(char[] buffer)--------->读取多个数据,读到末尾返回 -1。细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符。public int read()--------->读取数据,读到末尾返回-1。细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数。细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的。细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关。

2024-04-01 17:15:12 565

原创 Java文件的拷贝

【代码】Java文件的拷贝。

2024-04-01 09:35:29 188

原创 字节输入流FileInputStream的基本用法

输入流:不存在-->报错,因为数据在文件中,如果Java创建输入流对象的时候,如果文件不存在,创建出来的也是没有数据的空文件夹,没有意义,所以直接报错。FileInputStream:操作本地文件的字节输入流,可以把本地文件中的数据读取到程序中来。细节1:一次读一个字节,读出来的是数据在ASCII上对应的数字。输出流:不存在-->创建,把数据写到文件当中。细节2:读到文件末尾了,read方法返回-1。细节1:如果文件不存在,直接报错。细节:每次使用完流必须要释放资源。①创建字节输入流对象。

2024-03-31 22:12:31 224

原创 IO流“input”,“output”

细节:Windows操作系统中,Java对回车换行进行了优化,虽然完整的是\r\n,但是我们写其中一个\r或者\n,Java也可以实现换行,因为Java在底层会补全。细节1:write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符。细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的节san。细节1:参数是字符串表示的路径或者是File对象都是可以的。:用Windows系统自带的记事本打开并且能读懂的文件。细节3:如果文件已经存在,则会清空文件。

2024-03-31 21:35:06 197

原创 File练习

需求:定义一个方法找某一个文件夹中是否有以avi结尾的电影(暂时不考虑子文件夹)需求:定义一个方法找某一个文件夹中是否有以avi结尾的电影(需要考虑子文件夹)如果我们要删除一个有内容的文件夹,先删除文件夹里面所有内容,再删除自己。需求:在当前模块下的aaa文件夹中创建一个a.txt文件。套路:1.进入文件夹2.遍历数组3.判断。

2024-03-31 18:43:22 448

原创 File的常见成员方法

⑤当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件。④当调用者File表示的路径是一个有内容的文件夹时,将里面的所有文件和文件夹的路径放在File数组中返回。⑥当调用者File表示的路径是需要权限才能访问的文件夹时,返回null。③当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组。①当调用者File表示的路径不存在时,返回null。②当调用者File表示的路径是文件时,返回null。(图片来自哔站黑马程序员)

2024-03-31 17:26:27 253

原创 File及构造方法

public File(String parent,String child)------->根据父类路径名字符串和子路径名字符串创建文件对象。public File (File parent,String child)------>根据父路径对应文件对象和子路径名字符串创建文件对象。public File(String pathname)------>根据文件路径创建问价对象。File对象就表示一个路径,可以是文件的路径,也可以是文件夹的路径。相对路径:不带盘符的,默认到当前项目下去找。

2024-03-31 14:49:15 227

原创 Java中的异常

意义:就是为了让控制台的报错信息更加的见名知意步骤:①定义异常类②写继承关系③空参构造④带参构造代码示范:/*** 获取*//*** 设置*/throw new NameForamtException(name+"格式有误,长度应该为3~10");/*** 获取*/return age;/*** 设置*/throw new AgeOutOfBoundsException(age+"超出了范围");//1.创建键盘录入的对象。

2024-03-31 14:05:52 516

原创 方法引用练习

练习2:创建集合添加学生对象,学生对象属性:name,age。练习1:集合中存储一些字符串的数据,比如:鹿晗,34。收集到Student类型的数组中(使用方法引用完成)只获取姓名并放到数组中(使用方法引用完成)Student类同上。

2024-03-30 22:36:00 170

原创 Java方法引用

不能引用所有类中的成员方法,是跟抽象方法的第一个参数有关,这个参数是什么类型的,那么就只能引用这个类中的方法。假设流里面的数据是字符串,那么使用这种方式进行方法引用,只能引用String这个类中的方法。③被引用方法的形参,需要跟抽象方法的第二个形参到最后的形参保持一致,返回值需要保持一致。跟被引用方法的形参保持一致,如果没有第二个参数,说明被引用的方法需要是无参的成员方法。(3)引用父类的成员方法:super::方法名(引用处不能是静态方法)表示被引用方法的调用者,决定了可以引用哪些类中的方法。

2024-03-30 21:48:15 461

原创 Stream流练习

创建一个ArrayList集合,并添加以下字符串,字符串前面是姓名,后面是年龄。第一个集合中存储6名男演员的名字和年龄;第二个集合中存储6名女演员的名字和年龄。年龄大于等于24的保留,并将结果收集到Map集合中,姓名为键,年龄为值。定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10。(3)把过滤后的男演员姓名和女演员姓名合并到一起。(5)将所有的演员对象都保存到List集合中。姓名和年龄中间用逗号隔开,例如:张三,23。过滤奇数,只留下偶数,并将结果保存起来。

2024-03-30 18:12:08 279

原创 Stream流的终结方法

collect(Collector collector)----->收集流中的数据,放到集合中(List,Set,Map)void forEach(Consumer action)------->遍历。toArray()--------->收集流中的数据,放到数组中。long count()--------->统计。

2024-03-30 17:08:57 273

原创 Stream流的中间方法

①中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程。② 修改Stream流中的数据,不会影响原来集合或数组中的数据。

2024-03-30 16:10:43 159

原创 Stream流

Stream流的作用:结合了Lambda表达式,简化集合、数组的操作。

2024-03-30 14:05:13 132

原创 不可变集合

static <K,V> Map<K,V> of(E...elements)--------->创建一个具有指定元素的Map集合对象。static <E> List<E> of(E...elements)--------->创建一个具有指定元素的List集合对象。static <E> Sett<E> of(E...elements)--------->创建一个具有指定元素的Set集合对象。②Map里面的of方法,参数是有上限的,最多只能传递20个参数,也就是10个键值对。

2024-03-30 10:21:53 370

原创 Map集合练习

需求:定义一个Map集合,键用省份表示province,值表示市city,但是市会有多个。河北省=石家庄市,唐山市,邢台市,保定市,张家口市。江苏省=南京市,扬州市,苏州市,无锡市,常州市。湖北省=武汉市,孝感市,十堰市,宜昌市,鄂州市。添加完毕后,遍历结果如下。

2024-03-29 17:00:17 198

原创 可变参数和Collections

2.在方法当中,如果除了可变参数以外,还有其他的形参,那么可变参数要写在最后。java.util.Collections:是集合工具类。本质上就是一个数组,在形参中接收多个数据。1.在方法形参中最多只能有一个可变参数6。常用API(图片来自哔站黑马程序员)例如:int...args。格式:属性类型...名字。

2024-03-29 15:11:38 275

原创 TreeMap

要求:按照学生年龄的升序排列,年龄一样按照姓名的字母排列,同姓名,年龄视为同一个人。TreeMap跟TreeSet底层原理一样,都是红黑树结构的,增删改查性能较好。注意:默认按照简单从小到大进行排序,也可以自己规定键的排序顺序。②创建集合时传递Comparator比较器对象,指定比较规则。请统计字符串中每一个字符出现的次数,并按照一下格式输出。要求:按照id的升序排列、按照id的降序排列。由键决定特性:不重复,无索引,可排序。(1)按照id升序排列(默认是升序)可排序:对键进行排序。

2024-03-29 10:17:36 278

原创 LinkedHashMap

原理:底层数据结构依然是哈希表,只是每个键值对元素又额外的多了一个双链表的机制记录存储的顺序。这里的有序是保证存储和取出的顺序一致。由键决定:有序,不重复,无索引。

2024-03-29 09:19:51 176

原创 HashMap

需求:创建一个HashMap集合,键是学生对象(Student),值是籍贯(String)需求:某个班级80名学生,现在需要组成秋游活动,班长提供了四个景点依次是(A,B,C,D)如果值存储的是自定义对象,不需要重写HashCode方法和equals方法。如果键存储的是自定义对象,需要重写HashCode方法和equals方法。④HashMap和HashSet底层原理是一样的,都是哈希表结构。②没有额外需要学习的特有方法,直接使用Map里面的方法就可以了。③特点都是由键决定的:无序,不重复,无索引。

2024-03-28 22:34:12 217

原创 Map的遍历方式

super K,?super V> action)--->结合Lambda遍历Map集合。

2024-03-28 19:59:00 269

原创 双列集合---Map

boolean containsValue(Object value)--------->判断集合是否包含指定的值。boolean containsKey(Object key)--------->判断集合是否包含指定的键。V remove(Object key)--------->根据键删除键值对元素。int size()--------->集合的长度,也就是集合中键值对的个数。void clear()--------->移除所有的键值对元素。③键和值是一一对应的,每一个键只能找到自己对应的值。

2024-03-28 19:18:01 174

原创 TreeSet

如果语文成绩一样,按照数学成绩排;如果数学成绩一样,按照英语成绩排;如果都一样,认为是同一个学生,不存。要求:存入4个字符串,“c” ,“ab” ,“df” ,“qwer”对于整数类型:Integer,Double,默认按照从小到大的顺序进行排序。要求按照学生的年龄进行排序,同年龄按照姓名字母排列(暂不考虑中文)属性:姓名,年龄,语文成绩,数学成绩,英语成绩。//负数:表示当前要添加的数据是小的,存左边。//正数:表示当前要添加的数据是大的,存右边。按照长度排序,如果一样长则按照首字母排序。

2024-03-28 17:20:52 623

原创 HashSet、LinkedHashSet

利用hashCode方法和equals方法,利用hashCode方法得到哈希值,得到哈希值就能确定当前元素是在数组的哪个位置,再调用equals方法去比较对象内部属性值是否相同。加载因子:扩容时机:当数组里面存了16*0.75=12个元素的时候,此时数组就会扩容成原来的两倍16*2=32。如果数据去重,默认使用HashSet;如果已经重写hashCode方法,不同的对象只要属性值相同,计算出的哈希值就是一样的。需求:创建一个存储学生对象的集合,存储多个学生对象,实用程序实现在控制台遍历该集合。

2024-03-28 11:30:14 710

空空如也

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

TA关注的人

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