java基础
海波booy
爱学习、爱生活、爱工作
展开
-
java中JVM与类加载器
JVM虚拟机介绍:Sun HotSpot VM这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一-家名为"Longview Technologies"的小公司设计的:甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM,而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机,Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technolo原创 2020-05-22 16:24:36 · 153 阅读 · 0 评论 -
实现动态数组自动扩容增删改查
动态数组指的是一个数组的长度可以动态进行扩充,目的是在数组元素存储满后可以继续存储,以达到“无限”长度。解决方法:1、重新创建一个数组,长度在原数组基础上扩充,放弃原数组2、把原数组中的元素复制到新数组实现动态数组的步骤:1、在添加元素时判断数组是否有空余空间2、如果有空余空间,则添加元素,完毕。3、如果没有空余空间,转到第4步4、确定新数组的扩充算法5、创建新数组根据扩充后的长度6、把原数组中的数据复制中新数组中package com.booy;import java.util.原创 2020-05-21 20:01:19 · 489 阅读 · 0 评论 -
随机不重复数小案例:0-m中取n个不重复数
m+1个数中选n个最优是取n次,每次生成随机数前排除已被选了的数(把已选的数和数组最后一个数交换位置,下次在“随机数组的长度-已选数的次数”中生成随机数)。0-m(不包含m)中取n个不重复数,n<=m:package com.booy;import java.util.Random;//从0-m(不包含m)中随机生成不重复的n个数,n<=m+1public class RandomDemo { //从0-99中随机生成10个不重复数 public static voi原创 2020-05-21 17:54:10 · 367 阅读 · 1 评论 -
java设计模式:观察者模式
观察者模式原理:观察者模式定义:简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象工这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。观察者模式实现Subject(被观察的对象接口)规定ConcreteSubject的统一接口;每个Subject可以有多个Observer;ConcreteSubject(具体被观察对象)维护对所有具体观察者的引用的列表;状态发生变化时会发送通知给所有注册的观察者。Ob原创 2020-05-18 13:43:16 · 144 阅读 · 0 评论 -
javaGUI介绍简单示例与接口回调
GUl编程( Graphic User Interface,图形用户接口)GUI的各种元素,如:容器、按钮、文本框等1、Frame类2、Button类3、Panel类5、Toolkit类5、布局管理器6、基本组件事件处理:**事件(Event)????*用户对组件的一个操作,称之为一个事件**事件源(Event source)????*产生事件的对象**事件处理方法(Event handler)????*能够接收、解析和处理事件类对象、实现和用户交互的方法,事件监听器。为简化编程,原创 2020-05-18 11:16:06 · 253 阅读 · 0 评论 -
JsonReader解析json应用
JSON(JavaScript Object Notation)是一 种轻量级的数据交换格式。JSON官方:http://www.json.orgJSON数据格式的特点JSON建构于两种结构:1、“名称/值”对的集合2.、 值的有序列表(数组)JSON表示名称/值对的方式: { “firstName”: “vince”, “lastName’”." ma", “email”:“finally_ _m@ foxmail.com” }一个大括号代表一个对象,属性要用双引号,属性值字符串用双引号,整数原创 2020-05-17 20:50:25 · 2086 阅读 · 0 评论 -
java中XMLEncoder与XMLDecoder及xStream工具使用
根据对象生成XML文档.使用Java提供的java.beans.XMLEncoder和java.beans.XMLDecoder类。这是JDK 1.4以后才出现的类步骤:(1)实例化XML编码器XMLEncoder xmlEncoder = new XML Encoder(new BufferedOutputStream(newFileOutputStream(new File(“a.xm)”)));(2)输出对象(3)关闭代码示例:package com.booy;import c原创 2020-05-17 17:09:34 · 1414 阅读 · 0 评论 -
java中使用JDOM与DOM4J解析XML
JDOM解析XMLJDOM是两位著名的Java开发人员兼作者,Brett Mclaughlin和Jason Hunter的创作成果,2000年初在类似于Apache协议的许可下,JDOM作为一个开放源代码项目正式开始研发了。JDOM简化了与XML的交互并且比使用DOM实现更快,JDOM与DOM主要有两方面不同。首先,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。下载地址:原创 2020-05-17 15:58:34 · 202 阅读 · 0 评论 -
java使用DOM解析XML文件
JAVA解析XML通常有两种方式:DOM和SAXDOM: Document Object Model (文档对象模型)DOM的特性:定义一组Java接口,基于对象,与语言和平台无关将XML文档表示为树,在内存中解析和存储XML文档,允许随机访问文档的不同部分。DOM解析XMLDOM的优点,由于树在内存中是持久的,因此可以修改后更新。它还可以在任何时候在树中上下导航,API使用起来也较简单。解析步骤:1、创建解析器工厂对象DocumentBuilderFactory builder = Docu原创 2020-05-17 13:36:31 · 248 阅读 · 0 评论 -
java使用SAX解析XML文件
XML (Extensible Markup Language可扩展标记语言),XML是一个以文本来描述数据的文档。XML技术的用途:(1)充当显示数据(以XML充当显示层)(2)存储数据(存储层)的功能(3)以XML描述数据,并在联系服务器与系统的其余部分之间传递。从某种角度讲,XML是数据封装和消息传递技术。SAX解析XMLSAX是Simple API for XML的缩写SAX是读取和操作XML数据更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才原创 2020-05-16 21:45:00 · 206 阅读 · 0 评论 -
Annotation注解
JDK1.5开始,Java增加了对元数据(即类的组成单元数据)的支持,也就是( Annotation)注解,他是代码里做的特殊标记,这些标记可以在编译,类加载,运行时在不改变原有逻辑的情况下,被读取,并执行相应的处理,通过使用Annotation,程序员可以在源文件中嵌入一些补充的信息。代码分析工具,开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。Annotation类似于修饰符一样被使用, 可以用于包,类,构造方法,方法,成员变量,参数,局部变量的声明。注意:Annotation原创 2020-05-16 21:02:27 · 130 阅读 · 0 评论 -
java枚举了解认识
枚举就是要让某个类型的变量的取值只能为若千个固定值中的一个,否则编译器就会报错,枚举可以让编译器在编译时就可以控制源程序赋给的非法值,使用普通变量的方式在开发阶段无法实现这一目标。在JDK 1.5之后,使用关键字enum定义一种新的类型,称为枚举类型。在JDK 1.5之后,对于Set和Map接口而言又增加了两个新的子类: EnumSet、 EnumMap两 个类。带构造方法的枚举public enum Color { RED(10),BLUE(10); private Color() {} p原创 2020-05-16 19:48:31 · 123 阅读 · 0 评论 -
正则表达式语法与使用
正则表达式(Regular Expressiqn)正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。则表达式通常被用来检索、替换那些符合某个模式的文本java.util.regex包中提供以下两个类对正则表达式的支持:Matcher类通过解释Pattern对character sequence执行匹配操作的引擎。Pattern类正则表达式的编译表示形式。public final class Pattern extends Objectimplements Serializa原创 2020-05-16 18:52:02 · 219 阅读 · 0 评论 -
java泛型作用与使用
List list = new ArrayList();list.add("vince"); list.add(10);listadd(new Person();listadd(obj);List中可以添加任意类型,因为参数是0bject, 这样一个我们在遍历这个集合时:for(int i=(istsizi(;++{I//此处需要判断元素的类型,才能执行不同的操作以上操作主要存在两个问题:1.当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类原创 2020-05-16 16:51:35 · 143 阅读 · 0 评论 -
java简单实现可配置的AOP框架
AOP的概念:Aspect Oriented Progr amming (面向切面编程)可配置AOP框架实现AOP使用场景AOP用来封装横切关注点,具体可以在下面的场景中使用:权限缓存错误处理调试记录跟踪持久化同步事务等等。代码示例:通过动态代理来生成代理对象,通过反射内省获取实现对象装配类清单测试类package com.aop;import org.junit.jupiter.api.Test;import java.io.InputStream;publ原创 2020-05-16 15:15:47 · 176 阅读 · 0 评论 -
java内省基本机制与使用
基本概念:内省(Introspector)是Java语言对Bean类属性、事件的一种缺省(默认)处理方法。例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。通过getName/setName来访问name属性,这就是默认的规则。Introspector相关API1、Introspector类 :Introspector类为通过工具学习有关受目标Java Bean支持的属性、事件和方法的知识提供了一个标准方法。static BeanInfo getBe原创 2020-05-16 11:22:02 · 170 阅读 · 0 评论 -
JavaBean工具的简单使用
什么是JavaBean?Bean理解为组件意思,JavaBean就是Java组件, 在广泛的理解就是一个类,对于组件来说,关键在于要具有“能够被IDE构建工具侦测其属性和事件”的能力,通常在Java中。一个JavaBean要具备这样的命名规则:1、对于一个名称为xxx的属性,通常你要写两个方法: getXxx()和setXx()。 任何浏览这些方法的工具,都会把get或set后面的第一个 字母自动转换为小写。2、对于布尔型属性,可以使用以上get和set的方式, 不过也可以把get替换成is。3、原创 2020-05-15 21:56:57 · 185 阅读 · 0 评论 -
java设计模式:动态代理模式
所谓动态代理,即通过代理类: Proxy的代理, 接口和实现类之间可以不直接发生联系,而可以在运行期( Runtime)实现动态关联。Ijava动态代理主要是使用java.lang.reflect包中的两个类。InvocationHandler类public Object invoke(Object obj,Method method,Object[] obs)其中第一个参数obj指的是代理类,method是被代理的方法,obs是指被代理的方法的参数组。此方法由代理类来实现。Proxy类prot原创 2020-05-15 21:04:57 · 144 阅读 · 0 评论 -
java反射基本概念与应用
反射(Reflection)反射可以通过对象获得对象的类信息Class类是一切的反射根源。Class类表示什么?很多的人–可以定义一个Person类(有年龄,性别,姓名等)很多的车–可以定义一个Car类(有发动机,颜色,车轮等)很多的类一-- -Class类(类名,构造方法,属性,方法)得到Class类的对象有三种方式:第一种形式::Object类中的getClass()方法第二种形式:类.class第三种形式:通过Class类的forName方法使用Class类进行对象的实例化操作原创 2020-05-15 19:10:16 · 131 阅读 · 0 评论 -
MINA框架简单应用示例
1、什么是MINA?一个简洁易用的基于 TCP/IP 通信的 JAVA框架。下载地址:http://mina.apache.org/mina-project/downloads_old.html一个简单的网络程序需要的最少jar包:mina-core-2.0.16.jar、slf4j-api-1.7.21.jar开发一个 Mina 应用,简单的说,就是创建连接,设定过滤规则,编写自己的消息处理器示例:服务器端package com.mina;import org.apache.mina.原创 2020-05-15 15:26:14 · 306 阅读 · 1 评论 -
UDP通信协议示例与URL下载示例
UDP协议概述UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的,每个被传输的数据报必须限定在64KB之内。主要使用以下的两个类:DatagramPacket:此类表示数据报包。DatagramSocket:此类表示用来发送和接收数据报包的套接字UDP服务器与客户端程序服务器端:String info=原创 2020-05-15 12:08:10 · 338 阅读 · 0 评论 -
java即时聊天简易版实现案例
实现需求: 多个用户之间进行任意一对一的消息会话实现思路: 客户端与客户端不能直接进行通信,需要在服务器端作为中转,服务器端开辟与客户端对应的线程,将客户端与客户端的通信转为线程与线程之间的通信,再由线程对应客户端实现客户端与客户端的通信。代码示例:服务器类:package com.booy;import java.io.IOException;import java.io.ObjectInput;import java.io.ObjectInputStream;import java.i原创 2020-05-15 11:19:15 · 934 阅读 · 3 评论 -
TCP原理分析与示例
TCP程序概述TCP: 可靠的、 面向连接的协议。实现TCP程序,需要编写服务器端和客户端,Java API为我们提供了java.net包,为实现网络应用程序提供类。ServerSocket:此类实现服务器套接字。Socket:此类实现客户端套接字(也可以就叫“套接字”)。Socket是网络驱动层提供给应用程序编程的接口和种机制。数据发送过程:数据接收过程:实现服务器端与客户端程序服务器端:public class ServerSocket extends Object此类实现服务原创 2020-05-14 16:06:17 · 237 阅读 · 0 评论 -
java线程生命周期与线程池
线程生命周期图:首先new出一个对象,放入线程中启动线程,线程进入就绪状态,当抢到cpu执行时间片,进入运行状态,yield则放弃本次时间片进入到就绪状态,当运行结束或异常退出就是Dead状态,wait则是进入休眠状态,直到会唤醒进入就绪状态。线程池线程池是预先创建线程的一种技术。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中,然后对这些资源进行复用。减少频繁的创建和销毁对象。jdk1.5版本以上提供了现成的线程池。Java里面线程池的顶级接口是Executor,是一个执行线程的原创 2020-05-14 13:48:08 · 268 阅读 · 0 评论 -
java多线程生产者与消费者案例
多线程的开发中有一个最经典的操作案例,就是生产者-消费者,生产者不断生产产品,消费者不断取走产品。sleep与wait区别:sleep: 让线程进行进入休眠状态,让出cpu的时间片,不释放监视器所有权(对象锁)wait: 让线程进入等待状态,让出cpu的时间片,并释放监视器所有权,等待其他线程通过notify方法唤醒生产者与消费者案例代码示例:package com.booy;public class ProducterCustomerDemo { public static void原创 2020-05-14 11:49:14 · 192 阅读 · 0 评论 -
java多线程中线程同步
1、多线程共享数据在多线程的操作中,多个线程有可能同时处理同一一个资源,这就是多线程中的共享数据。2、线程同步解决数据共享问题,必须使用同步,所谓同步就是指多个线程在同一个时间段内只能有一一个线程执行指定代码,其他线程要等待此线程完成之后才可以继续执行。线程进行同步,有以下三种方法:(1)同步代码块synchronized(要同步的对象){要同步的操作;(2)同步方法public synchronized void method(){要同步的操作;(3) Lock ( Reentra原创 2020-05-13 22:00:23 · 175 阅读 · 0 评论 -
join、中断线程与其他方法
public final void join( ) throws InterruptedException等待这个线程死亡。调用此方法的行为方式与调用完全相同join (0)异常InterruptedException -如果任何线程中断当前线程。当抛出此异常时, 当前线程的中断状态将被清除。public void interrupt()中断这个线程。除非当前线程中断自身,这是始终允许的public static boolean interrupted()测试当前线程是否中断。该方法可以清原创 2020-05-13 21:13:32 · 161 阅读 · 0 评论 -
java线程的基本概念与使用
1、什么是进程程序是指令和数据的有序集合,其本身没有任何运行的含义,是个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。进程是一个具有一定独立功能的程序,一个实体,每一个进程都有它自己的地址空间。2、进程的状态进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程具有以下三种基本状态。1)就绪状态(Ready)2)运行状态( Running)3)阻塞状态(Blocked)3、线程线程实际上是在进程基础之上的进步划分, -个进程启动之后,里面的若干程序又可以原创 2020-05-13 19:03:57 · 127 阅读 · 0 评论 -
java第三方类库Guava开源组件使用
版本下载: https://repo1.maven.org/maven2/com/google/guava/guava/Guava工程包含了若干被Google的Java项目广泛依赖的核心库,例如:集合[collections]、缓存[caching]、原生类型支持[primitives support]、并发库[concurrency libraries]、通用注解[common annotations]、字符串处理[string processing]、l/0等等。所有这些工具每天都在被Google的工原创 2020-05-13 16:20:58 · 416 阅读 · 0 评论 -
java设计模式:迭代器设计模式
提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示。应用场景1、访问一个聚合的对象,而不需要暴露对象的内部表示2、支持对聚合对象的多种遍历3、对遍历不同的对象,提供统一的接口。迭代器模式的角色构成1、迭代器角色(Iterator) : 定义遍历元素所需要的方法,一般来说会有这么三个方法:取得下一个元素的方法next(),判断是否遍历结束的方法hasNext(),移出当前对象的方法remove(),2、具体迭代器角色(Concrete Iterator) : 实现迭代器接口原创 2020-05-13 11:16:35 · 124 阅读 · 0 评论 -
对象的一对多和多对多关系
对象与对象的关系可以分为: 一对一,一对多和多对多。一对一关系: 分别在两个对象将对方对象设置为属性进行关联一对多关系: 在 “一” 关系设置对多关系的集合表示,在 “ 多” 关系将以关系设置为属性多对多关系: 分别在两个对象将对方对象作为集合的方式进行关联。实际开发中一对多的关系用得最多,不建议直接使用多对多关系,这样逻辑过于复杂,不好处理,通常多对多的关系,设置一个中间对象,拆分为两个一对多的关系进行处理。一对多关系关联代码示例:主类package com.booy;public cl原创 2020-05-13 10:17:14 · 2836 阅读 · 0 评论 -
java队列与栈
队列(Queue)是一种特殊的线性表,是一种先进先出(FIFO) 的数据结构。它只允许在表的前端(front) 进行删除操作,而在表的后端(rear) 进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。用于消息队列,请求队列等LinkedList是Queue接口的实现类boolean add(E e): 将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回true,如果当前没有可用的空间,则抛出llegalStateException.原创 2020-05-12 22:25:40 · 113 阅读 · 0 评论 -
java中Collections工具类和Optional容器类使用
Collections类Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法:1、排序操作(主要针对List接口相关)reverse(List list):反转指定List集合中元素的顺序shuffle(List list):对List中的元素进行随机排序(洗牌)sort(List list):对List里的元素根据自然升序排序sort(List list,Comparator c):自定义比较器进行排序swap(Listl原创 2020-05-12 21:41:58 · 513 阅读 · 0 评论 -
java8Map常用操作
都在示例代码里:package com.booy;import java.util.HashMap;import java.util.Map;public class NewMapDemo { public static void main(String[] args) { Map<Integer,String> map =new HashMap<>(); map.put(1, "Tom"); map.put(2, "Lily"); map.put(3,原创 2020-05-12 19:52:13 · 336 阅读 · 0 评论 -
java集合Map接口中hashMap,Hashtable,LinkHashMap分析比较
Map接口public interface Map<K,V>将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。1、键值对存储一组对象2、键是唯一不重复的,值可以重复3、具体的实现类:hashMap、Hashtable、LinkHashMap4、hashMap与Hashtable区别hashMap类public class HashMap<K,V> extends AbstractMap<K,V> implements Map<原创 2020-05-12 18:21:13 · 296 阅读 · 0 评论 -
java8集合Stream操作
Stream是元素的集合,可以支持顺序和并行的对元Stream进行汇聚的操作可以把Stream当成一个高级版本的Iterator。原始版本的Iterator,只能一个个的遍历元素并对其执行某些操作;高级版本的Iterator,只要给出需要对其包含的元素执行什么操作,比图“过滤掉长度大于10的字符串”、“获取每个字符串的首字母”等,具体这些操作如何用到每个元素上,就给Stream就好了。Stream常用方法代码示例:package com.booy;import java.security.cert原创 2020-05-12 15:16:51 · 150 阅读 · 0 评论 -
java8四大函数式接口使用
四大函数式接口:1、消费型接口:有参无返回值Consumer<T>2、函数式接口:有参有返回值,表示接收一个参数并产生结果的函数Function<T, R>3、供应商接口:无参有返回值Supplier<T>4、断言接口: 有参有返回布尔值Predicate<T>代码综合示例:package com.booy;import java.util.ArrayList;import java.util.Arrays;import java.原创 2020-05-12 12:34:15 · 249 阅读 · 0 评论 -
java集合Set接口HashSet, TreeSet, LinkedHashSet分析比较
Set接口:一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。1、无序的2、不允许重复3、常用的实现类:HashSet, LinkedHashSet, TreeSet HashSet类:public class HashSet<E>extends AbstractSet<E>implements Set<E>, Clone原创 2020-05-11 19:27:57 · 208 阅读 · 0 评论 -
java集合概述与ArrayList、Vector、LinkedList分析比较
集合框架的作用数组最大的问题是数组中的元素的个数是固定的,要实现动态数组,毕竟还是比较麻烦的,自己实现链表或二叉树结构来管理对象更是不方便。在JDK1.2版本后,java完整的提供了类集合的概念,封装了一组强大的、非常方便的结合框架API,让我们在开发中大大的提高了效率。集合中分为三大接口:Collection、map(映射)、Iterator(迭代器)集合框架的接口和类载java.util包中结合框架结构图Collection接口Collection层次结构中的根接口。Collectio原创 2020-05-11 16:47:05 · 127 阅读 · 0 评论 -
java中NIO基本概念与使用
NIO是JDK1.4加入的新包,目的是是可以让程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。流与块的比较原来的I/O库(在java.io.*中)与NIO的区别: 数据打包和传输的方式不同,原来的I/O以流的方式处理数据,而NIO以块的方式处理数据。面向流的I/O系统一次一个字节地处理数据。每一个操作都在一步中产生或者消费一个字节数据。。因此面向流的I/O通常比较慢。面向块的I/O系统以块的形式处理数据。每原创 2020-05-11 12:31:07 · 178 阅读 · 0 评论