- 博客(312)
- 收藏
- 关注
原创 SpringBoot接入支付宝支付(五)
@param trade_no 支付宝交易号, 注意: out_trade_no 和 trade_no 二选一即可。* @param out_trade_no 商户订单号,商户网站订单系统中唯一订单号。System.out.println("交易关闭结果:"+result);System.out.println("交易关闭.....");//获得初始化的AlipayClient。
2024-10-22 14:57:59 285
原创 SpringBoot接入支付宝支付(四)
@param out_request_no 请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号,必填。* @param out_request_no 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。* @param trade_no 支付宝交易号, 注意: out_trade_no 和 trade_no 二选一即可。* @param out_trade_no 商户订单号,商户网站订单系统中唯一订单号。
2024-10-22 14:56:42 543
原创 SpringBoot接入支付宝支付(三)
/调用SDK验证签名。System.out.println("********************** 支付宝异步通知成功 **********************");System.out.println("********************** 支付宝异步通知成功 **********************");// 6. 如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序,修改订单状态。
2024-10-22 14:55:48 840
原创 SpringBoot接入支付宝支付(二)
System.out.println("*************************** 支付请求成功 *******************************");System.out.println("*************************** 支付请求成功 *******************************");System.out.println("****************** 支付宝同步通知成功 ******************");
2024-10-22 14:55:11 696
原创 SpringBoot接入支付宝支付(一)
用户在商户系统下单商户系统调用支付宝的支付接口,发起支付请求用户登录,选择支付渠道,输入支付密码支付宝get请求returnUrl, 返回同步通知参数支付宝post请求notifyUrl,返回异步通知参数商户可以通过 交易查询接口查询交易状态如果用户或者商户想退款,可以发起退款请求如果退款可以调用退款查询接口,查询退款信息下载对账单。
2024-10-22 14:54:04 660
原创 SpringBoot接入微信支付
@param outTradeNo 商户系统内部的订单号,当没提供transactionId时需要传这个,两个参数二选一即可。* "body": "商品购买",* "refundDesc": "退款",* @param refundId 微信退款单号。* @param transactionId 微信订单号。* @param transactionId 微信订单号。* @param request 请求参数。
2024-10-22 14:50:28 797
原创 Java学习笔记:异常处理(三)
我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常情况是SUN没有定义好的,此时我们根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题等等。在上述代码中,发现这些异常都是JDK内部定义好的,但是实际开发中也会出现很多异常,这些异常很可能在JDK中没有定义过,例如年龄负数问题,考试成绩负数问题.那么能不能自己定义异常呢?在开发中根据自己业务的异常情况来定义异常类.自定义一个业务逻辑异常:。一个注册异常类。自定义一个编译期异常: 自定义类 并继承于。
2024-10-22 14:49:35 747
原创 Java学习笔记:异常处理(二)
还记得我们学习过一个类Objects吗,曾经提到过它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),那么在它的源码中,对对象为null的值进行了抛出异常操作。而finally就是解决这个问题的,在finally代码块中存放的代码都是一定会被执行的。注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
2024-10-22 14:48:38 995
原创 Java学习笔记:异常处理(一)
异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响。异常:在程序中的意思指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行.
2024-10-22 14:47:37 410
原创 Java学习笔记:常用API总结(十)
基本类型对应的包装类(位于java.lang包中)byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。
2024-10-21 16:07:43 441
原创 Java学习笔记:常用API总结(九)
查阅的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。
2024-10-21 16:05:23 619
原创 Java学习笔记:常用API总结(八)
将src数组中前3个元素,复制到dest数组的前3个位置上复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]实际上,currentTimeMillis方法就是 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值。/*代码运行后:两个数组中的元素发生了变化。dest数组元素[1,2,3,9,10]src数组元素[1,2,3,4,5]//获取当前时间毫秒值。
2024-10-21 16:04:49 274
原创 Java学习笔记:常用API总结(七)
类 表示特定的瞬间,精确到毫秒。继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。tips:由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
2024-10-21 16:00:26 409
原创 Java学习笔记:常用API总结(六)
类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:Java123// ...根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。:返回该对象的字符串表示。:指示其他某个对象是否与此对象“相等”。:返回该对象的字符串表示。
2024-10-21 15:59:41 725
原创 Java学习笔记:常用API总结(五)
/d2的值为 ‐3.0。//d2的值为‐4.0。//d3的值为 5.0。//d1的值为 4.0。//d3的值为 6.0。//d1的值为3.0。//d1的值为6.0。//d2的值为5.0。
2024-10-21 15:58:53 139
原创 Java学习笔记:常用API总结(四)
System.out.println("排序前:"+ Arrays.toString(arr));// 排序前:[24, 7, 5, 48, 4, 46, 35, 11, 6,System.out.println("排序后:"+ Arrays.toString(arr));// 排序后:[2, 4, 5, 6, 7, 11, 24, 35, 46,// 打印数组,输出地址值。// 打印字符串,输出内容。// 数组内容转为字符串。// 定义int 数组。// 定义int 数组。
2024-10-21 15:58:22 137
原创 Java学习笔记:常用API总结(三)
/ String substring(int start,int end):从start到end截取字符串。// int indexOf(String str):获取str在字符串对象中第一次出现的索引,没有返回‐1。// 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。// String concat (String str):将将指定的字符串连接到该字符串的末尾.// int length():获取字符串的长度,其实也就是字符个数。
2024-10-21 15:57:47 838
原创 Java学习笔记:常用API总结(一)
API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。
2024-10-21 15:55:52 235
原创 JVM笔记:JVM与Java体系结构
JIT编译器针对某些代码是要反复执行的(热点代码),可以直接把要反复执行的代码编译成机器指令,在把机器指令放在方法区缓存起来(这里就出现了两次编译,第一次编译把java代码编译成字节码文件,第二次编译报字节码编译成机器指令),所以JIT编译器主要负责程序执行的性能。Java虚拟机是用来解释和运行字节码文件的,所以入口原材料是Class files(字节码文件),字节码文件首先进入类装载子系统,类装载子系统将字节码文件加载到内存(加载、链接、初始化)。Java不是最强大的语言,但JVM是最强大的虚拟机。
2024-10-18 17:38:30 918
原创 JVM笔记:类加载子系统
类加载器子系统负责从文件系统或者网络中加载Class 文件, class 文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载, 至于它是否可以运行, 则由Execution Engine 决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外, 方法区中还会存放运行时常量池信息, 可能还包括字符串字面量和数字常量( 这部分常量信息是Class 文件中常量池部分的内存映射)对于用户自定义类来说:使用系统类加载器AppClassLoader进行加载。
2024-10-18 17:37:50 1015
原创 JVM笔记:运行时数据区-程序计数器(PC寄存器)
但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。我们都知道所谓的多线程在一个特定的时间段内指回执行其中某一个线程的方法,CPU会不停地做任务切换,这样必然会导致经常中断或恢复,如何保证分毫无差呢?由于CPU时间片轮限制,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令。每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器在各个线程之间互不影响。
2024-10-18 17:35:18 287
原创 JVM笔记:运行时数据区-虚拟机栈(六)
当一个方法开始执行后,只要两种方式可以退出这个方法: 1、执行引擎遇到任意一个方法返回的字节码指令(return),会有返回值传递给上层的方法调用者,简称正常完成出口;2、在方法执行的过程中遇到了异常(Exception),并且这个异常没有在方法内进行处理,也就是只要在本方法的异常表中没有搜素到匹配的异常处理器,就会导致方法退出,简称。方法执行过程中抛出异常时的异常处理,存储在一个异常处理表,方便在发生异常的时候找到处理异常的代码。
2024-10-18 17:05:51 303
原创 JVM笔记:运行时数据区-虚拟机栈(五)
随着高级语言的横空出世,类似于java一样的基于面向对象的编程语言如今越来越多,尽管这类编程语言在语法风格上存在一定的差别,但是它们彼此之间始终保持着一个共性,那就是都支持封装,集成和多态等面向对象特性,既然这一类的编程语言具备多态特性,那么自然也就具备早期绑定和晚期绑定两种绑定方式。前四条指令固化在虚拟机内部,方法的调用执行不可人为干预,而invokedynamic指令则支持由用户确定方法版本。//invokevirtual 因为此方法声明有final 不能被子类重写,所以也认为该方法是非虚方法。
2024-10-18 17:05:08 851
原创 JVM笔记:运行时数据区-虚拟机栈(四)
操作数栈,主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间。操作数栈就是jvm执行引擎的一个工作区,当一个方法开始执行的时候,一个新的栈帧也会随之被创建出来,这个方法的操作数栈是空的每一个操作数栈都会拥有一个明确的栈深度用于存储数值,其所需的最大深度在编译器就定义好了,保存在方法的code属性中,为max_stack的值。栈中的任何一个元素都是可以任意的java数据类型32bit的类型占用一个栈单位深度64bit的类型占用两个栈深度单位操作数栈。
2024-10-18 17:04:33 534
原创 JVM笔记:运行时数据区-虚拟机栈(三)
局部变量表也被称之为局部变量数组或本地变量表定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddressleixing由于局部变量表是建立在线程的栈上,是线程私有的数据,因此不存在数据安全问题局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maximum local variables数据项中。在方法运行期间是不会改变局部变量表的大小的方法嵌套调用的次数由栈的大小决定。
2024-10-18 17:02:26 814
原创 JVM笔记:运行时数据区-虚拟机栈(二)
System.out.println("method1()开始执行。System.out.println("method1()执行结束。System.out.println("method2()开始执行。System.out.println("method2()执行结束。System.out.println("method3()开始执行。System.out.println("method3()执行结束。// method3()执行结束。// method2()执行结束。
2024-10-18 17:01:19 697
原创 JVM笔记:运行时数据区-虚拟机栈(一)
我们可以使用参数-Xss选项来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度。如果采用固定大小的Java虚拟机栈,那每一个线程的java虚拟机栈容量可以在线程创建的时候独立选定。如果java虚拟机栈可以动态拓展,并且在尝试拓展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那java虚拟机将会抛出一个。作用:主管java程序的运行,它保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回。生命周期和线程是一致的。
2024-10-18 17:00:42 450
原创 JVM笔记:运行时数据区-本地方法栈
目前该方法的是用越来越少了,除非是与硬件有关的应用,比如通过java程序驱动打印机或者java系统管理生产设备,在企业级应用已经比较少见。因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以是用Web Service等等,不多做介绍。这个特征并非java特有,很多其他的编程语言都有这一机制,比如在C++ 中,你可以用extern “C” 告知C++ 编译器去调用一个C的函数。java使用起来非常方便,然而有些层次的任务用java实现起来不容易,或者我们对程序的效率很在意时,问题就来了。
2024-10-18 16:47:27 497
原创 Java容器:ArrayList源码分析(10多线程场景下如何使用 ArrayList?)
ArrayList 不是线程安全的,如果遇到多线程场景,可以通过 Collections 的 synchronizedList 方法将其转换成线程安全的容器后再使用。
2024-10-17 16:58:46 286
原创 Java容器:ArrayList源码分析(9 ArrayList和Vector的区别)
Vector的开销比ArrayList大,访问速度更慢,在实际开发中最好使用ArrayList,而且同步操作完全可以由程序员来控制。这两个类都实现了 List 接口(List 接口继承了 Collection 接口),他们都是有序集合。
2024-10-17 16:58:02 96
原创 Java容器:ArrayList源码分析(6trimToSize方法)
现在,考虑这样一种情况。我们往 ArrayList 插入大量元素后,又删除很多元素,此时底层数组会空闲处大量的空间。因为 ArrayList 没有自动缩容机制,导致底层数组大量的空闲空间不能被释放,造成浪费。通过上面的方法,我们可以手动触发 ArrayList 的缩容机制。这样就可以释放多余的空间,提高空间利用率。/** 将数组容量缩小至元素数量 */
2024-10-17 16:55:38 204
原创 Java容器:ArrayList源码分析(get方法、remove方法)
/ 将 index + 1 及之后的元素向前移动一位,覆盖被删除值。同样先检查index,如果符合条件,直接放回数组中index对应的数据。// 将最后一个元素置空,并将 size 值减 1。// 遍历数组,查找要删除元素的位置。/删除指定元素,若元素重复,则只删除下标最小的元素。//快速删除,不做边界检查,也不返回删除的元素值。// 返回被删除的元素值。二、remove方法。
2024-10-17 16:54:40 560
原创 Java容器:ArrayList源码分析(4 set方法)
检查给定的索引是否在目前数组的范围内,不在就抛出异常。set方法用于替换指定位置的元素。// 先检查index。* 替换指定位置的元素。
2024-10-17 16:52:48 172
原创 Java容器:ArrayList源码分析(3 数组扩容)
/如果新的容量超过Integer.MAX_VALUE就会溢出,抛出异常。//如果当前的list为空,则将list的容量设置为默认值(10)//新的容量 = 旧的容量加+旧的容量的一半。//每修改一次list,这个数就+1。
2024-10-17 16:52:10 340
原创 Java容器:ArrayList源码分析(1 基本定义及构造方法)
/如果collection为空会默认创建一个,会创建一个容量为空的ArrayList。* 存储ArrayList元素的数组,ArraList的容量是数组的长度.* 可共享的空数组实例对象,用于默认容量的空实例对象的创建。* 构造一个空的ArrayList,初始化容量为10()* ArrayList的容量(包含的元素数量)。* 可共享的空数组实例,用于空实例对象的创建。//创建一个空的ArrayList,默认容量为10。//创建一个空的ArrayList,初始容量为20。指定ArrayList的容量。
2024-10-17 16:50:44 266
原创 java的基础概念和语法之递归
递归:指在当前方法内调用自己的这种现象。递归分为两种,直接递归和间接递归。直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。注意事项递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。构造方法,禁止递归Java123456789101112131415161718192021222324252627。
2024-10-16 16:54:53 791
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人