-
包可见性是Java中一种恰到好处的封装手段,使成员仅对同包类可见,兼顾内聚协作与边界控制,需配合功能导向包结构和同包测试实践。
-
InetAddress.getLocalHost()返回127.0.0.1是因主机名被解析为localhost,应遍历网卡获取真实局域网IP;getByName()失败多因DNS缓存、IPv6优先或防火墙;isReachable()在Windows下不可靠;getCanonicalHostName()强制正反向DNS解析确保FQDN。
-
Java字符串转义最易出错的是反斜杠(\\)和双引号(\"),因编译期解析导致路径、正则、JSON等场景需双重转义;Unicode转义\uXXXX须4位且UTF-8编码;应优先使用专用序列化库而非手动拼接。
-
抽象类构造方法是子类对象创建时强制执行父类初始化逻辑的唯一时机,通过super()调用完成final字段校验赋值、共享资源注入,并禁止调用抽象方法,且子类必须显式调用super()。
-
JAVA_HOME指向哪个目录才真正有效必须指向JDK的根目录,不是JRE目录,也不是bin子目录。常见错误是把JAVA_HOME设成C:\ProgramFiles\Java\jdk-17.0.1\bin——这会导致几乎所有依赖它的工具(如Maven、Gradle、IDE)报“找不到Java”或“java.lang.NoClassDefFoundError”。JDK根目录下得有lib、jre(或conf)、bin三个关键子目录。✅正确示例:C:\Program
-
transient仅在Java原生序列化(ObjectOutputStream/ObjectInputStream)中生效,要求类实现Serializable且字段为非static、非final的实例变量;在JSON、日志、数据库、HTTP等场景中完全无效。
-
thenCompose()用于扁平化嵌套CompletableFuture,要求函数直接返回CompletableFuture以避免类型嵌套;而thenApply()会生成CompletableFuture<CompletableFuture<T>>,导致类型错误和运行时异常。
-
答案:简易票务管理系统通过面向对象设计实现购票、查询、退票等功能,核心类包括TicketItem和TicketSystem,结合集合与IO操作,支持菜单驱动交互,可扩展文件存储与异常处理以提升实用性。
-
程序计数器只存当前线程正在执行的字节码指令地址(如0x000a),是线程私有、静态分配、无溢出风险的极小内存区域,不会触发OutOfMemoryError。
-
线程间通信的核心是协调执行顺序和共享数据,主要通过共享内存与同步机制实现。常用方式包括:使用wait()、notify()在synchronized中实现基础通信,适用于生产者-消费者模型;ReentrantLock配合Condition提供更精准的等待唤醒控制;BlockingQueue封装了线程安全与阻塞操作,简化生产者-消费者场景开发;此外还可选用CountDownLatch、CyclicBarrier等工具满足特定需求。选择依据为:简单场景用wait/notify,复杂控制用ReentrantLo
-
本文介绍如何使用Java的Scanner类高效读取文本文件中每行开头的整数,自动跳过行内注释及剩余字符,并将结果输出或存入数组,避免因next()或nextLine()混用导致的解析错乱。
-
成员变量属于对象,静态变量属于类本身;前者各对象独立副本、堆内存分配、需实例访问、可被子类隐藏;后者所有对象共享、方法区分配、可类名访问、仅能被隐藏、静态方法不可直接访问。
-
Scanner.nextLine()读一行即结束是因前序nextInt()等方法残留换行符被其立即消费;应统一用nextLine()后转换类型,或显式指定编码、改用BufferedReader。
-
Java运算符分为算术、关系、逻辑、赋值、位运算和条件六类:算术支持数值计算与自增减;关系返回布尔值;逻辑具短路特性;赋值含复合形式;位运算操作二进制;三元实现简洁条件分支。
-
MyBatis插件通过JDK动态代理拦截Executor、StatementHandler、ParameterHandler、ResultSetHandler四大接口对象,仅在Configuration创建对象时经InterceptorChain.pluginAll()包装才生效。