
Java
醺泽
这个作者很懒,什么都没留下…
展开
-
JSONObject需要引入的maven文件
需要加上jdk15才符合使用版本,此处的jdk15并不是jdk版本,而是net.sf.json-lib的一个版本,对应的jdk版本是jdk1.5以上的版本。使用JSONObject不止需要引入net.sf.json-lib,还需要引入其他maven包共同使用。同时引入这些包,才能使用JSON工具类。原创 2023-03-09 09:14:53 · 3751 阅读 · 1 评论 -
如何给Java配置一个灵活的开关
什么是开关呢?开关就是一个可以让你的程序灵活配置某一功能是否启用的一个条件,配置了开关就可以通过改变一个参数的形式来决定某段程序是否启动。为什么要配置一个开关呢?不同开发者开发出的某些代码不兼容的情况。某段代码在交付后出现了未考虑到的bug不确定该功能是否被需求方采用在遇到这些情况时,我们可以采用开关的方式,随时方便关闭一些功能模块。...原创 2022-07-26 16:37:12 · 2972 阅读 · 0 评论 -
Java中的实体类(VO、PO、DO、DTO、BO、QO、DAO、POJO)
最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。主要应用场景前端页面接收的值比POJO对象中的值多,或者需要接收的值来自各个实体类的参数,此时传递给前端页面或从前端页面接收值很难采用数据库对应的实体类进行封装,采用VO单独封装会大大提高效率。应用场景数据库实体类。...原创 2022-07-26 10:26:19 · 5072 阅读 · 0 评论 -
java归并排序
java归并排序。原创 2022-07-25 16:25:43 · 201 阅读 · 0 评论 -
线程安全的集合
线程安全的集合一、常见集合中的线程安全集合(一)VectorHashtable二、使用Collections包装成线程安全三、concurrent包下的线程安全的集合(一)CopyOnWriteArrayList(二)CopyOnWriteArraySet一、常见集合中的线程安全集合(一)VectorVector是常用的Collection集合中的线程安全的集合,其实现线程安全的原理是为其所有需要保证线程安全的方法都添加了synchronized关键字,锁住了整个对象。使用锁的种类:互斥锁源码展示原创 2022-05-03 11:42:18 · 14809 阅读 · 2 评论 -
代码块详解
代码块是什么代码块的分类普通代码块构造代码块静态代码块同步代码块原创 2022-04-27 19:40:23 · 586 阅读 · 0 评论 -
Java创建对象的五种方式
Java创建对象的五种方式new 关键字反射()Constructor.newInstance克隆(Clone方法)反序列化动态代理1、new关键字通过new关键字来实例化对象是最简单的创建对象的方式,该方式可以调用任意的构造器来创建实例。public class Main { public static void main(String[] args) { City city= new City(); }}2、Class.newInstanc原创 2022-03-27 17:01:12 · 2683 阅读 · 0 评论 -
Lamda表达式
Lamda表达式学习Lamda表达式的关键是:理解Functional Interface (函数式接口)函数式接口定义:任何接口,如果它只包含唯一一个抽象方法,那么它就是一个函数式接口。对于函数式接口,我们可以通过Lamda表达式来创建该接口的对象。Lamda表达式定义:Lamda表达式是一个匿名函数,它是基于数学中的λ演算得名的,是一个匿名函数,即没有函数名的函数。只有函数式接口才能通过Lamda表达式来创建接口。作用: ①避免匿名内部类定义过多 ②让代码看起来很简洁 ③去掉没有意原创 2022-02-23 20:36:18 · 357 阅读 · 0 评论 -
java拷贝数组的方法
Java拷贝数组的五大方式,包含循环拷贝、clone、copyOf、copyOfRange、arraycopy五种方式原创 2022-01-24 10:22:26 · 1686 阅读 · 0 评论 -
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind遇到这样的错误,有可能是两种情况:第一种:原本打了一个tomcat,导致tomcat端口被占用,这时要关闭原本启用的tomcat。第二种:其他项目占用了tomcat端口号(1099)通过命令netsta原创 2021-09-13 08:03:25 · 2742 阅读 · 0 评论 -
静态代码块,构造方法执行执行顺序
静态代码块,构造方法执行执行顺序Java是一门面向对象的语言,都是通过创建类,并将类创建成对象来进行执行的。在Java语言中,要先加载类,然后才能创建对象,所以执行时,是先加载了类的信息后再对对象进行操作。构造方法是创建对象时执行的方法,通常用于设置对象的变量值或操作等。静态代码块是类中的代码,通常是在第一次加载类时执行,而创建对象前就要先加载类的信息,所以静态代码块是先于构造代码方法执行的。...原创 2021-03-31 09:10:55 · 183 阅读 · 0 评论 -
IDEA如何导入jar包
IDEA如何导入jar包1.在最外层文件夹中创建一个新的文件夹,名命为lib2.将外部jar包复制到文件夹中3.在工具栏File中选择Project Structure4.进入配置窗口后,选择Libraries,单击"+",选择Java5. 选择当前项目,选择ok6.选择Modules时,需选择close7.添加lib文件夹中所有内容8.选择apply保存9.在Modules 中选择 Dependencies,点击"+",选择Library10.在其中选择当前文件11原创 2021-03-18 17:20:14 · 510 阅读 · 0 评论 -
用IDEA debug按键功能
用IDEA debug按键功能一、断点断点键,是用户在所选行代码处标记的功能点,表示在debug时代码执行到此处暂停。注:断点可设置多个二、启动debug在设置好断点后单击此功能键,启动debug功能。三、中止任务点击该功能键,中止执行代码。四、进行下一步执行代码进行下一步执行代码,通过该功能键,可以确定代码执行顺序是否有误。五、光标跳转至当前执行的代码处在debug过程中可能出现找不到代码正在执行位置,通过该功能键,可以将光标自动跳转至当前执行代码位置,并跳转页面。六、执原创 2021-02-20 20:07:01 · 697 阅读 · 0 评论 -
线程阻塞
线程阻塞所有消耗时间的运行过程,就被称为线程阻塞。线程阻塞又程耗时操作。包括:用户输入、文件读取、文件上传、加载和上传等。为什么会出现线程阻塞:1、等待状态被唤醒:当等待状态被唤醒时,如果该时刻队列中仍然在执行某具有锁的线程,则无法执行被唤醒的线程。为防止出现线程死锁的状态,我们通常会采用某线程在使用时另一线程休眠的方式,我们通过wait()方法来将线程休眠,休眠后进入等待状态,当我们使用notify()方法唤醒后,队列被占用,此时由于被唤醒的线程排在后面,所以无法执行,导致线程阻塞。2、睡原创 2021-02-18 14:54:58 · 1309 阅读 · 0 评论 -
公平锁与非公平锁
公平锁与非公平锁看到公平和非公平两个词,我们就可以简单的理解到公平与非公平的含义,公平的意思呢,就是按照排队顺序逐个来进行执行,非公平的含义呢,就是谁更霸道,就更能抢占到执行的优先。所以我们的公平锁,就是多个线程按照线程的申请顺序,逐个获得锁,然后排队执行。优点:所有的线程都能得到资源。缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,CPU要重写唤醒阻塞线程。举例说明:public class Demo { public static void main(String原创 2021-02-17 14:43:18 · 98 阅读 · 0 评论 -
线程安全的方式
线程安全的方式线程不安全是因为多个线程同时执行同一段内容,如果内容更改未完成,则出现不安全问题实现线程安全就是将本可以多个线程同步执行的,改为即使建立多个线程,也要排队使用,线程安全就会带来效率变低的问题。方案一:同步代码块格式:synchronized(锁对象){}将需要安全的线程内容放入代码块中,其中的锁对象可以是任意一个Object对象,同一个锁的对象应该用同一把锁,所以锁的建立应该在run()方法外。在同步代码块内的内容同一时间只能执行一个。其余的线程也要按照顺序来进行执行。方案二:同原创 2021-02-17 14:21:50 · 191 阅读 · 1 评论 -
多线程中实现Runnable与继承Thread的区别
多线程中实现Runnable与继承Thread的区别Runnable本质是先创建任务,然后通过线程来分配任务。实现代码如下:public class Demo { public static void main(String[] args) throws IOException, ClassNotFoundException { //通过匿名对象的创建,创建了MyRunnable的任务 MyRunnable mr = new MyRunnable(); //将任务分原创 2021-02-13 20:34:30 · 471 阅读 · 0 评论 -
Java中的多线程
Java中的多线程在为学习线程之前我们在书写代码的过程中,代码都是从main方法所在的类开始执行,按照顺序一步步执行,但是按照代码顺序一点点执行可能造成效率低,不能实现多人操作等问题,多线程就让我们可以解决这个问题。在我们开始学习线程之前,要先区分好两个概念:线程和进程的区别。进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行.一个进程最少有一个线程线程实际上是在进程基础之上的进一步划分,一个进程启原创 2021-02-13 20:18:13 · 86 阅读 · 1 评论 -
并发与并行的区别
并发与并行的区别并发:指两个或多个事件在同一个时间段内发生。并行:指两个或多个事件在同一时刻发生(同时发生)。CPU同一时刻只能做一件事情,现在的CPU都是采用多核的方式,其中每个核可以做不同的事情,举例说明,如果一个CPU为八核,那么同一时刻最多可以并行8件事情。同时CPU的运行速度是非常快的,一台正常的笔记本电脑一秒中时间可能做数十万件事情,所以多条线程按照顺序进行,随机进行某个线程,就是并发处理的。...原创 2021-02-13 19:54:58 · 175 阅读 · 0 评论 -
Java种的序列化与反序列化
序列化与反序列化技术何为序列化,序列化就是将集合直接以集合的形式存储至文件中。反序列化就是将序列化的过程反过来,将原创 2021-02-13 15:11:34 · 112 阅读 · 1 评论 -
如何通过try-catch自动实现IO流的关闭
如何通过try-catch自动实现IO流的关闭在jdk1.7版本中通过在try后增加一个()在()中创建IO流的对象,默认就会在我们学习的常用的异常处理中,语法为try{}catch(Exception e){}而该方法无法实现IO流的错误分离。我们来参考下述代码。try{ FileReader fr = new FileReader("lmz.txt"); int s = fr.read(); System.out.println(s); fr.close();}catch (E原创 2021-02-09 10:34:47 · 4833 阅读 · 0 评论 -
Java如何收集异常日志
Java如何收集异常日志在代码编写中,出现异常是非常正常的事情,当异常出现时,为便于整理修改,我们通常会将异常进行收集。Exception类中有printStackTrace(PrintStream ps);方法,将异常写入文件中将异常写入文件中代码展示如下: try{ String s = null; s.toString(); }catch (Exception e){ PrintStream ps = ne原创 2021-02-09 00:47:45 · 984 阅读 · 1 评论 -
缓存读取流
缓存读取流缓存读取流用于一次读取一行的缓存字符读取。用法:创建字符输入流,再创建缓存读取流,如何对内容进行缓存读取。//创建字符输入流FileReader fr = new FileReader("text.txt");//创建缓存读取流BufferedReader br = new BufferedReader(fr);//从文件中读取一行的内容String t = br.readLine();System.out.println(t);打印内容为当前代码目录下text.txt文件原创 2021-02-09 00:38:24 · 164 阅读 · 0 评论 -
java的打印流
java的打印流在Java中我们使用最多的打印就是System.out.println();其实System.out.println();中的out就是打印流中的一个方法,是向Java编译器中进行打印。在使用out方法进行打印时使用的是PrintStream类,用于对内容进行打印输出。PrintStream是FileOutputStream的直接继承子类,是输出流体系下的一种特殊流。打印流:PrintSream常用方法:println(参数);将参数的内容进行打印。 Pri原创 2021-02-09 00:30:18 · 218 阅读 · 1 评论 -
如何将字节流转换成字符流
如何将字节流装饰成字符流使用情况:当编程时需大量读写,并不知文件格式时,采用字节流进行读写,再进行转换。将字节流转换成字符流的过程被叫作转换流。使用装饰者设计模式。转换流:InputStreamReader构造方法:InputStreamReader(InputStream s);参数s:要转换的字节流。InputStreamReader(InputStream s , String charsetName);s为待转换的字节流,charsetName为指定的字符编码将其转换后可直接原创 2021-02-09 00:07:15 · 4488 阅读 · 1 评论 -
Java中的IO流
Java中的IO流IO流概述:IO流本质就是一种数据的流动,按照流动的方向分为输入(Input)和输出(Output)Java中的IO操作主要指的是 java.io包下的一些常用类的使用,通过常用类对数据进行读取(输入Input)和写出(输出Output)计算机中的任何数据(文本、图片、视频、音乐等等)都是以二进制的形式进行存储的。在任何流进行数据传输时,底层都是采用二进制的形式进行数据传输的。IO流的分类:按照流的方向来分,分为输入流和输出流按照流动的数据类型来分,可以分为:字节流、字符流原创 2021-02-08 14:23:06 · 203 阅读 · 2 评论 -
Collections(集合工具类)
Collectionscollections类是集合的工具类,用来对集合进行操作,可以实现一些常用的对集合的操作。其内部方法和变量都是静态的,所以在使用时不需要创建对象,直接使用即可。常用的方法:排序:sort(List list);将list集合中的元素按照默认(升序)的方式进行排序。sort(List list, Comparator<? super T> c);将list集合中的元素通过实现Comparator类中的compare方法,自定义方式进行排序,如果大于返回正数原创 2021-02-06 13:44:19 · 725 阅读 · 0 评论 -
文件的加密和解密
文件的加密和解密文件的加密和解密是一个简单的逻辑过程,最简单的文件的加密过程,就是在文件的读取过程中,借助异或运算的特性(一个数据异或同一个数据两次,得到原本的数据),所以在加密的过程中直接使用异或的方式,将文件变为乱码的格式,解密时再次异或一个数值,就可以实现文件的加密和解密过程了。在加密过程中我们异或的数值可以称为密匙,在解密时输入密匙的值,即可进行解密下面为大家展示文件的加密和解密的代码: private static Scanner sc = new Scanner(System.in原创 2021-02-05 15:31:30 · 2330 阅读 · 1 评论 -
Java对文件进行操作
Java对文件进行操作通过使用java.io.Fille类来对文件进行操作。文件是存储在计算机的地址中的,存储在计算机中的位置是路径,路径又分为相对路径和绝对路径。相对路径:相对于当前代码所在文件的路径,即在存储代码的文件夹中,在代码书写时写上文件名称即可。绝对路径:故名思意,就是在内存中绝对位置的路径,例如c盘下的lmz文件夹中的xxq.txt文件,在windows操作系统下的表示为"c:\lmz\xxq.txt"构造方法:File(String e);//该参数为文件所在的路径在File原创 2021-02-04 19:33:20 · 267 阅读 · 2 评论 -
HashMap
HashMap哈希表是什么呢?哈希表是对象数组+链表,即该集合为对象的数组,每个数组下标都对应一个链表。在哈希表中,每一个数组下标被称为哈希桶,当单个哈希桶存储的数据量大于7时,桶中的链表会转换成红黑二叉树;当再次小于6时,又会由红黑树转换成链表。该效果的目的是为了提高效率。默认情况下哈希表的数组长度为16,其散列因子为0.75,散列因子的含义为,当75%的桶存储到数据后,哈希表就会自动扩容,扩容为原本的二倍,即原本数组的长度为16,当有12个桶中存有数据时,该数组的长度扩容为32。哈希表的数值是原创 2021-02-03 23:20:26 · 86 阅读 · 1 评论 -
Map
MapMap是Mapping的缩写,表示映射的含义,其集合存储的是一个个的键值对其中的键(key)是不可重复的Map集合的遍历方式,需要先将集合中的键通过keySet()方法提取出来,然后通过迭代器通过对键的访问通过get()方法对其值进行访问常用方法:clear()清空集合get(key)得到键值对所对应的值keySet()将Map中的key转换成set的形式进行展示put(key,value)对Map集合进行存储值,如果键本身有值,则用新值替换旧值,并返回旧值,如果键对应没有值,原创 2021-02-02 15:07:08 · 222 阅读 · 0 评论 -
迭代器
迭代器用于遍历集合,用于在集合中取数据Iterator:用于遍历List和Set的所有集合ListIterator:是Iterator的子类,只用于遍历List集合,但功能更加完善和充足IteratorIterator本质上为地址的逐个访问,在使用中默认指针所在位置为空,需要使用next()方法访问到下一元素所在地址,才可以开始访问。在访问中,需要先确认集合中是否有下一元素,通过hasNext()方法来访问,hasNext()方法的返回值是Boolean型,如果有下一元素,则返回true,没有则原创 2021-02-02 10:49:17 · 108 阅读 · 0 评论 -
Java中如何通过LinkedList来模拟栈的结构
如何通过LinkedList来模拟栈的结构LinkedList类为链式结构的意思,通常用于双向链表的操作,但在我们某些操作时,可能希望其能模拟栈的操作。栈也分为线性栈和链式栈,在LinkedList中实现的栈就是链式的栈,其结点的构造与链式结点的构造基本相同,只是应用场景有所不同,所以我们可以使用LinkedList来实现栈的操作。栈的特性:从哪里进,就从哪里出;后进的能先出。在栈的操作中这种进的方式被称为压栈,在LinkedList中可以使用其专用的方法来实现这种操作;代码如下:LinkedLi原创 2021-02-01 11:03:03 · 617 阅读 · 0 评论 -
for循环执行顺序
for循环执行顺序for(赋值语句;执行条件;更新循环变量){执行语句};for循环语句中有三个参数,参数1一般为赋值语句,在语法中我们通常可以在括号内进行声明变量,但因代码块内部变量不能影响到代码块外的内容,所以在括号中赋值的内容仅在for循环的代码块内有效。for(int i=1;;);//该赋值仅在代码块内有效赋值后进行判断是否符合执行条件for(int i=0;i<10;){执行语句}若符合条件,则执行代码块中的执行语句,最后执行更新循环变量语句。此处需注意一点,赋值语句原创 2021-01-31 21:23:47 · 827 阅读 · 0 评论 -
String,StringBuffer,StringBuilder的区别
String,StringBuffer,StringBuilder的区别String创建的内容与其他变量的存储有所不同,其原理是将String创建的内容存储在字符串常量池中,即放入永久代中,确保每一个String类型的值都是一个类似于常量的值,每当有一个String类型的值与另一个Sting类型的值相同了,那么jvm就会自动在字符串常量池中寻找是否有与其相同的内容,如果有,则将该内容的地址赋给你要创建的内容中,所以我们如果用Sting直接写在后面的内容用“==”进行比较,得出的为true。在String原创 2021-01-30 09:11:18 · 88 阅读 · 0 评论 -
Java中常用日期类
Datedate类为表示时间的类,其对时间的精准度至毫秒。其出现时间及早,在jdk1.0版本的时候就已经出现,但随着版本的更新,大量构造方法已经不能使用,目前可以使用的构造方法有两个。无参构造方法:通过获取当前时间戳,返回1970年至当前时间差多少毫秒含参构造方法:只有一个参数,参数为毫秒数据。表示含义:将传入的毫秒级参数转换成日期的形式SimpleDateFormatSimpleDateFormat类是用于展示日期的类,可以根据自己的设定来对展示时间的格式进行设定。常用构造函数:Simp原创 2021-01-29 10:05:04 · 313 阅读 · 2 评论 -
Java运算如何确保精度(BigDecimal)
Java运算如何确保精度(BigDecimal)在Java中使用浮点型数字进行运算,可能会出现误差等问题,为提高算数精度,避免计算误差,我们采用BigDecimal类加以描述。BigDecimal类的含义为:不可变的,任意精度的带符号十进制数。BigDecimal的高精度的原理:浮点型数值运算时发生精度丢失的原因是,在二进制存储中,正数部分其存储单元并非相连的,而是随着数值的增大,存储位置也在变大,这样在整数运算中由于二进制占有的部分的增多,就会导致其出现运算误差,但如果将其小数部分转换成整数,通过整原创 2021-01-28 14:46:10 · 4670 阅读 · 1 评论 -
Java的Arrays类中的方法
Java的Arrays类中的方法Java中对数组的运用十分常见,下面一些方法,是jvm中为我们编写好的数组的常用方法,在需要使用时,我们可以直接调用,而不需要重新写出新的方法。1、Arrays.toString(数组名)功能:打印数组中全部元素2、Arrays.sort(数组名)功能:对数组进行排序3、Arrays.toString(数组名)功能:打印全部数组,数组值由“,”隔。开,数组前后由[]包围。4、数组名.length功能:返回数组长度5、Arrays.binarySearch(原创 2021-01-27 20:37:25 · 225 阅读 · 0 评论 -
return和finally谁先执行
return和finally谁先执行finally是什么呢?finally是用于try-catch-finally捕获异常语句中的代码块,其作用为:在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。用途:finally块一般是用来关闭(释放)物理资源(数据库连接,网络连接,蓝牙连接,磁盘文件等)。我们面试中可能会遇到一个问题,就是说finally既然是不管发不发生异常都必须执行的语句,那当在try或cat原创 2021-01-25 15:46:51 · 382 阅读 · 2 评论 -
foreach(增强型for循环)
增强型for循环何为增强型for循环呢,在我第一次看到for中竟然可以添加其他的参数时,感觉到比较困惑,我看到的内容是:int[] a = {1,2,3}for(int i : a){ ......}看到的时候整个人是困惑的,这样一个循环是什么意思呢?通过观察代码含义和请教老师后得知此循环叫增强型for循环,是用于数组和集合中的for循环,可以实现数组或集合的遍历,下面是我对该内容的整理:foreach的语法:for(元素类型 元素名称 : 遍历数组(集合)(或者能进行迭代的)){}原创 2021-01-23 10:36:34 · 21898 阅读 · 0 评论