Java 初学者入门指南:常见问题 + 核心知识点 + 进阶 20 道练习题

这篇内容专门为Java 零基础新手打造,覆盖新手最容易踩坑的问题、必须掌握的核心基础知识点,最后附上 20 道有一定难度、适合巩固基础的编程题,帮你快速夯实 Java 基础。

一、Java 初学者最常遇到的问题与详解

1. 环境配置问题:JDK 安装、环境变量配置失败

  • 问题 :cmd 输入java -version/javac提示 "不是内部或外部命令"
  • 原因 :未配置JAVA_HOME、Path 环境变量,或 JDK 版本与系统不匹配
  • 解决
    1. 下载对应系统的 JDK8(新手首选,最稳定)
    2. 配置JAVA_HOME=JDK 安装路径
    3. Path 中添加%JAVA_HOME%\bin
    4. 重启 cmd 再验证命令

2. 大小写混淆、语法拼写错误

  • 问题String写成stringSystem写成system、分号漏写 / 写错
  • 原因 :Java 是强类型、严格大小写语言,关键字和类名必须严格匹配
  • 解决 :牢记 Java 规则:类名首字母大写、方法 / 变量首字母小写、语句必须以;结尾

3. 数据类型使用错误

  • 问题 :整数用double存储、字符串比较用==、数值溢出
  • 详解
    1. ==比较引用地址 ,字符串内容比较必须用equals()
    2. 整数用int/long,小数用double,布尔用boolean
    3. 超出类型范围会自动溢出,需选择合适类型

4. 流程控制逻辑混乱

  • 问题:if-else 嵌套报错、for 循环死循环、switch 语法错误
  • 原因:括号不匹配、条件写反、循环变量未更新
  • 解决:养成代码缩进习惯,先写框架再填逻辑,debug 单步执行排查

5. 数组使用报错

  • 问题 :数组下标越界ArrayIndexOutOfBoundsException、空指针异常
  • 原因:访问了数组不存在的下标(如长度 5,访问索引 5)、数组未初始化
  • 解决 :数组索引从0开始,最大索引 = 长度 - 1,使用前必须初始化

6. 方法定义与调用错误

  • 问题:方法返回值和定义不匹配、静态方法调用非静态成员报错
  • 详解
    1. static方法只能调用static成员,非静态需要创建对象
    2. 有返回值的方法必须return对应类型的值

7. 编译与运行命令错误

  • 问题.java文件编译成功,运行提示 "找不到主类"
  • 原因 :类名和文件名不一致、运行时带了.class后缀
  • 解决 :文件名 = 主类名,运行命令:java 类名(不加后缀)

二、Java 初期核心知识点(必掌握)

1. Java 基础语法

  • 关键字:publicclassstaticvoidiffor
  • 注释:单行//、多行/* */、文档注释/** */
  • 命名规范:见名知意,小驼峰(变量 / 方法)、大驼峰(类)

2. 变量与数据类型

  • 基本数据类型(8 种):byteshortintlongfloatdoublecharboolean
  • 引用数据类型:String、数组、类、接口
  • 变量定义:数据类型 变量名 = 值;

3. 运算符

  • 算术:+ - * / %
  • 关系:> < >= <= == !=
  • 逻辑:&& || !
  • 自增自减:++ --

4. 流程控制语句

  • 选择结构:if-elseif-else if-elseswitch-case
  • 循环结构:forwhiledo-while
  • 跳转语句:breakcontinuereturn

5. 数组

  • 定义:int[] arr = new int[5]; / int[] arr = {1,2,3};
  • 遍历:普通 for 循环、增强 for 循环
  • 核心:长度固定、索引从 0 开始

6. 方法(函数)

  • 定义格式:修饰符 返回值类型 方法名(参数列表){方法体}
  • 重载:方法名相同,参数列表不同(个数 / 类型 / 顺序)
  • 静态方法:static修饰,直接调用;非静态:需要对象调用

7. 面向对象基础

  • 类与对象:类是模板,对象是实例

  • 成员变量、成员方法、构造方法

  • 封装:私有成员变量,提供get/set方法

    三、20 道 Java 进阶练习题(含代码 + 解析)

    1. 数组原地反转

