资讯动态

Java笔试题高频考点精讲(大厂面试必备)

发布时间:2026/8/6 20:33:21 来源:尧图企业网站定制
1. Java标识符规范与命名规则Java标识符是开发中最基础却最容易踩坑的知识点。我记得刚学Java时就因为用数字开头命名变量被编译器狠狠教育了一顿。大厂面试特别喜欢考察这类基本功下面这些细节你一定要注意合法字符范围只能用26个英文字母大小写敏感、数字0-9、下划线_和美元符$。我曾经见过有人用中文变量名虽然编译能通过但会被团队打死数字不能开头int 1stScore;这种写法直接编译报错。但你可以用score1把数字放后面类名与文件名的暧昧关系一个.java文件里可以包含多个类编译后每个类都会生成独立的.class文件当类被public修饰时这个类名必须与文件名完全一致最骚的是没有public修饰的类类名可以和文件名完全不同// 文件名为Animal.java class Dog { // 这个类名可以随便起 void bark() { System.out.println(Woof!); } } public class Animal { // 这个类名必须和文件名一致 public static void main(String[] args) { new Dog().bark(); } }2. 基本数据类型与自动装箱陷阱大厂面试最常问的就是float和long谁的范围大90%的初学者都会答错。先看这个经典题目Java基本数据类型中表示范围最大的是D A. short B. long C. int D. float内存占用与范围对比表类型字节数范围byte1-128 ~ 127short2-32768 ~ 32767int4-2^31 ~ 2^31-1long8-2^63 ~ 2^63-1float4约±3.4E38有效位数6-7位double8约±1.7E308有效位数15位虽然float只有4字节但它用IEEE 754浮点数标准范围比8字节的long大得多。但要注意精度问题float a 5; System.out.println(a%2); // 输出1.0 System.out.println(a%21); // 输出true System.out.println(a/2); // 输出2.5自动装箱的坑Integer x 127; Integer y 127; System.out.println(x y); // true Integer m 128; Integer n 128; System.out.println(m n); // false这是因为Integer缓存了-128~127的值超出范围会new新对象3. 循环结构与流程控制循环结构看似简单但大厂面试官能问出花来。比如这个阿里考过的题目outer: for(int i0; i3; i) { inner: for(int j0; j3; j) { if(i 1 j 1) break outer; System.out.println(i , j); } } // 输出什么循环要点总结循环条件必须是boolean类型for(int k0; k; k)这种C语言写法直接编译报错可以在循环前加标签用break 标签名跳出指定循环do-while至少执行一次末尾的分号千万别漏多个计数器可以用逗号分隔for(int i0,j10; ij; i,j--)死循环判断技巧for(int k0; k10; k--) // 死循环不考虑int溢出 for(int k0; k0; k) // 根本不会进入循环4. 局部变量与作用域陷阱局部变量是面试重灾区90%的笔试题都会考到初始化问题。看这道美团真题public class Test { public static void main(String[] args) { int x; System.out.println(x); // 编译错误 } }关键点局部变量必须显式初始化才能使用成员变量有默认值int为0对象为null作用域范围要特别注意for(int i0; i3; i) { System.out.println(i); } System.out.println(i); // 编译错误i只在for循环内有效三元运算符的坑Object o true ? new Integer(1) : new Double(2.0); System.out.println(o); // 输出1.0 不是1当三元运算符两个表达式类型不同时会自动向范围大的类型转型5. 运算符与表达式求值运算符的优先级和求值顺序是高频考点。看这道字节跳动面试题int i 1; int j i * 2 3 * --i; System.out.println(i i , j j); // 输出什么分步解析i先取值1参与运算然后i变为2--i先减1变为1再取值1参与运算最终计算12 31 5结果i1, j5位运算实战System.out.println(4 5); // 输出4 // 4: 0100 // 5: 0101 // : 0100 46. 数组与内存模型数组相关题目几乎必考特别是初始化方式和越界问题。看这道腾讯真题int[] arr1 new int[3]; // 正确 int[] arr2 {1,2,3}; // 正确 int[] arr3 new int[]{1,2,3}; // 正确 int[] arr4 new int[3]{1,2,3}; // 编译错误数组要点静态初始化不需要指定长度动态初始化需要指定长度数组越界抛出ArrayIndexOutOfBoundsException多维数组其实是数组的数组内存模型示例int[] a {1,2,3}; int[] b a; b[0] 100; System.out.println(a[0]); // 输出100因为指向同一内存7. 字符串特性与API字符串相关的题目主要考察不可变性和常用方法。看这道阿里笔试题String str aa.bb.cc; String[] arr str.split(.); System.out.println(arr.length); // 输出0为什么正确写法String[] arr str.split(\\.); // 需要转义字符串不可变性证明String s hello; s.concat( world); System.out.println(s); // 仍然输出hello字符串比较的坑String s1 new String(java); String s2 new String(java); System.out.println(s1 s2); // false System.out.println(s1.equals(s2)); // true8. 面向对象核心概念面向对象是Java的灵魂大厂面试必考。看这道百度面试题class A { int value 10; } class B extends A { int value 20; } public class Main { public static void main(String[] args) { A a new B(); System.out.println(a.value); // 输出10还是20 } }关键结论属性没有多态看引用类型方法有多态看实际对象类型静态方法也没有多态构造器调用链class Parent { Parent() { System.out.println(Parent); } } class Child extends Parent { Child() { System.out.println(Child); } } // new Child() 输出 // Parent // Child9. 异常处理机制异常处理看似简单但陷阱很多。看这道美团面试题try { int a 1/0; } catch (Exception e) { System.out.println(Exception); } catch (ArithmeticException e) { System.out.println(ArithmeticException); }问题分析编译错误因为ArithmeticException是Exception的子类捕获顺序必须从子类到父类finally块唯一能覆盖return的情况try { return 1; } finally { return 2; // 最终返回2 }10. 综合实战JVM类加载机制最后来看一道综合性的京东面试题public class Singleton { private static Singleton instance new Singleton(); private static int count1; private static int count2 0; private Singleton() { count1; count2; } public static Singleton getInstance() { return instance; } } public class Test { public static void main(String[] args) { Singleton.getInstance(); System.out.println(count1 Singleton.count1); System.out.println(count2 Singleton.count2); } }执行流程解析类加载时按顺序初始化静态变量先执行new Singleton()此时count1和count2都变为1然后count1没有赋值操作保持1最后count2被显式赋值为0输出结果count11, count20这个例子完美展示了静态变量初始化的顺序陷阱也是大厂喜欢考察的难点之一。在实际开发中我建议把静态变量初始化放在静态代码块中这样逻辑更清晰

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价