Java
文章平均质量分 76
Java
pan_junbiao
这个作者很懒,什么都没留下…
展开
-
JVM内存溢出和内存泄漏的区别
程序运行结束后,没有释放 所占用的内存空间。一次内存泄漏 似乎不会有大的影响,但内存泄漏 不断累积,最终可用内存会变得越来越少。比如说,总内存大小是100 MB,有40MB的内存一直无法回收,那么可用的只有60MB 。这40MB的就是内存泄漏。内存泄漏,就是程序运行结束后,没有释放的内存。程序运行时,在申请内存空间时,没有足够的内存空间供其正常使用,程序运行停止,并抛出 out of memory 。比如程序运行时申请了一个10MB 空间, 但是当前可用内存只有5MB,程序无法正常执行,这就是内存溢出。转载 2022-07-06 14:33:13 · 4763 阅读 · 0 评论 -
什么是OOM,为什么会OOM及一些解决方法
OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当JVM因为没有足够的转载 2022-07-03 16:16:32 · 2673 阅读 · 1 评论 -
Java四种引用类型:强引用、弱引用、软引用和虚引用
Java 的垃圾回收器机制 GC,GC 算是 Java 的一大特点,我们都知道 C 语言是不能自动释放内存的需要程序员去操作的,而 Java 自带的垃圾回收机制是能够帮助程序员自动释放内存的。GC:是Java自带的垃圾回收器,它是运行在独立的,优先级比较低的线程中,时刻都在检测与释放无用的内存,那是如何判断它是否有用,主要用的较多的判断方式就是引用计数。Java 执行 GC 判断对象是否存活有两种方式其中一种是引用计数。在 JDK 1.2 以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对转载 2022-07-02 17:50:48 · 465 阅读 · 0 评论 -
Java实现List集合的排序:Comparator接口、Collections.sort()方法、stream().sorted()方法的使用
Java 提供的 List 接口继承了 Collection 接口,因此包含 Collection 中的所有方法。List 是有序集合,允许有相同的元素。ArrayList 是List 接口的一个实现类,它实现了可变大小的数值,允许所有元素,包括 null,并可以根据索引位置对集合进行快速的随机访问。下面将通过实例来实现使用 Comparator 接口、Collections.sor() 方法、stream().sorted() 方法实现集合的排序。Comparator 接口、Collections原创 2022-03-25 17:23:13 · 9768 阅读 · 2 评论 -
Java实现TreeMap集合的排序:Key键的升序与降序、Value值的排序
Java 提供的 Map 接口常用的实现类有 HashMap 和 TreeMap。HashMap 类实现的 Map 集合对于添加和删除映射关系效率更高。HashMap 通过哈希码对其内部的映射关系进行快速查找;而 TreeMap 中的映射关系存在一定的顺序,如果希望 Map 集合中的对象也存在一定的顺序,应该使用 TreeMap 类实现 Map 集合。下面将通过实例来实现Map 接口中的 TreeMap 集合按照 Key 键的升序与降序,按照 Value 值的排序。(1)创建用户信息实体类/.原创 2022-03-20 17:25:47 · 22271 阅读 · 3 评论 -
Java使用System.currentTimeMillis()方法计算程序运行时间
Java 中提供的 System.currentTimeMillis() 方法用于获取当前的计算机时间,时间的表达格式为当前计算机时间和 GMT 时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。System.currentTimeMillis() 方法的返回类型为 long ,表示毫秒为单位的当前时间。在开发过程中,通常很多人都习惯使用 new Date() 来获取当前时间。new Date() 所做的事情其实就是调用了 System.currentTimeMillis()方法。如果原创 2022-03-10 18:02:37 · 16686 阅读 · 1 评论 -
Java程序的初始化顺序、static{}静态代码块和实例语句块的使用
在 Java 语言中,当实例对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在的构造函数创建对象。Java 程序的初始化一般遵循以下三个原则:静态对象(变量)、非静态对象(变量)。 父类优先于子类进行初始化。 按照成员变量定义顺序进行初始化。Java 程序的初始化工作可以在许多不同的代码块中来完成,例如:静态代码块、实例语句块、构造函数等。1、普通类的执行顺序普通类的执行顺序为:静态代码块 → 实例语句块 → 构造函数。【示例】普通类的原创 2022-03-05 16:35:08 · 2483 阅读 · 0 评论 -
Java中BigDecimal的使用:加减乘除、四舍五入、比较大小、资金统计
Java在 java.math 包中提供的API类 BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象原创 2020-12-19 17:36:53 · 4695 阅读 · 1 评论 -
Java线程池实现秒杀功能
1、简单实例【实例】Java使用多线程和Redis实现一个1000人秒杀100部手机的实例。(1)秒杀实现(SecondKill.java):创建多线程,并利用Redis的事务功能,实现秒杀功能。package com.pjb.seckill;import redis.clients.jedis.Jedis;import redis.clients.jedis.Transaction;import java.util.List;/** * 秒杀抢购 * @author pan_原创 2020-11-27 17:29:31 · 3323 阅读 · 0 评论 -
Java8中的Optional类的理解与使用
从 Java 8 引入的一个很有趣的特性是Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但...转载 2020-05-06 10:23:41 · 1274 阅读 · 0 评论 -
Java8使用Stream流实现List列表的查询、统计、排序、分组
Java8提供了Stream(流)处理集合的关键抽象概念,它可以对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。Stream API 借助于同样新出现的Lambda表达式,极大的提高编程效率和程序可读性。下面是使用Stream的常用方法的综合实例。(1)创建User.java(用户信息实体类)。import java.math.BigDecimal;/** * ...原创 2020-05-05 16:08:43 · 61577 阅读 · 13 评论 -
Java8新特性——Lambda表达式的使用
1、Lambda表达式的简介Java8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。Lambda 表达式(Lambda Expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的Lambda抽象(Lambda Abstraction),是一个匿名函数,即没有函数名的...原创 2020-05-02 17:56:44 · 716 阅读 · 0 评论 -
Java中内部类和匿名内部类的详解
1、内部类将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。1.1 成员内部类定义在类中方法外的类。定义格式:class 外部类 { class 内部类{ }}在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类Car中包含发动机类Engine,这时,Engine就可以使用内部类来描述,定义在...转载 2020-04-30 15:18:27 · 563 阅读 · 0 评论 -
Java操作XML文档(创建、查询、新增、修改、删除)
1、XML简介XML是 eXtensible Markup Language(可扩展标记语言)的缩写,是 SGML(标准通用化标记语言)的一个子集,用于提供数据描述格式,适用于不同应用程序间的数据交换,而且这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。1.2 XML文档结构XML是一套定义语义标记的规则,同时也是用来定义其他标识语言的元标识语言。下面是一个简单的XML文档的...原创 2019-10-27 12:16:15 · 4603 阅读 · 2 评论 -
Java泛型中的通配符 T,E,K,V,?
前言Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。1、泛型带来的好处在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对...转载 2019-09-03 10:59:02 · 276 阅读 · 0 评论 -
Java格式化字符串
String类的静态format()方法用于创建格式化的字符串。format()方法有两种重载形式。(1)public static String format(String format, Object... args)该方法使用指定的格式字符串和参数返回一个格式化字符串,格式化后的新字符串使用本地默认的语言环境。format:格式字符串。args:格式字符串中由格式说明符引用的...原创 2019-08-02 15:49:12 · 3670 阅读 · 0 评论 -
Intellij IDEA快捷键与使用小技巧
IntelliJ Idea 常用快捷键列表:Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示当前文件的结构Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 ...转载 2019-04-25 10:13:37 · 1395 阅读 · 0 评论 -
Java使用db.properties配置数据库连接属性
1、Properties类的介绍在Java中提供了 java.util.Properties 类,来读取 .properties 属性文件。在程序调用 Properties 类的 load() 方法时,系统把 .properties 属性文件的内容加载到内存中。因为 Properties 类继承了 Hashtable 类,Properties 类把“=”之间的内容,添加到Hashtable 对...原创 2019-04-19 18:46:41 · 22280 阅读 · 2 评论 -
Java中Math类的使用(四舍五入、随机数字)
1、Math类的介绍java.lang.Math 类提供了一些基本数字运算和几何运算的方法。此类中的所有方法都是静态的。这个类是 final 类,因此没有子类。Math类的常用方法:方法 说明 static double sin(double a) 计算角 a 的正弦值。 static double sin(double a) 计算角 a 的余弦值。 st...原创 2019-04-11 16:48:48 · 7155 阅读 · 0 评论 -
Java中Date类和Calendar类的使用
java.util 包中由许多常用的类组成,其中主要是用于处理一组对象的集合类。例如ArrayList和HashMap类;它还包含用于处理日期和时间的类,例如Date类和Calendar类;下面将介绍Date类和Calendar类。1、Date类Date类对象表示当前日期和时间,并提供操纵日期和时间各组成部分的方法。必须将Date对象转换为字符串,才能将其输出。Date类的构造方法:...原创 2019-04-11 15:21:52 · 2644 阅读 · 1 评论 -
Java中使用StringBuffer拼接字符串
1、StringBuffer类StringBuffer用于表示可以修改的字符串。只要将连接运算符(+)与字符串一起使用,就会自动创建StringBuffer对象。StringBuffer类的构造方法:构造方法 说明 public StringBuffer() 保留16个字符的空间。 public StringBuffer(int capacity) 设置缓存器...原创 2019-03-01 17:25:24 · 24226 阅读 · 0 评论 -
Java中的String,StringBuilder,StringBuffer三者的区别
最近在学习Java的时候,遇到了这样一个问题,就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢,自己从网上搜索了一些资料,有所了解了之后在这里整理一下,便于大家观看,也便于加深自己学习过程中对这些知识点的记忆,如果哪里有误,恳请指正。这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。1、运行速度首先说运行速度,或者说是执行...转载 2019-03-01 17:04:54 · 160 阅读 · 0 评论 -
Eclipse的相关设置与使用:笔记
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。1、Eclipse护眼颜色和字体大小设置https://www.cnblogs.com/xiezhidong/p/604825...原创 2019-02-20 15:44:07 · 449 阅读 · 0 评论 -
Swing中单选钮、下拉框、复选框的使用
1、单选钮组件在Swing中使用JRadioButton类来创建单选钮。ButtonGroup类是按钮组,可以使用ButtonGroup类的add()方法将一组单选钮添加到按钮组中。setSelected(boolean b)方法:设置单选钮为选中状态。isSelected()方法:判断单选钮是否选中。示例:创建单选钮,并设置默认选项。// 创建单选钮JRadioButt...原创 2019-01-30 18:01:23 · 6960 阅读 · 1 评论 -
Swing使用JTable表格组件
表格是最常用的数据统计形式之一,在Swing中由JTabel类实现表格。示例:使用JTable表格组件,动态绑定数据。如下图:(1)创建JTable表格组件。// 表头(列名)Vector<String> columnNames = new Vector<String>();columnNames.add("编号");columnNames.add(...原创 2019-01-30 16:52:03 · 4409 阅读 · 0 评论 -
Swing实现多文档界面(MDI)应用程序
1、桌面面板和内部窗体通常情况下,在一个GUI应用程序中需要使用多个窗体,针对多窗体的应用程序,Swing提供了JDesktopPane类和JInternalFrame类(分别称为桌面面板类和内部窗体类)来实现多文档界面(MDI)应用程序。1.1 JDesktopPane桌面面板类JDesktopPane类是一个容器类,用来创建一个虚拟的桌面。JDesktopPane类中的常用方法如下...原创 2019-01-30 15:15:12 · 3216 阅读 · 0 评论 -
Swing设置窗体背景图片
Swing设置窗体背景图片,简单的实现方法就是在窗体中放在一个JLabel标签组件,然后设置该标签的图标属性,最后设置该标签的大小与位置将其铺满窗体。// 设置背景JLabel lblBackground = new JLabel(); // 创建一个标签组件对象URL resource = this.getClass().getResource("/background.jpg"); ...原创 2019-01-30 10:33:55 · 13364 阅读 · 0 评论 -
Swing笔记:应用
1、安装WindowBuilder可视化工具2、使用Absolute Layout布局3、设置Swing窗体居中4、获取JPasswordField密码输入框的值5、弹出提示框、确认框6、按钮的点击事件7、退出系统 1、安装WindowBuilder可视化工具可以安装WindowBuilder可视化工具来提供Swing开发效率。安装地址:http://www...原创 2019-01-29 18:15:15 · 299 阅读 · 0 评论 -
JDBC事务的使用
JDBC是一种可用于执行SQL语句的Java API,是连接数据库和Java应用程序的纽带。数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应...原创 2019-11-10 11:33:08 · 2490 阅读 · 0 评论 -
JDBC事务
1、事务事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。事务的正确执行使得数据库从一种状态转换成另一种状态。当操作序列中的所有操作都成功执行时,事务的状态未成功。当任一操作失败时,事务的状态为失败,此时必须将程序状态返回至事务未执行时的状态,即回滚。1.2 四个特性原子性(Atomicity):事务中的所有操作是不可再分割的原子单位,事务中的所有操作是...转载 2019-01-29 16:18:13 · 906 阅读 · 0 评论 -
Java数据库连接池
一、应用程序直接获取数据库连接的缺点用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。如下图所示:二、使用数据库连接池优化程序性能2.1、数据库连接池的基本概念数据库连接是一种关键的有限的昂贵的资源,这一点在...转载 2019-01-27 11:27:29 · 1849 阅读 · 1 评论 -
JDBC实现DBHelper类
JDBC是Java程序操作数据库的标准,它由一组用Java语言编写的类和接口组成,Java通过JDBC可以对多种关系数据库进行统一访问。以下是使用JDBC技术实现一个DBHelper数据库操作公共类。(1)在项目的默认路径(src目录)下创建 db.properties 属性文件,并编写MySQL数据连接的相关配置信息。DRIVER_CLASS=com.mysql.cj.jdbc.Dr...原创 2019-11-10 11:32:03 · 3277 阅读 · 2 评论 -
JDBC调用存储过程与存储函数
在JDBC API中提供了调用存储过程的方法,通过CallableStatement对象进行操作。CallableStatement对象位于java.sql包中,它继承于PreparedStatement对象,PreparedStatement对象又继承于Statement对象。CallableStatement对象主要用于执行数据库中定义的存储过程和存储函数,其调用方法如下:调用存储过程:{...原创 2019-11-10 11:32:55 · 24148 阅读 · 4 评论 -
JDBC数据库操作
1、JDBC概述JDBC是一种可用于执行SQL语句的Java API,是连接数据库和Java应用程序的纽带。1.1 JDBC-ODBC桥JDBC-ODBC桥是一个JDBC驱动程序,完成了从JDBC操作到ODBC操作之间的转换工作,允许JDBC驱动程序被用作ODBC的驱动程序。JDBC-ODBC桥作连接数据库的过渡性技术,现在已经不被Java广泛应用了,现在被广泛应用的是JDBC技术。但...原创 2019-11-10 11:32:43 · 2067 阅读 · 0 评论 -
JDBC驱动com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别与serverTimezone参数的设定
com.mysql.jdbc.Driver驱动是mysql-connector-java 5中的com.mysql.cj.jdbc.Driver驱动是mysql-connector-java 6以上版本的1、JDBC连接Mysql5 com.mysql.jdbc.DriverdriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://...转载 2019-01-24 16:33:44 · 7417 阅读 · 0 评论 -
JDBC数据库驱动的下载、安装与连接
1、常用的数据库驱动下载使用JDBC操作数据库,需要使用数据库厂商提供的驱动程序,通过驱动程序可以与数据库进行交互。1.1 常用的数据库厂商驱动下载地址1.1.1MySQL数据库https://dev.mysql.com/downloads/connector/1.1.2 Oracle数据库https://www.oracle.com/technetwork/databa...原创 2019-11-10 11:32:26 · 124533 阅读 · 13 评论 -
MySQL类型与Java类型对应表
MYSQL类型与JAVA类型对应表:类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.la...转载 2019-01-21 14:52:49 · 2112 阅读 · 0 评论 -
Java网络通信
计算机网络实现了多个计算机互联系统,相互连接的计算机之间彼此能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序相互之间可以交换数据。而编写网络应用程序,首先必须明确网络应用程序所要使用的网络协议,TCP/IP协议是网络应用程序的首选。1、网络程序设计基础网络程序设计是指编写与其他计算机进行通信的程序。Java已经将网络程序所需要的东西封装成不同的类。只要创建这些类...原创 2018-12-30 17:17:12 · 2734 阅读 · 0 评论 -
Java多线程
如果一次只完成一件事情,会很容易实现,但现实生活中很多事情都是同时进行的,所以在Java中为了模拟这种状态,引入了线程机制。简单地说,当程序同时完成多件事情时,就是所谓的多线程。多线程应用相当广泛,使用多线程可以创建窗口程序、网络程序等。1、线程简介世间万物会同时完成很多工作,例如人体同时进行呼吸、血液循环、思考问题等活动,用户既可以使用计算机听歌,也可以使用它打印文件,而这些活动完全可以...原创 2018-12-28 16:40:41 · 460 阅读 · 0 评论 -
Java笔记:应用
1、判断字符串是否为空。2、判断字符串的值。3、获取当前时间。4、Maven仓库搜索服务。5、在线API文档工具。6、Java学习网站。7、格式化字符串。8、将Object对象转换成BigDecimal类型。9、使用Arrays.toString(array)函数输出数组内容。10、使用Arrays.asList()函数将数组转换成List列表。1、判...原创 2018-12-28 10:24:12 · 239 阅读 · 0 评论