-
根本原因是PATH顺序优先于JAVA_HOME,系统按PATH查找java命令,而JAVA_HOME仅被Maven等工具读取;PATH中靠前的旧版java会覆盖JAVA_HOME指向的新版本。
-
答案:Java环境搭建常见问题包括JDK配置错误、版本冲突、IDE识别失败及中文路径导致编译异常。需正确安装JDK并设置JAVA_HOME和PATH,确保命令行可用;统一JDK版本并在IDE中指定对应SDK;避免中文或空格路径以防止解析错误。
-
Java源文件编码必须与javac编译器指定编码一致,否则报非法字符错误;需显式用-encodingUTF-8、pom.xml配置、IDE编码设置等分别控制编译、运行、资源加载和终端输出四环节。
-
静态成员属于类而非实例,可通过类名直接访问。1.静态变量被所有实例共享,用于存储公共数据,如对象计数;2.静态方法可直接调用,常用于工具功能,不能访问非静态成员;3.静态块在类加载时执行一次,用于初始化静态资源。合理使用可提升效率。
-
DirectMemory由操作系统分配且不受JVM堆GC直接管理,通过ByteBuffer.allocateDirect()调用Unsafe.allocateMemory()实现,受-XX:MaxDirectMemorySize限制;回收依赖Cleaner(虚引用+ReferenceQueue)在GC后异步触发Unsafe.freeMemory()。
-
<p>Lambda表达式是Java8引入的函数式编程特性,可将代码作为数据传递,简化匿名内部类写法。其语法为(参数)->{操作},依赖函数式接口(如Runnable、Comparator)。常用于集合排序与遍历,如names.sort((a,b)->a.length()-b.length()),显著提升代码简洁性与可读性。</p>
-
Java并发编程核心是安全共享状态;start()创建新线程执行run(),直接调用run()仅为普通方法调用;volatile仅保证可见性不保证原子性;synchronized锁的是指定对象实例;submit()返回Future支持结果与异常处理,execute()则不。
-
finalize方法不可靠,不建议用于资源清理。其调用时机不确定,可能永不执行,导致资源泄漏;且带来性能开销,影响GC效率。推荐使用AutoCloseable、try-with-resources或Cleaner类进行显式资源管理。Java9起已将其标记为@Deprecated。
-
在Java中,通过构造器传参初始化对象属性与通过setter方法后续修改属性,本质区别在于语义设计:前者定义对象“是什么”,后者控制对象“如何变化”。
-
安装IntelliJIDEA社区版并配置JDK11或17;2.设置JAVA_HOME环境变量并验证java-version;3.在IDEA中新建Java项目,配置ProjectSDK并创建HelloWorld类;4.运行输出“Hello,Java!”确认环境成功。
-
Gradle插件无需安装,须在build.gradle中用plugins块声明;错误做法包括命令行安装、手动放JAR包;正确方式是通过pluginManagement配置仓库,优先使用gradlePluginPortal()并设镜像回退。
-
答案是使用ArrayList可动态存储和管理对象。需导入java.util.ArrayList,通过泛型创建实例,如ArrayList<String>list=newArrayList<>();调用add()添加元素,get()获取元素,size()获取长度,支持循环遍历,还提供remove、set、contains、clear等操作,灵活但非线程安全。
-
方法重载匹配遵循精确性优先原则:1.完全匹配;2.自动类型提升;3.装箱/拆箱;4.可变参数。引用类型选最具体子类,避免歧义调用。
-
Java不支持多重继承以避免菱形继承问题,通过接口实现多继承功能。接口仅定义方法签名,类可实现多个接口以获得多种行为,避免歧义。Java8起接口可含默认方法,但若多个接口有同名默认方法,实现类须重写以解决冲突。接口用于定义“能做什么”,强调行为规范;抽象类用于定义“是什么”,提供部分实现,适用于类间共享代码。优先使用接口定义协议,抽象类用于构建类骨架。当需模拟多重继承时,推荐组合(has-a)替代继承(is-a),如Car类包含Engine和Wheel实例;代理和AOP可用于增强功能而不修改原类。组合更常
-
retainAll本质是原地保留交集,直接修改调用方集合;需浅拷贝保原集合、确保equals/hashCode正确实现;参数为null抛NPE;性能优化关键在于将参数转HashSet以使contains达O(1)。