-
抽象类能有构造函数而接口不能,因抽象类是类可初始化资源,接口仅为契约声明;抽象类支持访问控制和共享行为,接口仅定义公共能力契约。
-
UUID.randomUUID()是最常用也最容易出错的起点Java里生成唯一ID,UUID.randomUUID()是第一反应,但它生成的是128位随机UUID(version4),不是递增、不带时间信息、字符串长度固定36字符(含4个短横线)。很多人直接用它当数据库主键,结果发现索引性能差、存储冗余、排查日志时还得手动去掉短横线。别在高频插入场景(比如订单流水表)直接用UUID.randomUUID().toString()作主键——B+树索引会因随机写导致页分裂严
-
Java中OOP是强制范式,class为唯一类型定义单元,所有对象(除基本类型)均为Object子类;构造器须封装初始化约束,private字段+构造注入优于public裸露,setter需业务校验,集合返回应不可变或副本,继承需严格方法签名一致与@Override,优先组合而非继承。
-
while循环适用于循环次数不确定、依赖运行时条件判断的场景,如读取用户输入直到合法、处理流式数据至结束标记、轮询状态是否就绪等。
-
答案:Java集合框架非线程安全,可通过Collections.synchronized包装、并发集合类或同步代码块实现线程安全;如ConcurrentHashMap适用于高并发读写,CopyOnWriteArrayList适合读多写少场景,复合操作需额外加锁。
-
Optional仅适用于方法返回值,禁用于实体字段、构造参数和setter入参;避免多层flatMap链式调用;优先使用orElseGet而非orElse以防性能隐患;禁用get()和isPresent()+get()反模式;注意第三方库对Optional支持有限。
-
Arrays类提供数组排序、查找、比较、填充、转换等静态方法,如sort()排序、binarySearch()二分查找(需先排序)、equals()比较、fill()填充、asList()转列表、copyOf()复制及toString()转字符串,提升开发效率。
-
首先确保JDK已安装并正确配置JAVA_HOME环境变量,接着在Eclipse中添加JDK路径;其次选用EclipseJava开发版或手动安装JDT等插件;然后通过新建JavaProject或添加JavaNature启用Java支持;最后可选安装M2E、Buildship、SpringTools等插件提升效率。
-
DuplicateKeyException实际由数据库驱动抛出,MyBatis仅做包装;Spring通过异常翻译器将其统一转换,需确保spring-jdbc在classpath且配置了DataSourceTransactionManager。
-
本文介绍如何在Java的FluentAPI(如WebClient)链式调用中,不破坏链式结构的前提下,根据布尔条件选择性执行某一步操作(如添加请求头),避免显式if-else分支导致的代码断裂。
-
不是必须,但publicstaticfinal是定义常量的标准写法:public提供访问,static确保类级共享,final保证不可变;其中基本类型和String字面量为编译期常量,其余为运行期初始化。
-
Java中调用子类特有方法需向下转型,但存在ClassCastException风险;应先用instanceof判断或通过抽象/默认方法上移行为,避免盲目强转。
-
答案:Java可通过HttpURLConnection实现文件上传,客户端使用multipart/form-data格式发送文件,服务端用SpringBoot接收并保存。需注意boundary唯一性、内容类型设置、大文件分块读写及安全校验,适用于小项目或学习场景。
-
Gson泛型反序列化需用TypeToken获取真实类型,因Java泛型运行时被擦除;必须匿名继承TypeToken并调用getType(),否则无法正确解析嵌套泛型或泛型字段。
-
使用Comparator配合Arrays.sort()实现逆序排序的关键是翻转比较逻辑,如b-a或b.compareTo(a),推荐用reversed()方法确保健壮性。