avatar
文章
360
标签
49
分类
10
首页
时间轴
分类
关于
Logo只有那年胜过年年
搜索
首页
时间轴
分类
关于

只有那年胜过年年

Java 自定义 ClassLoader 实战
发表于2025-10-15|后端
假如我们的类不在classpath下,而我们又想读取一个自定义的目录下的class,如果做呢? 读取自定义目录的类示例读取c:/test/com/test.jdk/Key.class这个类。 package com.test.jdk; public class Key { private String key = "111111"; } 自定义ClassLoaderimport org.apache.commons.io.IOUtils; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class LocalClassLoader extends ClassLoader { private String path = "c:/test/"; @Overrid...
hashCode 和 identityHashCode 的区别你知道吗?
发表于2025-10-15|后端
hashCode关于hashCode参考之前的文章,点击参考之前文章。 identityHashCodeidentityHashCode是System里面提供的本地方法,java.lang.System#identityHashCode。 /** * Returns the same hash code for the given object as * would be returned by the default method hashCode(), * whether or not the given object's class overrides * hashCode(). * The hash code for the null reference is zero. * * @param x object for which the hashCode is to be calculated * @return the hashCode * @since JDK1.1 */ public static native...
不能用 + 拼接字符串? 这次我要吊打面试官!
发表于2025-10-15|后端
我们做 Java 程序员以来,不管是工作当中,还是面试过程中,都知道:字符串拼接不能用 String,要用 StringBuilder 或者是 StringBuffer,以至于它们都被滥用了。 StringBuilder、StringBuffer 简称:SB,下文统一用 SB 代替。 SB它们都是可变的字符串,它们之间的区别也是 Java 初中级面试战场上出现几率十分高的一道题,上场率没有 90% 也有 80% 吧。 这两个的具体区别请看这篇文章:StringBuffer 和 StringBuilder 的 3 个区别。 我们反过来想下,String真的是不可变的么?不一定,看下这篇:Java 中的 String 真的是不可变的吗? 当然,本文不是讨论字符串可变与不可变的问题,而是讨论:字符串拼接一定要用 SB 吗?为什么不能用 + ?能不能用 + ?什么时候可以用 + ? 为什么不能用 + 号拼接字符串?我不服,接下来我要吊打面试官! 什么时候不能用 +通过多个表达式完成一个字符串拼接操作。 private void test1() { String www ...
别再写 bug 了,避免空指针的 5 个案例!
发表于2025-10-15|后端
空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题。 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针。 什么是空指针?当一个变量的值为 null 时,在 Java 里面表示一个不存在的空对象,没有实际内容,没有给它分配内存,null 也是对象成员变量的默认值。 所以,一个对象如果没有进行初始化操作,这时候,如果你调用这个对象的方法或者变量,就会出现空指针异常。 如下面示例会发生空指针异常: Object object = null; String string = object.toString(); 从类结构图来看,空指针它是属于运行时异常 RuntimeException 的子类,它不是捕获型的,只有在程序运行时才可能报出来,而且会造成程序中断。 什么是运行时异常及异常的分类请看这篇文章:一张图搞清楚 Java 异常机制。 如何避免空指针?下面说几个空指针的几个最常见的案例及解决之道。 1、字符串比较,常量放前面if(status.equals(SUCCESS)){ ...
金融系统中正确的金额计算及存储方式
发表于2025-10-15|后端
经典的精度丢失问题 Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面的示例。 public static void main(String[] args) { test1(); test2(); } private static void test1() { double totalAmount = 0.09; double feeAmount = 0.02; double tradeAmount = totalAmount - feeAmount; System.out.println(tradeAmount); } 上面的程序输出结果是多少? 0.07?非也! 正确的结果是: 0.06999999999999999 为什么是这样? 浮点数可能丢失精度,浮点十进制数通常没有完全相同的二进制的表示形式,这是CPU所采用的浮点数据表示形式的副作用。为此,可能会有一些精度丢失,并且一些浮点运算可能会产生未知的结果。 浮点运算很少是精确的,只要是超过精度能表示的范围就...
字符串 substring 方法在 JDK 6,7,8 中的差异。
发表于2025-10-15|后端
标题中的substring方法指的是字符串的substring(int beginIndex, int endIndex)方法,这个方法在jdk6,7是有差异的。 substring有什么用?substring返回的是字符串索引位置beginIndex开始,endIndex-1结束的字符串。 来看这个例子: String x = "abcdef"; x = x.substring(1,3); System.out.println(x); 输出: bc 下面看看在JDK之间,它们的实现原理有什么不一样,及值得注意的地方。 JDK 6String背后是由char数组构成的,在JDK6中,String包含三个字段:char value[], int offset, int count,意思很简单。 substring被调用时,它会创建一个新的字符串,但字符串的值还指向堆中同样的字符数组。它们的区别只是数量和下标引用不一样,如图所示。 JDK6中的部分源码可以说明这个问题。 //JDK 6 String(int offset...
Java 类初始化顺序,3个示例带你躺坑。
发表于2025-10-15|后端
最近发现微信群里面有些群友在讨论类的初始化顺序,如类的静态变量、成员变量、静态代码块、非静态代码块、构造器,及继承父类时,它们的初始化顺序都是怎样的,下面我通过例子来说明这个情况,以免被人误导。 示例1:测试单类的初始化顺序public class ClassInitOrderTest { public static String staticField = "static field"; static { System.out.println(staticField); System.out.println("static block"); } private String field = "member field"; { System.out.println(field); System.out.println("non-static block"); } public ClassIni...
面试问我 Java 逃逸分析,瞬间被秒杀了。
发表于2025-10-15|后端
记得几年前有一次栈长去面试,问到了这么一个问题: Java中的对象都是在堆中分配吗?说明为什么! 当时我被问得一脸蒙逼,瞬间被秒杀得体无完肤,当时我压根就不知道他在考什么知识点,难道对象不是在堆中分配吗?最后就没然后了,回去等通知了。。 这个面试题很经典,我最近也分享到了知识星球上面: 回答很精彩,大家可以加入一起搞技术,我现在将答案总结一下给大家。 什么是逃逸分析?关于 Java 逃逸分析的定义: 逃逸分析(Escape Analysis)简单来讲就是,Java Hotspot 虚拟机可以分析新创建对象的使用范围,并决定是否在 Java 堆上分配内存的一项技术。 逃逸分析的 JVM 参数如下: 开启逃逸分析:-XX:+DoEscapeAnalysis 关闭逃逸分析:-XX:-DoEscapeAnalysis 显示分析结果:-XX:+PrintEscapeAnalysis 逃逸分析技术在 Java SE 6u23+ 开始支持,并默认设置为启用状态,可以不用额外加这个参数。 逃逸分析算法Java Hotspot 编译器实现下面论文中描述的逃逸算法: [Choi99] Jo...
神奇,教你用随机数打印hello world
发表于2025-10-15|后端
下面是一段随机数程序。 public static void main(String[] args) { System.out.println(randomString(-229985452) + " " + randomString(-147909649)); } public static String randomString(int seed) { Random ran = new Random(seed); StringBuilder sb = new StringBuilder(); while (true) { int k = ran.nextInt(27); if (k == 0) { break; } sb.append((char) ('`' + k)); } return sb.toString(); } 每次都会输出:hello world,这是为...
Java 10 局部变量类型推断介绍及实战
发表于2025-10-15|后端
现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了。 今天要实战的是 Java 10 中最重要的特性:局部变量类型推断,大家都知道是 var 关键字,但具体怎么使用,及要注意什么要点呢? 我们通过几个例子来讲解局部变量类型推断这个新特性! 什么是局部变量类型推断var javastack = "javastack"; System.out.println(javastack); 大家看出来了,局部变量类型推断就是左边的类型直接使用 var 定义,而不用写具体的类型,编译器能根据右边的表达式自动推断类型,如上面的 String 。 var javastack = "javastack"; 就等于: String javastack = "javastack"; 局部变量类型推断使用示例既然叫局部变量类型推断,以只能用在局部变量中,下面给出更多使用示例。 1、字面量定义局部变量 private sta...
1…293031…36
avatar
2025
文章
360
标签
49
分类
10
公告
🌸 春去秋来,花开花落 📚 桌上的日历又薄了几页 💭 记忆中的昨天还那么清晰
最新文章
掌握 Spring 框架这 10 个扩展点,开发效率直接翻倍2025-11-10
Minikube安装教程2025-11-07
Deepseek 本地部署各个版本超级详细教学,网页版、软件版2025-11-04
Slow HTTP POST 慢速攻击2025-10-30
JDK 紧急漏洞,XMLDecoder反序列化攻击2025-10-30
分类
  • 其他3
  • 区块链4
  • 后端225
  • 安全漏洞3
  • 工具30
  • 性能4
  • 教程1
  • 数据库21
  • 架构15
  • 程序人生54
标签
文章LinuxJVM分布式技术其他区块链基础安全漏洞多线程性能优化新特性架构算法程序人生行业动态规范资料集合进阶面试Elastic JobdockerJWTDubboMyBatisNettyShiroSpringSpring MVCSpring CloudTomcatSpring BootZookeeper日志开源综合技术消息队列缓存连接池Eclipse
归档
  • 2025年11月 3
  • 2025年10月 355
  • 2025年09月 1
  • 2024年12月 1
网站信息
文章数目 :
360
本站访客数 :
本站总浏览量 :
最后更新时间 :
访客地图
© 2025 By 2025
搜索
数据加载中