杰瑞科技汇

Java程序设计基础教程该怎么学?

Java程序设计基础教程

前言:为什么选择Java?

Java是一门非常流行且强大的编程语言,由Sun Microsystems(现已被Oracle收购)于1995年推出,它的核心优势在于:

Java程序设计基础教程该怎么学?-图1
(图片来源网络,侵删)
  • 跨平台性:一次编写,到处运行(Write Once, Run Anywhere),Java代码被编译成与平台无关的字节码,然后在Java虚拟机上运行。
  • 面向对象:Java是一门纯粹的面向对象编程语言,有助于构建可维护、可扩展的大型应用程序。
  • 健壮性:拥有强大的异常处理机制和自动内存管理(垃圾回收),减少了程序崩溃的风险。
  • 安全性:内置的安全机制使其非常适合网络应用。
  • 丰富的生态系统:拥有庞大的开源库(如Spring, Hibernate)、框架和社区支持,从移动开发到企业级应用无所不包。

第一部分:Java入门与环境搭建

第1章:Java简介与开发环境

1 什么是Java? Java不仅是一门编程语言,还是一个包含运行环境(JVM)、类库(Java API)和开发工具(如JDK)的完整平台。

  • JDK (Java Development Kit):Java开发工具包,包含了编译器(javac)、运行时环境(JRE)和其它开发工具,开发者需要安装JDK。
  • JRE (Java Runtime Environment):Java运行时环境,包含了JVM和Java核心类库,只需要运行Java程序的用户需要安装JRE。
  • JVM (Java Virtual Machine):Java虚拟机,是Java跨平台的核心,它负责加载.class文件(字节码)并解释执行。

2 安装JDK

  1. 下载:访问Oracle官网或OpenJDK官网,下载适合你操作系统的最新LTS(长期支持)版本的JDK。
  2. 安装:双击安装包,按照提示完成安装,记住安装路径,C:\Program Files\Java\jdk-17
  3. 配置环境变量
    • JAVA_HOME:新建一个系统环境变量,值为你的JDK安装根目录(C:\Program Files\Java\jdk-17)。
    • Path:在Path变量中,新建两项,分别指向 %JAVA_HOME%\bin%JAVA_HOME%\jre\bin,这样你就可以在命令行的任何位置使用javajavac命令了。

3 第一个Java程序:Hello World

创建一个名为 HelloWorld.java 的文件,并输入以下代码:

Java程序设计基础教程该怎么学?-图2
(图片来源网络,侵删)
// HelloWorld.java
// 1. 定义一个类,类名必须和文件名一致
public class HelloWorld {
    // 2. 程序的入口点,main方法
    public static void main(String[] args) {
        // 3. 在控制台打印输出 "Hello, World!"
        System.out.println("Hello, World!");
    }
}

编译与运行:

  1. 打开命令行(Windows的CMD或PowerShell,macOS/Linux的Terminal)。
  2. 使用 cd 命令切换到 HelloWorld.java 文件所在的目录。
  3. 编译:输入 javac HelloWorld.java,如果成功,会生成一个 HelloWorld.class 文件。
  4. 运行:输入 java HelloWorld,注意,这里不需要加 .class 后缀,如果成功,命令行会输出 Hello, World!

第二部分:Java语言核心基础

第2章:基本语法

1 关键字与标识符

  • 关键字:Java中具有特殊含义的单词,如 public, class, void, static 等,不能用作变量名或类名。
  • 标识符:程序员自己命名的名字,如类名、变量名、方法名,规则:由字母、数字、下划线_或美元符组成,不能以数字开头,且不能是关键字。

2 数据类型 Java是强类型语言,每个变量都必须先声明类型再使用。

  • 基本数据类型

    Java程序设计基础教程该怎么学?-图3
    (图片来源网络,侵删)
    • 整数byte (1字节), short (2字节), int (4字节), long (8字节),定义long类型需在数字后加Ll,如 long l = 100L;
    • 浮点数float (4字节), double (8字节),定义float类型需在数字后加Ff,如 float f = 3.14F;double是默认的小数类型。
    • 字符char (2字节),用单引号括起来,如 char c = 'A';
    • 布尔值boolean,只有 truefalse 两个值。
  • 引用数据类型

    • :如 String
    • 接口:如 Runnable
    • 数组:如 int[]

3 变量与常量

  • 变量:存储数据的基本单元,可以改变其值。
    int age = 18; // 声明并初始化
    String name = "张三";
    age = 19; // 修改变量的值
  • 常量:使用 final 关键字修饰,一旦赋值后不能再改变。
    final double PI = 3.14159;
    // PI = 3.14; // 这行代码会编译错误

4 运算符

  • 算术运算符:, , , , (取余), (自增), (自减)。
  • 关系运算符:, , >, <, >=, <=,返回 boolean 值。
  • 逻辑运算符&& (与), (或), (非),用于连接多个布尔表达式。
  • 赋值运算符:, , , , 。

示例:

int a = 10, b = 20;
int sum = a + b;
boolean isEqual = (a == b); // false
boolean isGreater = (a > 5 && b < 30); // true

