
JavaSE
JavaSE
熙攘。
这个作者很懒,什么都没留下…
展开
-
Java 利用RandomAccessFile实现文件编辑
RandomAccessFile:原创 2021-07-30 08:13:20 · 1439 阅读 · 0 评论 -
Java 动态编译DynamicCompiler
动态编译的应用场景: 可以做一个浏览器端编写java代码,上传服务器编译和运行的在线评测系统。 服务器动态加载某些类文件进行编译。动态编译的两种做法: 1、通过Runtime调用javac,启动新的进程去操作 。2、通过JavaCompiler动态编译。示例:import java.io.*;import java.lang.reflect.Method;import java.net.*...原创 2021-07-26 15:47:35 · 616 阅读 · 0 评论 -
Java 反射机制初步了解
反射机制指的是可以于运行时加载、探知、使用编译期间完全未知的类。程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个 已加载的类,都能够知道这个类的所有属性和方法;对于任意一个对 象,都能够调用它的任意一个方法和属性:Class c = Class.forName("Path")加载完类之后,在堆内存中,就产生了一个Class类型的对象(一个类只有一个Class 对象),这个对象就包含了完整的类的结构信息,我们可以通过这个对象看到类的...原创 2021-07-26 11:34:54 · 128 阅读 · 0 评论 -
Java 注解Annotation
Annotation的作用:– 不是程序本身,可以对程序作出解释。(这一点,跟注释没什么区别) – 可以被其他程序(比如:编译器等)读取。(注解信息处理流程,是注解和注释的重大区别 。如果没有注解信息处理流程,则注解毫无意义)• Annotation的格式:– 注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如: @SuppressWarnings(value="unchecked")。• Annotation在哪里使用?– 可以附加在package, class, meth原创 2021-07-25 09:48:13 · 181 阅读 · 0 评论 -
Java TCP协议下聊天室的手工实现
Version.1: 目的:实现单个客户与服务器的连接。服务器:import java.io.*;import java.net.*;/* 在线聊天室:服务器 目的:实现单个客户的聊天过程 */public class chat { public static void main(String[] args) throws IOException { System.out.println("-----Server-----"); ..原创 2021-07-24 20:31:05 · 393 阅读 · 1 评论 -
Java TCP协议下Socket编程和通讯的简单实现
在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。“请求-响应”模式: 1. Socket类:发送TCP消息。 2. ServerSocket类:创建服务器并监听Socket类的连接请求。 套接字是一种进程间的数据交换机制。这些进程既可以在同一机器上,也可以在通过网络连接的不同机器上......原创 2021-07-24 19:49:52 · 1030 阅读 · 5 评论 -
Java UDP通讯的简单实现
UDP协议: 基于TCP协议可以建立稳定连接的点对点的通信。这种通信方式实时、快速、安全性高,但是很占用系统的资源。 在网络传输方式上,还有另一种基于UDP协议的通信方式,称为数据报通信方式。在这种方式中,每个数据发送单元被统一封装成数据报包的方式,发送方将数据报包发送到网络中,数据报包在网络中去寻找它的目的地。UDP通讯的实现:▪ DatagramSocket:用于发送或接收数据报包 当服务器要向客户端发送数据时,需要在服务器端产生一个DatagramSo...原创 2021-07-23 19:56:46 · 1090 阅读 · 1 评论 -
Java TCP协议和UDP协议的联系和区别
TCP协议和UDP协议是传输层的两种协议。Socket是传输层供给应用层的编程接口,所以Socket编程就分为TCP编程和UDP编程两类。 在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。 这两种传输方式都在实际的网络编程中使...原创 2021-07-23 19:36:48 · 458 阅读 · 0 评论 -
Java 简单的网络爬虫
网络爬虫简单实现 + 模拟浏览器简单步骤:1、获取URL2、下载资源注:url.openStream()可类比InputStreamimport java.io.*;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;/* 网络爬虫简单实现 + 模拟浏览器 1、获取URL 2、下载资源 */pu...原创 2021-07-23 15:27:23 · 184 阅读 · 0 评论 -
Java URL类
URL:统一资源定位器,互联网三大基石之一(http、html、url) ,用于区分、定位资源。组成:1、协议2、域名/主机名3、端口4、请求资源import java.net.MalformedURLException;import java.net.URL;public class URLTest { public static void main(String[] args) throws Ma...原创 2021-07-23 15:22:21 · 93 阅读 · 0 评论 -
Java InetAddress和InetSocketAddress
InetAddress作用:封装计算机的IP地址和DNS(没有端口信息)。 注:DNS是Domain Name System,域名系统。特点:这个类没有构造方法。如果要得到对象,只能通过静态方法:getLocalHost()、getByName()、 getAllByName()、 getAddress()、getHostName()。import java.net.InetAddress;import java.net.UnknownHostExcepti...原创 2021-07-23 15:16:38 · 233 阅读 · 0 评论 -
Java ThreadLocal线程容器
线程容器: 给线程绑定一个Object 内容,后只要线程不变,可以随时取出。 TreadLocal: 每个线程自身在本地存储中占据的的局部区域。主要方法有:get、set、initialValue注意:分析上下文、环境、起点。 构造器:哪个线程调用就属于哪个,run方法属于this线程。 InheritableThreadLocal:ThreadLocal的子类,继承上下文环境、起点的默认值initialValue。public c...原创 2021-07-22 11:06:32 · 189 阅读 · 0 评论 -
Java Timer定时调度
通过Timer和Timetask,我们可以实现定时启动某个线程。java.util.Timer 在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其它线程的。java.util.TimerTask TimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。在这种实现方式中,通过继承TimerTask使该类获得多线程的能力,...原创 2021-07-22 11:00:44 · 255 阅读 · 0 评论 -
Java 可重入锁ReenTrant
synchronized内置锁的可重入性:线程同步synchronized中内置的“锁”机制是可重入锁,即一个线程取得某对象的锁,释放后其他线程还可以使用此锁,即可以重复使用。如果某一个线程试图获取一个已经由它持有的锁时,这个请求会立刻成功并使锁的计数器加一;而当线程逐步退出同步时计数器将会递减,计数器值为0时,锁释放。若锁没有实现可重入性,多线程同步时将进入死锁状态。模拟可重入锁的实现:public class 可重入锁 { Lock lock = new Lock();原创 2021-07-22 10:54:52 · 166 阅读 · 0 评论 -
Java DCL单例设计模式
作用:保证一个对象最多只能返回一个实例。优点:提升运行效率;实现数据共享。懒汉式:对象只有被调用时才实例化,由于添加了锁,所以效率低。public class SingleTon { //由于对象需要被静态方法调用,把方法设置为static //由于对象是static,必须要设置访问权限修饰符为private ,如果是public可以直接调用对象,不执行访问入口 private static SingleTon singleton; /* pri原创 2021-07-22 09:31:45 · 265 阅读 · 0 评论 -
Java 多线程--并发协作
多线程环境下,我们经常需要不同线程间的并发和协作。在java.lang.Object类存在实现线程间消息传递(通信)的方法:上述方法都只能在同步方法或同步块中使用。生产者、消费者模式:什么是生产者? 生产者指的是负责生产数据的模块(这里模块可能是:方法、对象、线程、进程)。什么是消费者? 消费者指的是负责处理数据的模块(这里模块可能是:方法、对象、线程、进程)。什么是缓冲区? 消费者不能直接使用生产者的数据,它们之间有个“缓冲区”。生产者将生产好的...原创 2021-07-21 15:49:23 · 110 阅读 · 0 评论 -
Java 多线程--死锁及其解决方案
死锁的概念 “死锁”指的是: 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能进行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 因此, 某一个同步块需要同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题。下面案例中,“化妆线程”需要同时拥有“镜子对象”、“口红对象”才能运行同步块。那么,实际运行时,“小丫的化妆线程”拥有了“镜子对象”,“大丫的化妆线程”拥有了“口红对象”,都在互相等待对方释放资源,才能化妆。这样,两个线程...原创 2021-07-21 09:33:50 · 845 阅读 · 0 评论 -
Java 多线程--并发同步(synchronized)
并发:多个线程对同一个对象同时进行操作。此过程中若不加干预,不同线程间可能会发生冲突。多线程操作同一个对象(未实现线程同步):/* 模拟网上多人购票的情况。*/public class tickets implements Runnable { private int ticketNum=10; @Override public void run() { while(ticketNum>0){ try {原创 2021-07-20 20:49:26 · 479 阅读 · 0 评论 -
Java 守护线程与用户线程
线程创建时默认为用户线程。守护线程/后台线程/精灵线程:将线程设置为后台线程:public final void setDaemon(boolean on)注意:true为守护线程,false为用户线程,默认为false。要设置线程为守护线程必须在启动线程之前。可使用isDaemon()判断线程是否后台线程如果所有的前台线程都死亡,后台线程也会自动死亡。主线程默认是用户线程,用户线程的子线程默认是用户线程,守护线程的子线程默认是守护线程。/* 用户线程:.原创 2021-07-20 11:10:26 · 290 阅读 · 0 评论 -
Java 线程状态及其控制方法
线程状态:▪ 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。▪ 就绪状态(Runnable) 处于就绪状态的线程已经具备了运行条件,但是还没有被分配到CPU,处于“线程就绪队列”,等待系统为其分配CPU。就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。有4中原因...原创 2021-07-20 10:42:58 · 344 阅读 · 0 评论 -
Java 线程优先级
1. 处于就绪状态的线程,会进入“就绪队列”等待JVM来挑选。2. 线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5(默认)。Thread.MIN_PRIORITY = 1Thread.MAX_PRIORITY = 10Thread.NORM_PRIORITY = 5设置优先级:public final void setPriority(int newPriority)获取优先级:public final int getPriority()注意:优先.原创 2021-07-20 10:17:02 · 228 阅读 · 0 评论 -
Java lambda表达式简化创建过程
lambda表达式可用来简化线程的创建。/* lambda表达式简化线程创建 */public class lambdaThread { public static void main(String[] args) { //Thread //匿名内部类,需要父类或接口 new Thread(new Runnable() { @Override public void run() {原创 2021-07-19 17:36:00 · 248 阅读 · 0 评论 -
Java 多线程--Thread常用类及其静态代理理念
静态代理:类似于游戏mod,多用于对原有对象的逻辑扩充。通过让代理类持有目的对象,然后令原有对象调用代理类方法,以期在原有对象的基础上完成更多业务逻辑。Thread就是一种静态代理。package A;/** * 静态代理 * 公共接口: * 1、真实角色 * 2、代理角色 */public class a { public static void main(String[] args) { new WeddingCompany(new You()).h.原创 2021-07-19 16:03:12 · 174 阅读 · 0 评论 -
Java 多线程--拷贝
使用多线程实现文件拷贝。注意:利用了FileUtils中的封装拷贝。import SAMPLE.IO流.FileUtils;import java.io.*;/* 实现多线程拷贝。 */public class 多线程拷贝 implements Runnable { private String srcName; private String destName; public 多线程拷贝(String srcName, String destName) {原创 2021-07-19 10:00:51 · 288 阅读 · 0 评论 -
Java 线程的启动和创建
Java共有三种方法来创建和启动线程:一、继承Thread类: 1、创建线程并重写run()方法。 2、创建子类对象并通过start()方法启动线程。二、实现Runnable接口: 1、创建线程并重写run()方法。 2、创建Thread对象,把实现了Runnable接口的对象作为参数传入,并通过Thread对象的start方法启动。三、实现Callable接口,不作了解。注意:1、新建的线程不会自动开始运行,必须通...原创 2021-07-19 09:12:40 · 645 阅读 · 0 评论 -
Java RandomAccessFile类(随机读取)
可利用RandomAccessFile实现对文件指定部分的操作。import java.io.*;/* 利用RandomAccessFile实现对文件指定部分的操作。 */public class RandomAccessFile类 { public static void main(String[] args) throws IOException { RandomAccessFile raf = new RandomAccessFile(new File(...原创 2021-07-18 20:45:28 · 263 阅读 · 0 评论 -
Java 处理流--打印流(PrintWriter和PrintStream)
在整个IO流中,打印流是输出信息最方便的类。PrintStream和Printwriter:public PrintStream(OutputStream out, boolean autoFlush)public PrintWriter(OutputStream out, boolean autoFlush)System.out:public final static PrintStream out = null;要点:1.提供了一系列重载的print和println方.原创 2021-07-18 19:52:13 · 241 阅读 · 0 评论 -
Java 处理流--对象流(ObjectInputStream和ObjectOutStream)
对象流——归并对象处理流反序列化 输入流:ObjectInputStream()、readObject(()序列化 输出流:ObjectOutputStream 、writeObject()要点:1.先序列化后反序列化;读取顺序必须与写出一致。2.不是所有的对象都可以序列化, 必须具有java.io.Serializable接口;不是所有的属性都需要序列化,用transient修饰的属性不会被序列化。3.反序列化,即读取时需判断对象类型。...原创 2021-07-18 17:39:29 · 387 阅读 · 0 评论 -
Java 处理流--数据流(DataInputStream和DataOutputStream)
数据流有两个类: DataInputStream和DataOutputStream分别套接在InputStream和OutputStream上,用于读取和写入保留基本数据类型的数据。import java.io.*;/*数据流: DataInputStream、DataOutputStream 可在数据传递时保留其类型,读取时必须按写出的顺序。 */public class 数据流 { public static void main(Strin...原创 2021-07-18 15:57:56 · 1375 阅读 · 0 评论 -
Java 处理流概述(简单模拟数据流)
处理流:是对一个已存在的流进行处理和封装,通过所封装的流的功能调用实现对数据的操作。如Buffered缓冲流。处理流的构造方法总是要带一个其他的流对象做参数,通俗的说就是包在别的流外面的流,类似于包在管道外面的管道。作用:增强功能、提供性能,基于节点流进行操作。处理流的实现思想:/* 简单模拟处理流的操作过程。 */public class helloworld { public static void main(String[] args) { .原创 2021-07-18 15:17:48 · 974 阅读 · 0 评论 -
Java 处理流--转换流(InputStreamReader和OutputStreamWriter)
转换流的两种形式: 1.InputStreamReader:将字节流转换成字符流。public OutputStreamWriter(OutputStream out, String charsetName) 2.OutputStreamWriter:将字符流转换成字节流。public InputStreamReader(InputStream in, String charsetName)当无法直接获取源文件,只能取得源文件的字节流形式时,可以使用转换流以避免乱码...原创 2021-07-18 10:37:59 · 854 阅读 · 0 评论 -
Java 处理流--缓冲流(Buffered)
处理流:作用:增强功能、提供性能,节点流之上1.缓冲流输入流:BufferedInputStream(字节) BufferedReader(字符)输出流:BufferedOutputStream(字节) BufferedWriter(字符)2、转换流: 字节流 转为字符流 处理乱码(编码集、解码集)1)、编码与解码概念编码: 字符 ---编码字符集>二进制解码:二进制 --解码字符集-> 字符2)、乱码:(1)编码与解码的字符集不统一(2)字节...原创 2021-07-18 08:45:39 · 1656 阅读 · 0 评论 -
Java File工具类
数据的拷贝和流的资源释放作为使用频率极高的两个过程,将其封装以便于使用。Closeable:InputStream和OutputStream共有的接口,可用于高效地实现对流的封装。package SAMPLE.IO流;import java.io.*;/* 1、封装拷贝。 2、封装释放资源*/public class FileUtils { public static void main(String[] args) { //文件到文件的拷贝:原创 2021-07-18 08:32:26 · 491 阅读 · 0 评论 -
Java 节点流--对接流
package SAMPLE.IO流;import java.io.*;/* 实现数据在流、系统文件、内存之间的传递。*/public class 对接流 { public static void main(String[] args) { byte[] datas = FileToByteArray("C:\\Users\\kvnoe\\Desktop\\Jcase\\justice.jpg"); ByteArrayToFile(datas,"C:.原创 2021-07-17 21:17:21 · 180 阅读 · 0 评论 -
Java 字节数组流
字节数组流,即向内存数组读/取数据,实现数据在流与流之间的传递。与字节流别无二致。 ByteInputStream: package SAMPLE.IO流;import java.io.*;/*文件 字节数组输入流 1、确定源:字节数组,不要太大 2、选择流 文件输入流:ByteArrayInputStream 3、操作 (没有“文件不存在”异常) 4、释放资源,可以不处理 */public class ByteArrayIn字节数组流 { publi原创 2021-07-17 21:05:39 · 926 阅读 · 0 评论 -
Java 字符流
字符流只能处理纯文本文件。 Reader中的FileReader: package SAMPLE.IO流;import java.io.*;/*文件 字符输入流 1、确定源文件 2、选择流 文件输入流:FileReader 3、操作(读取/分段读取) 4、释放资源 */public class Reader字符流 { public static void main(String[] args) { //选择源文件 Fi...原创 2021-07-17 11:27:32 · 75 阅读 · 0 评论 -
Java 字节流
字节流可以处理一切文件,主要介绍常用两类: InputStream中的FileInputStream: 从文件读取数据至流内。package SAMPLE.IO流;import java.io.*;/*文件 字节输入流 1、确定源文件 2、选择流 文件输入流:FileInputStream 3、操作(读取/分段读取) 4、释放资源 */public class InputStream字节流 { public static void...原创 2021-07-17 10:35:31 · 144 阅读 · 0 评论 -
file类常用方法
Iterator接口: 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现Iterator接口的对象Iterator对象称作为迭代器,用以方便的对容器内元素的遍历操作,Iterator接口定义了如下方法: boolean hashNext();//判断是否有元素没有被遍历 Object next();//返回游标当前位置的元素并将游标移动到下一个位置 void remove();//删除游标左边的元素,在执行完next之后该操作只...原创 2021-07-15 21:01:24 · 193 阅读 · 0 评论 -
Iterator/迭代器接口
**Iterator接口**:可遍历List、Map、Set所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现Iterator接口的对象Iterator对象称作为迭代器,用以方便的对容器内元素的遍历操作,Iterator接口定义了如下方法:boolean hashNext();//判断是否有元素没有被遍历Object next();//返回游标当前位置的元素并将游标移动到下一个位置void remove();//删除游标左边的元素,在执行完next之后该操原创 2021-07-15 20:55:56 · 139 阅读 · 0 评论 -
自定义comparable
package SAMPLE;public class 自定义比较 { //类似二叉堆pair等据有多个元素的容器,当排序时须确定一个元素为参照} class compare implements Comparable<compare>{ int id; String name; int salary; @Override public int compareTo(compare o) {//规则:负数:小于,0:等于,正数:大于原创 2021-07-13 16:36:23 · 135 阅读 · 0 评论