
JavaSE
作为目前世界上使用排名第一的语言,Java上手是很容易的,这个专栏是方便交流以及java极速入门的
云疏不知数
一个人知道自己为了什么而活,他就能够忍受任何一种生活----尼采
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JavaSE急速入门
?utm_source=appjava入门(数据类型,运算符和输入输出)1~22 1.基础知识 2.第一个java小程序(用eclipse) 2.第一个java小程序(用文本编辑器) 3.注释 4.标识符 5.关键字或保留字 6.变量的本质 7.变量分类 8.常量和final 9.基本数据类型(primitive data type) 10.整形变量和常量 11.浮点型变量和常量 12.字符型变量和常量 13.boolean类型变量和常量 14.运算符(operator).原创 2020-07-19 11:46:44 · 468 阅读 · 2 评论 -
Eclipse2020最新高级教程(常用)
调试方式添加警告忽略器 public E get(int index) { return (E)elementData[index]; }E是泛型类型,以上代码会警告warnings: unchecked cast from Object to E方法:添加警告忽略语句(因为代码并没有逻辑错误而且是编译器太严格的原因)添加如下语句:@SuppressWarnings("unchecked")在警告位置前面 @SuppressWarnings("unchecked").原创 2020-09-17 21:22:14 · 1575 阅读 · 0 评论 -
安装eclipse
安装eclipse下载eclipse地址安装选项第一个选择jdk安装路径第二个选择eclipse安装路径原创 2020-06-22 16:41:13 · 348 阅读 · 0 评论 -
jdk13安装及环境配置教程
jdk.exeOracle JDK13:下载链接OpenJDK13:下载链接创建一个路径以便安装和配置环境变量(也可以在后面安装时使用默认路径)如上自己建立的安装路径就是:C:\Java\jdk13双击安装安装时选择自己创建的路径,没有用自己的路径就使用默认路径(配置环境变量时安装在哪个路径就需要提前记住)配置环境变量将第二部安装的路径拿过来,比如使用第一步自己创建的路径的:C:\Java\jdk13,如图在系统变量中添加JAVA_HOME的环境变量如图变量并确定接..原创 2020-06-22 16:43:26 · 2732 阅读 · 0 评论 -
186.手写服务器之封装分发器
一个请求就创建一个线程,线程会根据请求的资源不同返回不同的资源增加分发器/* * 分发器 */import java.io.IOException;import java.net.Socket;public class Dispatcher implements Runnable{ private Socket clientSocket; private request re; private response res; public Dispatcher() { } .原创 2020-10-26 12:28:13 · 307 阅读 · 0 评论 -
185.手写服务器之整合xmlSAX流解析与动态反射
xml配置文件和反射动态响应浏览器请求不同的资源,服务器便会做出不同的响应,增加新的响应也极其方便只需要增加新的servlet实现类,并配置web.xml文件信息,极大的降低了代码的耦合度,降低了代码的维护更新成本Entity类用于存储servlet-class和servlet-name 1/* * Entity类用于存储以下xml解析的数据: * <servlet> * <servlet-name>login</servlet-name> * <s.原创 2020-10-26 10:48:55 · 339 阅读 · 0 评论 -
184.手写服务器之加入servlet
加入servlet解耦业务代码使用 上一篇博客 的封装响应操作类response和之前的封装请求操作类request请求操作request类import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.Socket;import java.util.ArrayList;import java.util.Arrays;impo.原创 2020-10-26 10:45:51 · 201 阅读 · 0 评论 -
183.手写服务器之封装响应操作
封装响应操作类/* * 封装响应信息 * 1、内容可动态添加 * 3、关注状态码,拼接好响应的协议信息 */import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.Socket;import java.util.Date;public class response {.原创 2020-10-26 10:44:28 · 254 阅读 · 0 评论 -
182.手写服务器之请求参数解析处理
目标:将获取的参数封装成map结构给request增加存储参数的map数据成员,将请求参数存储到容器中,并增加参数值支持中文的函数import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.Socket;import java.util.ArrayList;import java.util.Arrays;import jav.原创 2020-10-24 20:40:00 · 366 阅读 · 0 评论 -
181.手写服务器之分解请求
封装一个request类,用于接收和处理请求信息import java.io.IOException;import java.io.InputStream;import java.net.Socket;/* * 封装请求协议:获取method uri以及请求参数 */public class request { //协议信息 private String requestInfo; //请求方式 private String method; //请求url private Str.原创 2020-10-24 20:39:18 · 277 阅读 · 0 评论 -
180.http协议
HTTP的下层传输层是TCP协议,是建立连接的安全协议首先实现一个服务器,用于获取请求协议import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;/* * 使用ServerSocket建立与浏览器的连接,获取请求协议 */public class server01 { private ServerSocket serverSock.原创 2020-10-24 20:38:28 · 587 阅读 · 0 评论 -
179.有趣的前端
对于BS结构的网络应用,前端必然会接触到html 1 javascript css,还有不得不提的网络应用层传输协议:HTTPhtml表单的使用细节:post:提交get:默认获取,也可以提交基于http协议不同,post请求参数不可见安全,get请求参数可见action:请求web服务器的资源name:请求服务器就必须存在,否则数据不能提交id:前端用于区分标签使用的超文本传输协议 2:是互联网上用用最为广泛的协议,所有的www文件都必须遵守这个协议请求协议1、请求行:方法(GET/.原创 2020-10-24 20:37:58 · 286 阅读 · 0 评论 -
178.XML反射webXML
在上一篇博客 XML解析webXML 的基础上,我们增加反射,通过url-pattern获取servlet-name然后通过servlet-name获取servlet-class,servlet-class就是类的路径,就可以反射创建对象实例测试使用的web.xml<?xml version="1.0" encoding="UTF-8"?><web-app><servlet><servlet-name>login</servlet-name&.原创 2020-10-20 11:40:45 · 232 阅读 · 0 评论 -
177.XML解析webXML
可以实现解析服务器的配置文件,加入反射获取对象我们先实现多对象解析先准备好服务器的配置文件<?xml version="1.0" encoding="UTF-8"?><web-app><servlet><servlet-name>login</servlet-name><servlet-class>com.shsxt.LoginSerlet</servlet-class></servlet>&.原创 2020-10-18 16:19:16 · 277 阅读 · 0 评论 -
176.XML数据处理
先定义一个person类由于接收解析的数据public class person { private String name; private int age; public person() { } public person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "person [name=.原创 2020-10-18 14:27:50 · 233 阅读 · 2 评论 -
175.XML解析
XML1XML:可扩展标记语言,作为数据的一种存储格式或者用于存储数据的参数,程序解析此配置文件,就可以达到不修改代码就能更改程序功能的目的SAX解析熟悉使用流程:获取解析工厂从解析工厂获取解析器加载文档Document注册处理器,需要继承DefaultHandler实现一个类编写处理器代码演示import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;impor.原创 2020-10-18 03:53:46 · 290 阅读 · 2 评论 -
174.反射
new一个对象需要虚拟机在字节码存储区或类加载器中丢一个字节码信息即类的模子,有了模子才可以正常new对象,在运行期由使用者准备这个模子,这是反射第一层含义反射Reflection:把Java类中的各种结构(方法、属性、构造器、类名)映射成一个个的Java对象 1。利用反射技术可以对一个类进行剖析,反射是框架设计的灵魂。Class类java.lang.Class查看APi: T - the type of the class modeled by this Class object意思:T是通过类.原创 2020-10-18 03:53:15 · 263 阅读 · 1 评论 -
173.TCP写可以私聊的聊天室
首先规定私聊的消息格式:@要私聊的用户名:私聊的内容在广播消息之前判断消息首字符是不是@,是@说明是私聊就对私聊的目标用户名和私聊的消息内容进行分割,然后匹配指定用户进行发送,也就是对 上一篇博客 末尾实现群聊功能的sendOthers函数就行改造便可实现私聊功能实现私聊功能的sendOthers函数 //发送给所有其它客户端 private void sendOthers(String dataString, boolean isSys) { if(dataString.s.原创 2020-10-17 23:41:48 · 402 阅读 · 0 评论 -
172.用TCP手写群聊聊天室
首先写一个服务器和客户端服务器import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/* * 在线聊天室:服务端 */public class chat { public static void main(String[] args) throws IO.原创 2020-10-17 23:04:22 · 303 阅读 · 0 评论 -
171.TCP使用细节
单用户登录请求响应式CS结构简单测试代码:服务器import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;/* * 模拟登录 * 1.指定端口,使用ServerSocket创建服务器 * 2.阻塞、等待连接的建立 * 3.操作 * 4.关闭流和Socket对.原创 2020-10-16 22:32:53 · 346 阅读 · 1 评论 -
170.TCP
TCP(Transfer Control Protocol)是面向连接的网络协议TCP编程通讯原理,首先服务器创建ServerSocket,在指定端口监听并处理请求客户端创建Socket,向服务器发送请求ServerSocketjava.net.ServerSocket这个类实现了服务器套接字。服务器套接字等待来自网络的请求。它基于该请求执行某些操作,然后可能向请求者返回结果。服务器套接字的实际工作由SocketImpl类的一个实例进行。一个应用程序可以更改创建套接字实现的套接字工厂,以配.原创 2020-10-16 20:05:04 · 343 阅读 · 0 评论 -
169.UDP使用细节
学习重点还是在熟练使用Udp上,对于文件流的的知识前面的博客中有详细介绍传输基本类型, 使用数据流DataOutputStream和DataInputStream客户端import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.DatagramPacket;.原创 2020-10-16 02:28:32 · 251 阅读 · 1 评论 -
168.UDP
使用UDP协议的Socket编程需要用到DatagramPacket数据报包类和DatagramSocket套接字DatagramPacket数据报包类构造方法ConstructorDescriptionDatagramPacket(byte[] buf, int length)Constructs a DatagramPacket for receiving packets of length length.DatagramPacket(byte[] buf, int .原创 2020-10-12 23:48:17 · 417 阅读 · 0 评论 -
167.传输协议(传输层)
TCP基于TCP协议可以建立稳定连接的点对点的通信。这种通信方式实时、快速、安全性高,但是很占用系统的资源。TCP(Transfer Control Protocol)是面向连接的,所谓面向连接,就是当计算机双方通信时必需经过先建立连接,然后传送数据,最后拆除连接三个过程。TCP在建立连接时又分三步走:第一步,是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号。第二步,服务器在收到客户端的SYN报文后.原创 2020-10-12 22:46:13 · 295 阅读 · 0 评论 -
166.URL基本用法
URI: Universa1 Resource Identifier统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。URL:Universal Resource Locator统一资源定位符,一种定位资源的主要访问机制的字符串,一个标准的URL必须包括:protocol、host、port、path、parameter、anchor。URN:universal Resource Name统一资源名称,通过特定命名空间中的唯—名称或ID来标识资源。在www上,每一信息资源都有统一且唯一的地址.原创 2020-10-12 19:08:57 · 876 阅读 · 0 评论 -
165.端口
端口是计算机上虚拟的东西,TCP/UPD分别有2的16次方个端口,端口取值范围是0~655351公认端口 2:0~1023注册端口:1024-49151,分配给用户进程或应用程序动态/私有端口:49152-65535windows命令提示符查看所有端口:netstat -ano查看指定端口:netstat -ano|findstr “808”查看指定进程:tasklist|findstr “808”查看具体程序:使用任务管理器查看PIDInetSocketAddres.原创 2020-10-11 23:31:43 · 599 阅读 · 0 评论 -
164.IP
InetAddress 1 2InetAddress 类没有构造函数,说明是由静态方法返回对象引用的,大胆猜测是单例模式 3InetAddress的以下静态成员方法是返回对象引用Method Modifier and TypeDescriptionstatic InetAddress[] getAllByName(String host)Given the name of a host, returns an array of its IP addresses, based .原创 2020-10-11 20:52:13 · 301 阅读 · 0 评论 -
163.网络编程开篇之基本概念
同一台主机上程序是通过端口太区分各自的数据网络编程的程序布局方式有BS和CS,BS是网络编程的一种,它是可以通过公网交互的网络通信协议国际标准化组织(ISO,即International Organization for Standardization)定义了网络通信协议的基本框架,被称为OSI(Open System Interconnect,即开放系统互联)模型。OSI网络通信协议模型,是一个参考模型,实际应用中不需要这样复杂的定义,TCP/IP协议是事实上的标准。TCP/IP协议参考了OS.原创 2020-10-11 19:51:18 · 418 阅读 · 0 评论 -
162.高级主题之CAS,原子操作
锁分为两类:悲观锁:synchronized是独占锁即悲观锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁:每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。Compare and Swap比较并交换:乐观锁的实现:有三个值:一个当前内存值V、旧的预期值A、将更新的值B。先获取到内存当中当前的内存值V,再将内存值V和原值A作比较,要是相等就修改为要修改的值B并返回true,否则什么都不做,并返回false;CAS是一组原子操作,.原创 2020-10-06 18:06:56 · 236 阅读 · 0 评论 -
161.高级主题之可重入锁
锁作为并发共享数据保证一致性的工具,大多数内置锁都是可重入的,也就是说,如果某个线程试图获取一个已经由它自己持有的锁时,那么这个请求会立刻成功,并且会将这个锁的计数值加1,而当线程退出同步代码块时,计数器将会递减,当计数值等于0时,锁释放。如果没有可重入锁的支持,在第二次企图获得锁时将会进入死锁状态。可重入锁随处可见:可重入锁代码演示public class reenterLock { public void test() { synchronized (this) { while.原创 2020-10-06 17:27:16 · 191 阅读 · 0 评论 -
160.高级主题之ThreadLocal
在多线程环境下去保证成员变量的安全,常用的方法,就是局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程。ThreadLocal能够放一个线程级别的变量,其本身能够被多个线程共享使用,并且又能够达到线程安全的目的。说白了,ThreadLocal就是想·在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部get/set/initialValue方法。JDK建议ThreadLocal定义为private staticThreadLocal最常用的地方就是为每个线程绑定一个.原创 2020-10-06 02:24:52 · 357 阅读 · 0 评论 -
159.高级主题之DCL单例模式
单例模式 1的体现:windows系统的任务资源管理器、Web开发的计数器、log4j的日志配置文件、数据库的连接池、序列号的生成等等DCL 2典型测试代码以下借助懒汉型的单例模式,通过实现两个返回单例引用的公共静态方法做对照试验,getInstanceUDCL:没有同步以及避免指令重排、getInstance:synchronized线程同步,doublechecking,volatile避免指令重排package zy.thread.others;/* * 单例模式:懒汉 * 多线程.原创 2020-10-06 01:11:30 · 358 阅读 · 0 评论 -
158.高级主题之volitale
volatile保证线程间变量的可见性,简单地说就是当线程A对变量X进行了修改后,在线程A后面执行的其他线程能看到变量X的变动,更详细地说是要符合以下两个规则:线程对变量进行修改之后,要立刻回写到主内存。线程对变量读取的时候,要从主内存中读,而不是缓存。各线程的工作内存间彼此独立、互不可见,在线程启动的时候,虚拟机为每个内存分配一块工作内存,不仅包含了线程内部定义的局部变量,也包含了线程所需要使用的共享变量(非线程内构造的对象)的副本,即为了提高执行效率。volatile是不错的机制,但是vo.原创 2020-10-06 01:10:58 · 249 阅读 · 0 评论 -
157.高级主题之HappenBefore(指令重排)
代码并不总是按照代码逻辑顺序执行,因为CPU和编译器会尝试重排指令使得指令执行速度更快举个例子,代码到机器指令的过程 1subTotal = price + fee; ADD R_1,R_2 -> R_3total += subTotal; ADD R_4,R_3 -> R_4isDown = true; MOVE 1 -> R_5计算及寄存器赋值的过程price -->R1fee -->.原创 2020-10-06 01:02:16 · 283 阅读 · 0 评论 -
156.QUARTZ任务调度框架
QUARTZ 1四大组成部分Scheduler — 调度器,控制所有调度Trigger — 触发条件,采用DSL模式JobDetail — 需要处理的JOBJob — 执行逻辑DSL:Domain-specific language,领域特定语言针对一个特定的领域,具有受限表达性的一种计算机程序语言,即领域专用语言,声明式编程:Method Chaining 方法链、Fluent Style 流畅风格、builder模式构建器Nested Functions 嵌套函数Lambda .原创 2020-10-05 12:49:10 · 359 阅读 · 0 评论 -
155.高级主题之定时调度
任务定时调度在多线程中有重要的地位和作用通过Timer和Timetask,我们可以实现定时启动某个线程java.util.Timer在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其它线程的。constructorConstructorDescriptionTimer()Creates a new timer.Timer(boolean isDaemon).原创 2020-10-05 01:18:28 · 252 阅读 · 0 评论 -
154.信号灯法
管程法的特点是,生产者和消费者之间是借助标志位达到线程同步的写一个影院电影上线和观众等待电源上线的多线程例子/* * 协作模式:生产者消费者实现方式2:信号灯法 */public class coTest02 { public static void main(String[] args) { danceHall dh = new danceHall(); new player(dh).start(); new auidence(dh).start(); }}//生产者 .原创 2020-10-05 00:43:36 · 282 阅读 · 0 评论 -
153.管程法
管程法的特点是,生产者和消费者 1中间有一个缓冲区 2生产者和消费者之间,生产者生产了消费者才有东西消费,他们之间的控制都来自于Object类的成员方法 3wait阻塞会释放锁首先引入一个生产者消费者模型/* * 协作模式:生产者消费者实现方式1:管程法 */public class coTest01 { public static void main(String[] args) { synContainer container = new synContainer(); .原创 2020-10-05 00:02:30 · 569 阅读 · 0 评论 -
152.生产者、消费者模式(线程并发协作)
多线程环境下,我们经常需要多个线程的并发和协作。这个时候,就需要了解一个重要的多线程并发协作模型“生产者/消费者模式”。生产者:生产者指的是负责生产数据的模块(这里模块可能是:方法、对象、线程、进程)。消费者:消费者指的是负责处理数据的模块(这里模块可能是:方法、对象、线程、进程)。缓冲区:消费者不能直接使用生产者的数据,它们之间有个“缓冲区”。生产者将生产好的数据放入“缓冲区”,消费者从“缓冲区”拿要处理的数据。缓冲区是实现并发的核心,缓冲区的设置有3个好处:实现线程的并发协作有了缓.原创 2020-10-04 17:32:23 · 405 阅读 · 0 评论 -
151.死锁
死锁”指的是:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。因此, 某一个同步块需要同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。下面案例中,“化妆线程”需要同时拥有“镜子对象”、“口红对象”才能运行同步块。那么,实际运行时,“小丫的化妆线程”拥有了“镜子对象”,“大丫的化妆线程”拥有了“口红对象”,都在互相等待对方释放资源,才能化妆。这样,两个线程就形成了互相等待,无法继续运行的“死锁状态”。cla.原创 2020-10-03 23:28:43 · 238 阅读 · 0 评论