java 复制代码
public class Test1 {
    public static void reverse(int[] arr){
        int left = 0;
        int right = arr.length-1;
        while(left < right){
            int temp = arr[left];
            arr[left] = arr[right];
            arr[right] = temp;
            left++;
            right--;
        }
    }
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        reverse(a);
        for(int num:a) System.out.print(num+" ");
    }
}

思路:双指针首尾交换,无需新数组

2. 数组求最大、最小、总和、平均值

java 复制代码
public class Test2 {
    public static void main(String[] args) {
        int[] arr = {12,45,7,89,23};
        int max=arr[0],min=arr[0],sum=0;
        for(int i:arr){
            if(i>max) max=i;
            if(i<min) min=i;
            sum+=i;
        }
        double avg = sum*1.0/arr.length;
        System.out.println("最大:"+max+" 最小:"+min+" 和:"+sum+" 平均:"+avg);
    }
}

3. 统计数组奇偶个数

java 复制代码
public class Test3 {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        int ji=0,ou=0;
        for(int n:arr){
            if(n%2==0) ou++;
            else ji++;
        }
        System.out.println("奇数:"+ji+" 偶数:"+ou);
    }
}

4. 数组去重

java 复制代码
import java.util.ArrayList;
public class Test4 {
    public static void main(String[] args) {
        int[] arr = {1,1,2,2,3,3,4};
        ArrayList<Integer> list = new ArrayList<>();
        for(int n:arr){
            if(!list.contains(n)){
                list.add(n);
            }
        }
        System.out.println(list);
    }
}

5. 查找元素所有下标

java 复制代码
public class Test5 {
    public static void findIndex(int[] arr,int key){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                System.out.print(i+" ");
            }
        }
    }
    public static void main(String[] args) {
        int[] a={2,5,2,8,2};
        findIndex(a,2);
    }
}

6. 判断回文字符串

java 复制代码
public class Test6 {
    public static boolean isHuiWen(String s){
        int l=0,r=s.length()-1;
        while(l<r){
            if(s.charAt(l)!=s.charAt(r)) return false;
            l++;r--;
        }
        return true;
    }
    public static void main(String[] args) {
        System.out.println(isHuiWen("abcba"));
    }
}

7. 统计字符串大小写、数字、空格

java 复制代码
public class Test7 {
    public static void main(String[] args) {
        String str = "Abc 123 Xyz";
        int big=0,small=0,num=0,space=0;
        for(char c:str.toCharArray()){
            if(Character.isUpperCase(c)) big++;
            else if(Character.isLowerCase(c)) small++;
            else if(Character.isDigit(c)) num++;
            else if(c==' ') space++;
        }
        System.out.println("大写:"+big+" 小写:"+small+" 数字:"+num+" 空格:"+space);
    }
}

8. 自定义字符串截取

java 复制代码
public class Test8 {
    public static String subStr(String s,int start,int len){
        StringBuilder sb = new StringBuilder();
        for(int i=start;i<start+len&&i<s.length();i++){
            sb.append(s.charAt(i));
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        System.out.println(subStr("helloworld",2,3));
    }
}

9. 字符串大小写互换

java 复制代码
public class Test9 {
    public static String swapCase(String s){
        char[] ch = s.toCharArray();
        for(int i=0;i<ch.length;i++){
            if(Character.isUpperCase(ch[i])){
                ch[i] = Character.toLowerCase(ch[i]);
            }else if(Character.isLowerCase(ch[i])){
                ch[i] = Character.toUpperCase(ch[i]);
            }
        }
        return new String(ch);
    }
    public static void main(String[] args) {
        System.out.println(swapCase("AbC123"));
    }
}

10. 判断异位词

java 复制代码
import java.util.Arrays;
public class Test10 {
    public static boolean isYiWei(String s1,String s2){
        char[] c1 = s1.toCharArray();
        char[] c2 = s2.toCharArray();
        Arrays.sort(c1);
        Arrays.sort(c2);
        return Arrays.equals(c1,c2);
    }
    public static void main(String[] args) {
        System.out.println(isYiWei("listen","silent"));
    }
}

11. 判断闰年

java 复制代码
public class Test11 {
    public static boolean isRun(int year){
        return (year%4==0 && year%100!=0) || (year%400==0);
    }
    public static void main(String[] args) {
        System.out.println(isRun(2024));
    }
}

12. 三个数从大到小排序

java 复制代码
public class Test12 {
    public static void main(String[] args) {
        int a=3,b=1,c=5;
        int max,mid,min;
        max = Math.max(a,Math.max(b,c));
        min = Math.min(a,Math.min(b,c));
        mid = a+b+c-max-min;
        System.out.println(max+" "+mid+" "+min);
    }
}

13. 打印 99 乘法表

java 复制代码
public class Test13 {
    public static void main(String[] args) {
        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                System.out.print(j+"*"+i+"="+i*j+"\t");
            }
            System.out.println();
        }
    }
}

