java教程技术文章
-
继承表达“is-a”关系,如Dog是Animal;误用会导致语义错误和扩展困难;子类构造时父类先初始化;private成员不参与继承;Java只支持单继承,应结合组合与接口使用。399 收藏 -
HashMap基本声明需配对泛型,推荐用Map<String,User>userMap=newHashMap<>();,避免类型擦除导致ClassCastException;支持一个null键和多个null值;遍历时优先entrySet()提升性能;初始化时预估容量可减少扩容开销。129 收藏 -
MirroredTypeException是注解处理器因引用类未加载或不可见而抛出的编译期异常;需通过TypeMirror和Types/Elements工具安全操作类型,避免强转Class,并容错处理不可见类型。118 收藏 -
Runtime.maxMemory()返回的是JVM堆内存上限,即-Xmx参数值,不包括元空间、直接内存等;在容器中若未启用-XX:+UseContainerSupport,会误读宿主机内存。336 收藏 -
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。344 收藏 -
Math.log()返回自然对数(ln),非常用对数(log₁₀);需用Math.log(x)/Math.LN10或封装log10函数;Math.exp()是计算e^x的最优方式,比Math.pow(Math.E,x)更准更快;log与exp互为反函数但浮点下存在微小误差。274 收藏 -
创建项目时可直接将位置设为桌面路径,项目即保存在桌面;2.已有项目可通过文件系统复制整个项目文件夹至桌面;3.之后可在IDEA中通过打开桌面项目文件夹重新加载项目。关键在于手动管理项目路径,因IDEA无“保存到桌面”功能,实际是通过复制或指定路径实现项目在桌面的存储与访问。239 收藏 -
for循环适用于已知循环次数的场景,其语法为for(初始化;条件;更新){执行语句},如打印1到5:for(inti=1;i<=5;i++)System.out.println(i);228 收藏 -
do-while循环适合“先执行、再判断”的交互场景,如命令行工具中执行操作后询问是否继续;它保证至少执行一次,需用nextLine()处理输入残留,并校验空输入与大小写,可封装为askContinue方法复用。432 收藏 -
Java无法直接用do-while实现非阻塞I/O轮询通讯,因JVM缺乏对UART/I²C/BLE等外设的原生非阻塞支持;do-while仅用于带退出条件的有限重试或数据拼包,真正的低功耗需依赖中断、回调或底层epoll/poll机制。146 收藏 -
String.intern()对低基数字符串特别有效,因其通过常量池复用相同内容对象,将千万级重复字符串实例减至个位数,但仅适用于取值少、重复高、生命周期长的字段,需避免高基数或冗余数组字符串的误用。158 收藏 -
ulp是浮点数的最小可分辨差值,即相邻可表示浮点数间的距离;它随数值增大而增大、符号不影响、float精度低于double,用于量化“0.1+0.2≠0.3”的误差量级。440 收藏 -
数组实现拓扑排序检测依赖环的核心是Kahn算法:用入度数组记录各变量被依赖次数,邻接表数组记录其直接依赖项;通过静态数组模拟队列进行BFS式剥离,最终若处理节点数cnt等于n则无环,否则存在环。106 收藏 -
Java自定义异常应继承RuntimeException,用结构化错误码枚举(如ORDER_NOT_FOUND)替代字符串,提供三类构造函数并正确调用super,上下文信息存入context字段而非message。333 收藏 -
ATM类设计需保证线程安全:账户余额用AtomicInteger或synchronized保护;Account与ATM解耦;余额操作返回boolean;避免在getter/toString中做业务判断;withdraw需严格参数校验。222 收藏