
Java基础
文章平均质量分 64
lichuangcsdn
这个作者很懒,什么都没留下…
展开
-
finally语句块是否一定会执行?finally和return执行顺序先后问题
finally语句块并不总是会执行。在以下情况下,finally块不会执行:1) 在try块之前抛出异常;2) 在try块中调用System.exit(0)或Runtime.getRuntime().halt(0);3) 遇到无限循环、死锁、JVM崩溃或断电等情况。此外,当try块中包含return语句时,finally块会在return语句执行之前执行。例如,在functionA中,尽管return语句调用了其他函数,程序仍会先执行finally块,然后返回结果,因此输出顺序为A、C、E、B、F。原创 2025-05-18 23:21:30 · 211 阅读 · 0 评论 -
通过反射获取参数名称
通过反射,可以获取到方法的参数类型,返回值类型,方法名称,这些大家应该都清楚,但是能够获取得到参数名称吗?在spring中,通常通过参数名称进行参数匹配并赋值。在JDK1.7版本及以下,我们可以借助于Spring中的类LocalVariableTableParameterNameDiscoverer,来获取得到参数名称。需要注意的是,该方法似乎只对类的方法有效,针对接口的方法无效。使用如下...原创 2019-05-07 23:46:10 · 2237 阅读 · 0 评论 -
java扫描包(包含自己写的包或者jar中的包)及子包下的所有类
不管是在Spring还是Mybatis中,我们都需要配置一个包路径进行扫描类对象。在Spring中,我们需要配置包路径,让Spring容器能扫描包下面的Bean组件。在mybatis中,我们需要配置mapper包路径,以扫描mapper接口,并生成对应的Bean实例。现在,我参照spring的部分源码,来写一个工具类扫描包及子包下的所有类。package com.company.ha...原创 2019-05-04 22:06:20 · 1770 阅读 · 0 评论 -
用动态代理给接口写默认实现,并手动注入到Spring容器中
我们大家都知道,mybatis的mapper接口,我们并没有手动编写实现代码,但仍然能在程序中注入到Spring容器并使用。这里面就用到了动态代理的原理。下面,我也编写一个接口,代码未给出实现,通过动态代理进行接口的默认实现,通过FactoryBean方式注入到容器中(当然,我们也可以通过在一个用@Configuration声明的配置类中,通过@Bean注解,手动编写该实例的生成过程)。下面是...原创 2019-04-15 00:15:18 · 4227 阅读 · 0 评论 -
利用JDK动态代理给接口创建动态实现
我们大家都知道,一般情况下,如果一个接口没有实现类的话,我们直接调用该接口的方法会报错。但我们用过的Mybatis中Dao接口,或者Spring Data JPA接口,其实我们没有手动为他们编写实现类,那为什么仍然能正常调用呢?这里就涉及到了动态代理。下面我演示一下,如何利用JDK为一个接口创建动态实现。代码目录大致如下,在com.company.proxy包下有三个类文件一、SaleSe...原创 2019-03-12 20:09:28 · 2788 阅读 · 2 评论 -
synchronized和ReentrantLock的对比
synchronized:1、依赖于JVM的底层实现;2、获取到锁后,再执行完任务或者出现异常时会自动释放锁;3、是非公平锁,也就是说一个线程可能会多次得到该锁;4、是重量级锁,是悲观锁,类似于数据库直接加for update进行锁住。ReentrantLock:1、是Java的一个类,需要手动编码;2、获取到锁后,需要手动释放,一般是在finally代码块中进行锁的释...原创 2019-02-22 00:24:40 · 308 阅读 · 0 评论 -
静态代理和动态代理
一、静态代理:就是直接由程序员写好的代理类或者在代理类.class文件在编译期间就已经存在了比如一般店铺具备商品出售功能,但店铺也可以把出售商品委托给超市。也就是说我们大家买商品直接到超市买就行了,不用管它是来自于哪个店铺。在这里,店铺(被代理类或者称之为委托对象)和超市(代理类)都必须实现同一个出售商品的接口。1、先创建一个店铺服务接口:/** * 店铺服务,具有出售商品功能 * @auth...原创 2018-07-12 01:19:00 · 346 阅读 · 0 评论 -
AES加密与解密(秘钥)
代码如下:import org.slf4j.Logger;import org.slf4j.LoggerFactory;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto....原创 2018-06-29 21:21:23 · 29638 阅读 · 5 评论 -
测试LinkedList和ArrayList插入效率及遍历效率
1、主要目的是为了比较LinkedList和ArrayList的插入效率一级遍历效率,预期的结果是LinkedList比ArrayList插入效率高,但遍历效率低,下面用代码证明下。2、代码如下:package com.example.test;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;...原创 2018-06-28 14:05:49 · 1905 阅读 · 2 评论 -
FastJson 序列化 从json文件读取,并序列化成Java对象
1、先新增fastJson maven库<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId>...原创 2018-06-28 14:04:26 · 17106 阅读 · 0 评论 -
java排序 Comparator(其他不支持直接进行排序的类)
1、新建一个Student类package cn.myapp.test;public class Student { private String name; private Integer age; public Student(){} public Student(String name,Integer age){ this.name = name; this.age = age;...原创 2018-06-28 14:03:16 · 555 阅读 · 0 评论 -
Java排序 Comparable(实现Comparable接口)
1、首先新建第一个Student类/** * 排序测试 通过实现Comprable的compareTo方法进行排序 */public class Student implements Comparable<Student>{ private String name; private Integer age; //排序字段 private Long time; //排...原创 2018-06-28 14:02:08 · 6194 阅读 · 0 评论 -
RandomAccessFile文件读写
String fileName = "abcdef.txt";RandomAccessFile raf = new RandomAccessFile(fileName, "rw");String str = "123你好";byte[] b = str.getBytes("utf-8");raf.write(b);原创 2018-06-29 21:34:50 · 873 阅读 · 0 评论 -
类的实例化顺序
package com.company.demo1;public class ClassInit { public static void main(String[] args) { System.out.println("1"); new B(); }}class A { static { System.out.println("A的s...原创 2018-06-29 21:28:48 · 3620 阅读 · 1 评论 -
BigDecimal去掉末尾的0
package com.company.demo1;import java.math.BigDecimal;import java.text.NumberFormat;public class NumberTest { public static void main(String[] args) { NumberFormat nf = NumberFormat...原创 2018-06-29 21:26:02 · 2234 阅读 · 1 评论 -
Arrays.asList(T ..a) 调用 list.add方法报java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException解决方法在项目中对List进行操作时报错java.lang.UnsupportedOperationException,后来发现操作的List是由数组转换而成的,通过看源码发现问题,并写测试程序如下。 代码块:public class ListTest { public static void main(Strin...原创 2018-06-29 21:24:48 · 828 阅读 · 0 评论