-
Java类的访问控制仅支持public和包私有(默认)两种修饰符,顶级类不可用private或protected;包私有类用于模块内高内聚封装,内部类才支持private/protected修饰。
-
首先设计Product类封装商品信息,包含id、name、price、category等字段;接着用List模拟数据库,实现获取全部商品、按分类查询和关键词搜索方法;然后通过Java自带HttpServer创建Web服务,监听8080端口,提供/products、/products/category和/products/search三个接口返回JSON数据;最后编写HTML页面,使用JavaScript的fetch请求加载商品并渲染为卡片列表,支持下拉选择分类和输入框实时搜索,完成基础浏览功能。
-
ThreadLocal通过为每个线程提供独立变量副本实现数据隔离,避免同步开销。其原理是依赖线程的ThreadLocalMap存储以ThreadLocal为键、变量副本为值的映射。核心方法包括set、get、remove和initialValue。示例中用ThreadLocal封装SimpleDateFormat,确保线程安全;InheritableThreadLocal可使子线程继承父线程的值,但仅在创建时生效。使用时应将ThreadLocal声明为privatestatic,及时调用remove防止内
-
ProcessBuilder不能直接执行含管道、重定向或通配符的shell命令,因其不经过shell解析;需显式调用/bin/sh-c(Linux/macOS)或cmd/c(Windows),并将完整命令作为单个字符串参数传入,同时注意及时读取输入输出流以防阻塞。
-
多态的核心是父类引用指向子类对象并结合方法重写,通过动态绑定在运行时确定具体方法调用。1.继承与重写是基础,子类继承父类并重写方法;2.向上转型允许父类引用指向子类对象,如Animala=newDog();3.JVM通过虚方法表实现运行时方法绑定,根据实际对象类型调用对应方法;4.多态提升代码扩展性与可维护性,符合开闭原则,支持通用方法处理不同子类对象。
-
Java中线程间通信最基础方式是wait()、notify()、notifyAll()配合synchronized使用,三者属Object类方法,必须在同步上下文中调用,否则抛IllegalMonitorStateException;wait()释放锁并等待,notify()唤醒一个等待线程,notifyAll()唤醒全部;需用while循环检查条件防虚假唤醒,且须确保监视器对象一致。
-
AtomicLongFieldUpdater是基于反射的原子更新器,用于对volatilelong字段进行无锁CAS更新,不创建额外对象,适合高频更新、内存敏感场景;需注意字段必须为public/protectedvolatilelong,且updater类须能访问该字段。
-
答案:&&是短路与,左边为false时右边不执行;&是逻辑与且不短路,两边均计算,还可用于按位与操作。
-
当使用Scanner的nextDouble()等方法读取非匹配类型输入时,会抛出InputMismatchException而非NumberFormatException,若catch块未正确声明该异常类型,则异常将未被捕获而直接终止程序。
-
Java8u161+及主流OpenJDK默认支持无限制加密强度,无需手动配置JCE;若Cipher.getMaxAllowedKeyLength("AES")返回128,需升级JDK或旧版中替换local_policy.jar和US_export_policy.jar。
-
Java序列化是将运行中对象(含字段值、引用关系)转为字节流,仅保存实例状态,不保存方法、静态变量;反序列化则重建等价对象。必须实现Serializable接口以通过JVM许可检查,该接口为标记接口;未实现则运行时抛NotSerializableException;父类未实现时其字段丢失;内部类序列化要求外部类也实现;建议显式声明serialVersionUID避免InvalidClassException;static和transient字段不参与序列化,transient字段反序列化后为默认值,且全过
-
Java中默认构造方法仅在类未显式定义任何构造方法且非匿名类、接口或枚举时由编译器自动生成,具有与类相同的访问修饰符并隐式调用super()。
-
线程结束需通过逻辑控制实现,1.正常运行结束:run()方法执行完毕后自动终止,适合处理完任务的场景;2.中断机制:调用interrupt()通知线程,通过isInterrupted()检查状态或捕获InterruptedException实现优雅退出;3.volatile标志位:定义volatileboolean变量,线程定期检查该标志并退出。推荐使用中断或标志位方式,避免stop()等不安全方法导致的问题。
-
Java集合对null支持差异显著:ArrayList/LinkedList允许任意位置存null;HashMap/LinkedHashMap允许一个null键和多个null值;TreeMap/TreeSet完全禁止null;ConcurrentHashMap拒绝null键值,CopyOnWriteArrayList允许add(null)。
-
双亲委派被打破的典型信号是NoClassDefFoundError或ClassNotFoundException发生在同一类名、不同模块间;本质是当前ClassLoader找不到类而父加载器却有,需检查加载器链及OSGi的Import-Package声明。