第3章:流程控制

1 条件语句

  • if-else
    int score = 85;
    if (score >= 90) {
        System.out.println("优秀");
    } else if (score >= 60) {
        System.out.println("及格");
    } else {
        System.out.println("不及格");
    }
  • switch:适用于多分支选择。
    int day = 3;
    switch (day) {
        case 1:
            System.out.println("星期一");
            break;
        case 2:
            System.out.println("星期二");
            break;
        case 3:
            System.out.println("星期三");
            break;
        default:
            System.out.println("其他天");
    }

2 循环语句

  • for循环:用于明确知道循环次数的场景。
    // 打印1到5
    for (int i = 1; i <= 5; i++) {
        System.out.println(i);
    }
  • while循环:用于在条件为真时重复执行代码块。
    int count = 0;
    while (count < 5) {
        System.out.println("Count is: " + count);
        count++;
    }
  • do-while循环:至少执行一次循环体,然后再判断条件。
    int num = 0;
    do {
        System.out.println("Num is: " + num);
        num++;
    } while (num < 5);

3 跳转语句

  • break:立即退出当前循环或switch语句。
  • continue:跳过当前循环的剩余部分,直接进入下一次循环。

第4章:数组

数组是一个可以存储多个相同类型数据的容器。

1 数组的声明与初始化

// 1. 声明并初始化
int[] numbers = new int[5]; // 创建一个长度为5的int数组,默认值为0
// 2. 声明并赋值
String[] names = {"Alice", "Bob", "Charlie"};
// 3. 访问数组元素
System.out.println(names[0]); // 输出 "Alice"
// 4. 修改数组元素
names[1] = "David";
// 5. 获取数组长度
int length = names.length;
System.out.println("数组长度: " + length);

2 多维数组

// 二维数组
int[][] matrix = new int[2][3];
matrix[0][0] = 1;
matrix[0][1] = 2;
// 另一种初始化方式
int[][] matrix2 = {{1, 2, 3}, {4, 5, 6}};

第三部分:面向对象编程

OOP是Java的灵魂,它将数据和处理数据的方法封装在一起,形成“对象”。

第5章:类与对象

1 类与对象的概念

  • :是创建对象的模板或蓝图,它定义了对象的属性(成员变量)和行为(方法)。
  • 对象:是类的实例,是实实在在存在的个体。

2 定义一个类

// Student.java
public class Student {
    // 1. 成员变量(属性)
    String name;
    int age;
    // 2. 构造方法(用于创建对象)
    // 如果没有显式定义,Java会提供一个无参的默认构造方法
    public Student(String name, int age) {
        this.name = name; // this关键字指向当前对象
        this.age = age;
    }
    // 3. 成员方法(行为)
    public void study() {
        System.out.println(name + "正在学习。");
    }
    public void introduce() {
        System.out.println("大家好,我叫" + name + ",今年" + age + "岁。");
    }
}

3 创建与使用对象

// TestStudent.java
public class TestStudent {
    public static void main(String[] args) {
        // 使用new关键字和构造方法创建对象
        Student student1 = new Student("李四", 20);
        // 调用对象的方法
        student1.introduce();
        student1.study();
        // 创建另一个对象
        Student student2 = new Student("王五", 21);
        student2.introduce();
    }
}

第6章:面向对象三大特性

1 封装 封装是指将对象的属性(数据)和行为(方法)捆绑在一起,并对外部隐藏对象的内部细节,只暴露必要的接口。

  • 实现方式:使用 private 关键字将成员变量设为私有,然后提供 publicgettersetter 方法来访问和修改它们。
// 修改上面的Student类
public class Student {
    private String name; // 私有,外部不能直接访问
    private int age;
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // Getter方法
    public String getName() {
        return name;
    }
    // Setter方法
    public void setName(String name) {
        this.name = name; // 可以在这里添加逻辑,如校验
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age > 0) { // 添加校验逻辑
            this.age = age;
        }
    }
    // ... 其他方法
}

2 继承 继承允许一个类(子类)继承另一个类(父类)的属性和方法,实现了代码的重用和逻辑的层次化。

  • 关键字extends
  • 特点:Java只支持单继承,但支持多层继承,子类拥有父类的非private成员。
// 父类
class Animal {
    public void eat() {
        System.out.println("动物在吃东西。");
    }
}
// 子类
class Dog extends Animal {
    public void bark() {
        System.out.println("汪汪汪!");
    }
}
// 测试
public class TestInheritance {
    public static void main(String[] args) {
        Dog myDog = new Dog();
        myDog.eat(); // 继承自Animal的方法
        myDog.bark(); // Dog自己的方法
    }
}

3 多态 多态是指同一个接口,使用不同的实例而执行不同操作的能力,同一操作,作用于不同的对象,产生不同的执行结果”。

  • 实现条件:继承、方法重写。
  • 核心:父类引用指向子类对象。