14. 1~100 所有素数

java 复制代码
public class Test14 {
    public static boolean isPrime(int n){
        if(n<2) return false;
        for(int i=2;i*i<=n;i++){
            if(n%i==0) return false;
        }
        return true;
    }
    public static void main(String[] args) {
        for(int i=2;i<=100;i++){
            if(isPrime(i)) System.out.print(i+" ");
        }
    }
}

15. 斐波那契数列

java 复制代码
public class Test15 {
    //循环
    public static int fib(int n){
        if(n<=2) return 1;
        int a=1,b=1,c=0;
        for(int i=3;i<=n;i++){
            c=a+b;
            a=b;
            b=c;
        }
        return c;
    }
    public static void main(String[] args) {
        System.out.println(fib(10));
    }
}

16. 猜数字游戏

java 复制代码
import java.util.Random;
import java.util.Scanner;
public class Test16 {
    public static void main(String[] args) {
        Random r = new Random();
        int num = r.nextInt(100)+1;
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.print("输入数字:");
            int guess = sc.nextInt();
            if(guess>num) System.out.println("大了");
            else if(guess<num) System.out.println("小了");
            else {System.out.println("猜对了");break;}
        }
    }
}

17. 最大公约数 + 最小公倍数

java 复制代码
public class Test17 {
    //辗转相除法
    public static int gcd(int a,int b){
        while(b!=0){
            int t = a%b;
            a=b;b=t;
        }
        return a;
    }
    public static void main(String[] args) {
        int a=12,b=18;
        int g = gcd(a,b);
        int lcm = a*b/g;
        System.out.println("最大公约数:"+g+" 最小公倍数:"+lcm);
    }
}

18. 判断几位数 + 逆序输出

java 复制代码
public class Test18 {
    public static void main(String[] args) {
        int n = 12345;
        int count=0,rev=0;
        while(n>0){
            rev=rev*10+n%10;
            n/=10;
            count++;
        }
        System.out.println("位数:"+count+" 逆序:"+rev);
    }
}

19. 冒泡排序

java 复制代码
public class Test19 {
    public static void bubbleSort(int[] arr){
        for(int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-1-i;j++){
                if(arr[j]>arr[j+1]){
                    int t=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=t;
                }
            }
        }
    }
    public static void main(String[] args) {
        int[] a={5,3,8,1,2};
        bubbleSort(a);
        for(int i:a) System.out.print(i+" ");
    }
}

20. 简易身份证校验

java 复制代码
public class Test20 {
    public static boolean checkId(String id){
        if(id.length()!=18) return false;
        for(int i=0;i<17;i++){
            if(!Character.isDigit(id.charAt(i))){
                return false;
            }
        }
        char last = id.charAt(17);
        return Character.isDigit(last)||last=='X'||last=='x';
    }
    public static void main(String[] args) {
        System.out.println(checkId("11010119990101123X"));
    }
}
相关推荐
_Evan_Yao2 小时前
限流的艺术:令牌桶与滑动窗口的博弈,以及我为何在 AI 项目中选择了后者
java·后端·架构
TheRouter3 小时前
OpenClaw 上下文瘦身:3 个实验
开发语言·python·ai
LIUAWEIO3 小时前
接口 data 满屏反斜杠,怎么展开?
java·开发语言·数据库·json在线解析·data是字符串·json转义·二次json
wjs20243 小时前
MySQL 删除数据表
开发语言
lsx2024063 小时前
Dockerfile详解
开发语言
大树学长3 小时前
【QT开发】Windows 10 + Qt 5.15.2 手动编译安装 Qt OPC UA 模块完整记录
开发语言·windows·qt
Evand J3 小时前
【课题推荐】强跟踪UKF算法,三维非线性状态量和观测量,附MATLAB代码测试结果
开发语言·算法·matlab