![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 87
Yan1less
这个作者很懒,什么都没留下…
展开
-
java初识(1) 一切万物皆对象,方法与属性是互通的
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。下面是一个构造方法示例:public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造...原创 2018-03-09 16:38:36 · 222 阅读 · 0 评论 -
使用NIO搭建一个聊天室
搭建一个一台服务端多台客户端连接的聊天室首先梳理一下核心点: 服务端有一个本地Map,记录了所有连接的信息,以达到给所有人发送的效果编码时的公共流程:1.先打开各自的channel和selector,然后channel注册到selector上,注册事件C:CONNECT;S:ACCEPT2.然后进行一个死循环,第一行是selector.select()该事件会阻塞自己...原创 2019-04-21 15:16:14 · 350 阅读 · 0 评论 -
用Java写K站爬虫
背景近些日子对java爬虫有兴趣,所以又做了一个K站的爬虫,只实现基础功能对请求头没有什么封装(初衷是爬些图片做壁纸),因为以前又做过D站的爬虫,所以这次就一起总结一下吧。不放源码,想要的同学在git上找:https://github.com/Yan1less/MySpriders梳理关系写爬虫主要是逻辑梳理清楚,总站->输入检索标签->每个匹配的图片连接入队->...原创 2019-04-17 10:24:39 · 247 阅读 · 0 评论 -
Timer
java中Timer是起到定时器的作用,实际执行的事件是由TimerTask类决定的,模板代码如下package com;import java.util.Timer;import java.util.TimerTask;public class EXAM{ public static void main(String[] args) { Timer a...原创 2019-03-16 10:47:11 · 131 阅读 · 0 评论 -
HashMap之put
我们明白hashmap其基本组成原理是数组+单项链表+红黑树这次来看put方法: public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }其中有hash(key)和putVal,那么什么是hash()方法呢 static final ...原创 2019-03-15 16:42:39 · 127 阅读 · 0 评论 -
理解NIO中的Selector
Selector是选择器是NIO技术中的核心组件,可以将通道注册进选择器中,其主要作用就是使用一个线程来对多个通道中的已就绪通道进行选择,然后就可以对选择的通道进行数据处理,属于一对多的关系。这种机制在NIO技术中心称为“IO多路复用”。其优势是可以节省CPU资源说的简单点就是一个线程通过选择器可以连接多个通道,从而完成高效的I/O在Selector中有三个核心类:Selector:主...原创 2019-03-10 16:43:54 · 894 阅读 · 0 评论 -
Lock的使用
java中明明有synchronized 保留字,但是为什么又要诞生出ReentrantLock,ReentrantReadWriteLock类呢?其实该类出现并不奇怪,因为java都是面向对象的,锁当然也是一个对象,凭什么就不能有一个专门的类呢ReentrantLock 该类采用lock()与unlock()来代替获得锁与释放锁的方法;其经常与Condition配合使用 在...原创 2019-03-14 16:28:27 · 162 阅读 · 0 评论 -
理解NIO中的Socket
Socket通信是计算机之间常用的通信技术,http传输协议底层就是靠它的,它的底层用c++实现,Java中对其进行了重量级的封装。我们先来学习Java中Socket怎么使用,下面例子是传输图片的(从C->S)服务端package socket;import java.io.File;import java.io.FileOutputStream;import ...原创 2019-03-10 13:08:32 · 381 阅读 · 0 评论 -
Thread的使用
本文只是初步介绍java中的线程,仅了解其重要方法的用法和需要注意的点。join():比如在A线程中调用B.join()。那么在B线程执行完之前A会一直阻塞;底层是用wait实现,所以会释放锁wait():阻塞线程notify():唤醒线程,这两个方法会成对出现,这两个方法的使用要在锁中或同步块中sleep():休眠一段时间;不会释放锁interrupt():打断线程,强制结束...原创 2019-03-14 15:05:16 · 234 阅读 · 0 评论 -
理解Java中的序列化与反序列化
序列化即将运行在内存中的数据存储到硬盘上,这样下次再启动程序的时候数据就不会丢失。反序列化是将磁盘上的数据直接载入内存,可能会免去一些计算实现序列化与反序列化可以通过网络进行,这意味着序列化机制可以自动弥补不同操作系统之间的差异。而Java中实现序列化很简单,只需实现Serializable接口,实现接口之后需要在添加一个变量private static final long...原创 2019-03-06 21:43:10 · 196 阅读 · 0 评论 -
理解NIO中的Buffer与Channel
本节主要讲Socket与NIO 首先Socket,他不是协议,而是计算机之间的通信技术,HTTP才是应用层协议。Socket与HTTP的关系是Socket是HTTP的底层实现,HTTP对Socket进行封装,所以我们学习Socket技术还是很有必要的 Socket底层是用C++实现的,当然最底层都是直接与硬件进行通信,这里不做探究。各个语言如:Java,C#都对Socket都有不同程...原创 2019-03-09 12:24:51 · 567 阅读 · 0 评论 -
理解JavaIO
JavaIO从其出生的时候就存在了,其主要包含 面向字节的输入输出流:InputStream,OutputStream 面向字符的输入输出流:Reader,Writer(这四个都是抽象类,不能直接实例化)字节是计算机的存储单位,8位;而字符只是在内存中才存在的,16位;由于Java本身Char就是16位的Unicode,所以一开始也有人说Reade...原创 2019-03-06 20:21:46 · 189 阅读 · 0 评论 -
JDBC由浅入深解析(C3P0)(DBUtils)
1.自定义链接池 首先是最不常用的连接池,但对于新手理解JDBC很友好的 只需要在项目导入java和数据库链接的jar包即可,导入之后: 1.首先定义一个文件夹,格式为XXX.properties 在文件夹里写入连接信息,如: ...原创 2018-05-10 17:18:05 · 259 阅读 · 0 评论 -
初识java(3)异常
throws E1,E2,E3只是告诉程序这个方法可能会抛出这些异常,方法的调用者可能要处理这些异常,而这些异常E1,E2,E3可能是该函数体产生的。throw则是明确了这个地方要抛出这个异常。throw语句用在方法体内,表示抛出异常,由方法体内的语句处理。throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。 throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知...原创 2018-03-09 16:40:05 · 110 阅读 · 0 评论 -
初识Java(2)String的详细介绍
String 方法下面是 String 类支持的方法,更多详细,参看 Java String API 文档:SN(序号) 方法描述1 char charAt(int index)返回指定索引处的 char 值。2 int compareTo(Object o)把这个字符串和另一个对象比较。3 int compareTo(String anotherString)按字典顺序比...原创 2018-03-09 16:39:29 · 84 阅读 · 0 评论 -
Java中的动态代理和静态代理
本文面向初接触动态代理的学者,代码贴在最后静态代理其实现思路:从前有A,B商家注册到了C平台上,A提供一些初级的服务,B对A的服务进行了一些封装从而能实现更厉害的服务。(写到这里我突然发现和SpringCloud咋这么像。。。。。)其映射在Java中就是:C是一个接口,A,B都实现了该接口,B中持有A的引用,B调用方法都是通过A来实现,只不过在实现前后增加了一些操作。(...原创 2019-05-01 16:07:32 · 130 阅读 · 0 评论