// 父类
class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}
// 子类1
class Cat extends Animal {
    @Override // 注解,表示重写父类方法
    public void makeSound() {
        System.out.println("喵喵喵");
    }
}
// 子类2
class Duck extends Animal {
    @Override
    public void makeSound() {
        System.out.println("嘎嘎嘎");
    }
}
// 测试多态
public class TestPolymorphism {
    public static void main(String[] args) {
        Animal myAnimal = new Animal();
        Animal myCat = new Cat();   // 父类引用指向子类对象
        Animal myDuck = new Duck(); // 父类引用指向子类对象
        myAnimal.makeSound(); // 输出: 动物发出声音
        myCat.makeSound();    // 输出: 喵喵喵
        myDuck.makeSound();   // 输出: 嘎嘎嘎
    }
}

第7章:其他OOP特性

  • 抽象:使用 abstract 关键字定义抽象类或抽象方法,抽象类不能被实例化,抽象方法没有方法体,强制子类必须实现某些方法。
  • 接口:使用 interface 定义,接口是行为的抽象,只包含抽象方法和常量,一个类可以实现(implements)多个接口,弥补了Java单继承的不足。
  • :用于组织和管理类,避免命名冲突。java.lang.String

第四部分:常用API与进阶基础

第8章:字符串处理

Java中处理字符串最常用的类是 StringStringBuilderStringBuffer

  • String:不可变对象,每次修改都会创建一个新的String对象,频繁修改时效率低。
  • StringBuilder:可变对象,线程不安全,但性能高,适用于单线程环境下的字符串拼接。
  • StringBuffer:可变对象,线程安全,但性能略低于StringBuilder,适用于多线程环境。
String s1 = "Hello";
String s2 = "World";
String s3 = s1 + s2; // 每次拼接都创建新对象,效率低
// 使用StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
String result = sb.toString(); // "Hello World"
System.out.println(result);

第9章:常用工具类

  • Math:提供数学运算,如 Math.max(), Math.random(), Math.sqrt()

  • Scanner:用于从控制台读取用户输入。

    import java.util.Scanner;
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入你的名字: ");
    String name = scanner.nextLine();
    System.out.println("你好, " + name);
    scanner.close();
  • ArrayList:最常用的动态数组(集合),可以灵活地存储和操作对象。

    import java.util.ArrayList;
    ArrayList<String> list = new ArrayList<>();
    list.add("苹果");
    list.add("香蕉");
    System.out.println(list.get(0)); // 苹果
    list.remove(0);

第10章:异常处理

异常是程序在运行时发生的错误,Java通过 try-catch-finally 机制来处理异常,使程序更加健壮。

  • try:包裹可能发生异常的代码块。
  • catch:捕获并处理特定类型的异常。
  • finally:无论是否发生异常,finally块中的代码都会被执行(通常用于资源清理)。
  • throw:手动抛出一个异常。
  • throws:在方法签名上声明该方法可能抛出的异常。
public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[5]); // 这行会抛出 ArrayIndexOutOfBoundsException
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("捕获到异常: 数组索引越界!");
            e.printStackTrace(); // 打印异常的堆栈信息
        } finally {
            System.out.println("无论是否发生异常,这里都会执行。");
        }
        System.out.println("程序继续运行...");
    }
}

第五部分:学习路径与资源推荐

第11章:后续学习方向

完成基础教程后,你可以根据兴趣选择深入学习的方向:

  1. Java Web开发
    • Servlet/JSP:Java Web的基础。
    • 框架:学习主流框架,如 Spring Boot (现代、高效)、Spring MVC、MyBatis。
  2. 数据库
    • 学习 SQL 语言。
    • 学习关系型数据库,如 MySQL、PostgreSQL。
    • 学习JDBC技术,连接Java程序和数据库。
  3. 企业级应用与中间件
    • Spring Framework:全面学习IoC、AOP等核心概念。
    • Spring Cloud:用于构建微服务。
    • 消息队列:如RabbitMQ, Kafka。
  4. 其他领域
    • Android开发:使用Java或Kotlin开发移动应用。
    • 大数据:Hadoop, Spark生态。
    • Java并发编程:深入理解多线程、线程池、锁等。

第12章:推荐资源

  • 官方文档Oracle Java Documentation (最权威、最准确)
  • 在线教程
    • 菜鸟教程Java教程 (入门快,示例丰富)
    • W3SchoolsJava教程 (英文,交互式学习)
  • 书籍
    • 《Java核心技术 卷I 基础知识》:经典入门书籍,内容详尽。
    • 《Effective Java》:Java编程的最佳实践,进阶必读。
  • 视频课程
    • B站:搜索“Java入门”、“黑马程序员”、“尚硅谷”等,有大量免费且优质的课程。
    • Coursera / Udemy:提供系统化的付费课程。

Java是一门博大精深的语言,本教程仅为你打开了通往Java世界的大门,最重要的学习方式是 “动手实践”,多写代码,多思考,遇到问题学会使用搜索引擎和查阅官方文档,祝你学习顺利,在编程的道路上越走越远!

分享:
扫描分享到社交APP
上一篇
下一篇