Java学习总结归纳

202402150625 卢芊涵

一、第一章:初始 java 与面向对象程序设计

1.1 java 概述

  • 1.1.1 计算机编程语言发展史
    • 编程语言从早期的机器语言,逐步发展到汇编语言,再到高级语言。机器语言是二进制代码,直接由计算机硬件执行,但可读性和可维护性极差;汇编语言使用助记符代替二进制指令,一定程度上提高了可读性;高级语言如 Java 则更接近人类语言,提高了开发效率。例如,机器语言可能是一串010101,而汇编语言会使用MOV AX, 10这样的指令,Java 则使用int num = 10;
  • 1.1.2 java 语言发展史
    • Java 最初由 Sun 公司开发,旨在解决跨平台编程问题。它吸收了 C++ 的优点,摒弃了一些复杂且容易出错的特性,如指针。经过多年发展,Java 已成为最流行的编程语言之一,广泛应用于企业级应用开发、安卓开发、大数据等领域。
  • 1.1.3 java 语言的特点
    • 简单性:去除了 C++ 中复杂的指针操作和多重继承,语法相对简洁。例如,Java 使用自动内存管理,通过垃圾回收机制自动回收不再使用的对象内存,避免了手动内存管理的复杂性。
    • 面向对象:一切皆对象,通过封装、继承和多态等特性实现代码的重用和可扩展性。
    • 分布式:可以方便地开发分布式系统,通过网络调用远程对象的方法,实现跨机器的协作。
    • 健壮性:强类型检查、异常处理机制和垃圾回收机制有助于减少程序错误。
    • 安全性:字节码验证、安全沙箱等机制确保程序运行安全,防止恶意代码的攻击。
    • 平台无关性:Java 程序可以在不同操作系统上运行,只需安装相应的 Java 虚拟机(JVM)。
    • 多线程:支持多线程编程,可提高程序性能,适用于并发处理。例如,Thread类可用于创建线程,Runnable接口可定义线程执行的任务。
    • 动态性:可以在运行时加载类,反射机制允许程序在运行时查看和修改类的信息。
  • 1.1.4 java 跨平台原理
    • Java 源代码通过编译器编译成字节码(.class文件),字节码不依赖于具体的硬件和操作系统。不同平台的 JVM 会将字节码解释或编译成对应平台的机器码,实现了 “一次编写,到处运行” 的特性。

个人理解与学习心得:这部分内容让我对 Java 有了宏观的认识,理解了 Java 在编程语言中的地位和优势。难点在于理解跨平台原理,起初不太明白 JVM 如何将字节码转换为机器码,后来通过学习 JVM 的工作原理和查看相关资料,了解到不同平台的 JVM 有不同的实现,根据字节码中的指令和平台特性进行转换。为克服这个难点,我查阅了一些深入讲解 JVM 的书籍和在线教程,自己动手编译并观察不同平台上的 Java 程序执行过程,加深了对该原理的理解。

1.2 面向对象程序设计思想

  • 1.2.1 面向过程程序设计
    • 以函数为中心,程序的执行过程是一系列函数的调用。例如,用 C 语言实现计算圆面积的程序,可能会有calculateArea()函数,程序的执行顺序和逻辑由函数的调用顺序决定。
  • 1.2.2 面向对象程序设计
    • 将程序视为对象的集合,对象具有属性和行为。例如,定义一个Circle类,有radius属性和calculateArea()方法。通过创建对象,调用对象的方法来完成任务,更符合现实世界的事物建模。
    • 核心概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。
    • 封装是将数据和操作数据的方法绑定在一起,对外部隐藏内部细节。例如,private修饰符将属性设为私有,通过public方法访问。
    • 继承允许一个类继承另一个类的属性和方法,实现代码复用。例如,Student类可以继承Person类,继承Person的属性和方法,同时添加自己特有的属性和方法。
    • 多态允许不同对象对同一消息有不同响应,可通过方法重写和接口实现。例如,Animal接口有makeSound()方法,DogCat类实现该接口,它们的makeSound()方法实现不同。
  • 1.2.3 面向对象与面向过程程序设计的比较
    • 面向对象更适合复杂、大型系统的开发,因为它具有更好的可维护性、可扩展性和可重用性;面向过程更适合简单、小型程序,执行效率可能稍高,但随着程序规模扩大,维护成本会急剧增加。

个人理解与学习心得:理解面向对象的概念是一个逐步的过程,起初很难理解多态的概念和应用场景。为了克服这个难点,我通过编写多个不同的类和接口,实现不同的继承和重写,观察程序的运行结果,体会多态在不同情况下的表现。同时,多做一些简单的项目,如设计一个小型的图书馆管理系统,使用面向对象的方法,逐步熟悉了类和对象的创建和使用。

1.3 java 开发环境搭建

  • 1.3.1 JDK 与 JRE
    • JDK(Java Development Kit)包含开发 Java 程序所需的工具,如编译器(javac)、调试器(jdb)等;JRE(Java Runtime Environment)是运行 Java 程序所需的环境,包含 JVM 和运行时所需的类库。开发时需要安装 JDK,运行 Java 程序只需 JRE。
  • 1.3.2 JDK 安装
    • 从 Oracle 官网下载适合操作系统的 JDK 安装包,双击安装程序,按照提示进行安装。
  • 1.3.3 环境变量配置
    • 配置JAVA_HOME变量,指向 JDK 的安装目录,以便系统找到 Java 的开发工具。同时,将JAVA_HOME/bin添加到系统的PATH变量中,方便在命令行中使用javacjava等命令。

个人理解与学习心得:环境搭建过程相对简单,但可能会因操作系统的不同而遇到一些问题,如 Windows 系统下的环境变量设置可能会出现权限问题,导致命令无法正常使用。我通过仔细检查路径是否正确,确保安装目录和环境变量配置的准确性,同时在网上查找解决办法,比如参考其他用户的论坛帖子,解决了遇到的问题。

1.4 第一个 java 程序:hello,world

  • 1.4.1 显示文件扩展名
    • 在文件资源管理器中设置显示文件扩展名,以便创建.java文件。
  • 1.4.2 编写代码

java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

  • 这是一个最简单的 Java 程序,public class HelloWorld定义了一个公共类,main方法是程序的入口,System.out.println输出字符串。
  • 1.4.3 编译与执行
    • 使用javac HelloWorld.java命令将源代码编译成字节码文件HelloWorld.class,然后使用java HelloWorld命令运行程序。
  • 1.4.4 代码解析
    • public表示类的访问权限,class表示类的定义,HelloWorld是类名,static表示方法是静态的,void表示方法无返回值,main是方法名,String[] args是命令行参数,System.out.println是标准输出语句。
  • 1.4.5 代码的注释
    • 可以使用//进行单行注释,/* */进行多行注释,注释可以提高代码的可读性,帮助他人理解代码的意图。

个人理解与学习心得:编写第一个程序是一个重要的开始,虽然代码简单,但涉及到 Java 程序的基本结构和运行机制。一开始可能会混淆编译和运行的命令,多次尝试后记住了它们的顺序和作用。在代码解析部分,理解static关键字的含义有点困难,通过阅读 Java 官方文档和一些技术博客,明白了静态方法属于类而不是对象,可以直接通过类名调用。

二、第二章:数据类型与运算符

2.1 基本数据类型

  • 2.1.1 整数类型
    • 包括byte(8 位)、short(16 位)、int(32 位)、long(64 位),用于存储不同范围的整数。例如,byte b = 10;int i = 1000;
  • 2.1.2 浮点类型
    • 包括float(32 位)和double(64 位),用于存储小数。使用时要注意精度问题,例如float f = 3.14f;,需要加f后缀,否则默认为double类型。
  • 2.1.3 字符类型
    • char类型用于存储单个字符,用单引号表示,如char c = 'A';
  • 2.1.4 布尔类型
    • boolean类型只有truefalse两个值,用于条件判断,如boolean flag = true;

2.2 引用数据类型

  • 2.2.1 类类型
    • 自定义或系统提供的类,如String是引用数据类型,String str = new String("Hello");
  • 2.2.2 接口类型
    • 定义接口,类实现接口,通过接口引用对象,例如List list = new ArrayList<>();
  • 2.2.3 数组类型
    • 存储多个相同类型的数据,如int[] arr = new int[5];,可以存储 5 个整数。

2.3 变量和常量

  • 2.3.1 变量
    • 用于存储数据,必须先声明,再赋值,如int num; num = 10;,也可声明同时赋值int num = 10;
  • 2.3.2 常量
    • final关键字修饰,一旦赋值不能修改,如final int MAX_VALUE = 100;

2.4 运算符

  • 2.4.1 算术运算符
    • 包括加(+)、减(-)、乘(*)、除(/)、取模(%),如int result = 5 + 3;
  • 2.4.2 关系运算符
    • 用于比较大小,如大于(>)、小于(<)、等于(==)、不等于(!=),返回boolean结果,如boolean isEqual = (5 == 3);
  • 2.4.3 逻辑运算符
    • 包括与(&&)、或(||)、非(!),用于逻辑判断,如boolean result = (true && false);
  • 2.4.4 位运算符
    • 操作二进制位,如按位与(&)、按位或(|)、按位异或(^)、取反(~),如int a = 5 & 3;
  • 2.4.5 赋值运算符
    • =+=-=等,如int num = 10; num += 5;
  • 2.4.6 三元运算符
    • 形式为condition? expression1 : expression2,根据条件选择执行哪个表达式,如int max = (a > b)? a : b;

个人理解与学习心得:这章主要是数据的表示和操作的基础,在使用不同数据类型时,要注意数据范围和精度问题,尤其是在类型转换时容易出错。运算符部分比较容易理解,但位运算符相对抽象,通过将十进制数转换为二进制数,手动计算位运算结果,再与程序结果对比,逐渐掌握了位运算符的使用。

三、第三章:控制语句

3.1 顺序结构

  • 程序默认的执行顺序,从上到下逐行执行。

3.2 分支结构

  • 3.2.1 if 语句
    • 用于根据条件执行不同代码,如:

java

if (score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

  • 3.2.2 switch 语句
    • 适用于多分支选择,根据表达式的值选择执行的代码块,如:

java

switch (day) {
    case 1:
        System.out.println("星期一");
        break;
    case 2:
        System.out.println("星期二");
        break;
    // 其他情况
    default:
        System.out.println("其他");
}

3.3 循环结构

  • 3.3.1 while 循环
    • 当条件为真时,重复执行代码块,如:

java

int i = 0;
while (i < 5) {
    System.out.println(i);
    i++;
}

  • 3.3.2 do-while 循环
    • 先执行一次代码块,再判断条件,如:

java

int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 5);

  • 3.3.3 for 循环
    • 常用的循环结构,适合已知循环次数的情况,如:

java

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

个人理解与学习心得:控制语句是程序流程控制的关键,if语句比较容易理解和使用,但switch语句中的break语句容易忘记,导致代码执行超出预期。在使用循环语句时,要注意避免死循环,开始学习时偶尔会忘记更新循环变量,导致程序陷入死循环。为了避免这种情况,我养成了在写循环时仔细检查循环条件和更新语句的习惯,同时使用调试工具查看变量的变化,确保程序按照预期执行。

四、第四章:数组与字符串

4.1 数组

  • 4.1.1 一维数组
    • 存储相同类型元素的集合,可通过索引访问元素,如int[] arr = new int[5]; arr[0] = 10;
  • 4.1.2 多维数组
    • 如二维数组int[][] matrix = new int[3][3];,可用于表示矩阵等。
  • 4.1.3 数组的遍历
    • 可使用for循环或增强for循环遍历数组元素,如:

java

for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
// 增强for循环
for (int element : arr) {
    System.out.println(element);
}

4.2 字符串

  • 4.2.1 String 类
    • String是不可变类,创建后不能修改,如String str = "Hello";
  • 4.2.2 字符串操作
    • 包括字符串连接(+)、获取长度(length())、截取(substring())、查找(indexOf())等,如:

java

String str1 = "Hello";
String str2 = "World";
String str3 = str1 + str2;
int length = str1.length();
String subStr = str1.substring(0, 3);
int index = str1.indexOf("l");

个人理解与学习心得:数组和字符串是常用的数据结构,数组的边界问题是一个容易犯错的地方,在访问数组元素时可能会出现数组越界异常。对于字符串,理解其不可变性是一个难点,在需要修改字符串时,开始会出现混淆,后来学会使用StringBuilderStringBuffer类进行字符串的修改操作。

五、第五章:类和对象的深入

5.1 类的构造方法

  • 5.1.1 构造方法的定义
    • 与类同名,无返回值,用于创建对象时初始化对象的属性,如:

java

public class Person {
    private String name;
    public Person(String name) {
        this.name = name;
    }
}

  • 5.1.2 默认构造方法
    • 如果没有显式定义,编译器会自动添加一个无参构造方法。

5.2 类的成员方法

  • 5.2.1 实例方法
    • 与对象关联,通过对象调用,如:

java

public void sayHello() {
    System.out.println("Hello, " + name);
}

  • 5.2.2 静态方法
    • 与类关联,通过类名调用,如Math.sqrt(2);

5.3 类的成员变量

  • 5.3.1 实例变量
    • 属于对象,每个对象有自己的副本,如private int age;
  • 5.3.2 静态变量
    • 属于类,所有对象共享,如static int count;

个人理解与学习心得:在深入学习类和对象时,构造方法的使用需要特别注意参数的传递和对象属性的初始化,不同的构造方法可以根据不同的参数创建不同状态的对象。对于静态成员和实例成员的区别,开始时会混淆它们的使用场景,通过一些实际项目,如实现一个简单的学生管理系统,明确了静态成员用于共享状态或工具方法,实例成员用于存储对象的具体属性。

六、第六章:继承和多态的高级应用

6.1 继承的细节

  • 6.1.1 方法重写
    • 子类重写父类的方法,如:

java

class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof");
    }
}

  • 6.1.2 父类引用指向子类对象
    • 可以使用父类的引用指向子类对象,实现多态,如:

java

Animal animal = new Dog();
animal.makeSound();

6.2 抽象类

  • 6.2.1 抽象类的定义
    • 包含抽象方法的类,不能实例化,如:

java

abstract class Shape {
    abstract double area();
}
  • 6.2.2 抽象方法
    • 只有声明,没有实现,子类必须实现抽象方法。

6.3 接口

  • 6.3.1 接口的定义
    • 只包含方法声明和常量,如:

java

interface Drawable {
    void draw();
}

  • 6.3.2 接口的实现
    • 类实现接口,实现接口的方法,如:

java

class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

个人理解与学习心得:继承和多态的高级应用是 Java 面向对象编程的核心,抽象类和接口的概念比较抽象。开始理解抽象类和接口时,不太清楚它们的区别和应用场景,通过实现一些图形绘制的示例程序,发现抽象类适合作为基类,定义一些通用的方法和属性,接口更适合定义行为规范。在多态应用中,父类引用指向子类对象时,调用的方法可能会根据实际对象的类型不同而不同,这一点通过多做一些多态的示例代码,逐渐掌握了其灵活应用。

以上就是对 Java 课程第一章到第六章的综合复习总结,通过对这些章节的学习,我对 Java 编程有了更深入的理解和掌握,在后续的学习和实践中,将继续巩固和深化这些知识,为开发更复杂的程序打下坚实的基础。

代码解释与说明

  • 在上述代码示例中,每个部分都有相应的注释,解释了代码的基本功能。
  • 对于不同的数据类型和运算符,通过简单的赋值和计算语句展示其使用方式。
  • 控制语句的代码示例展示了如何根据条件和循环来控制程序的执行流程。
  • 数组和字符串的代码演示了如何创建、操作和遍历它们。
  • 类和对象部分,从构造方法、成员方法和成员变量的角度展示了如何定义和使用类。
  • 继承和多态的高级应用部分,通过具体的类和接口实现,展示了如何使用抽象类和接口实现代码的抽象和规范,以及如何利用多态提高代码的灵活性和可扩展性。

注意事项

  • 在编写代码时,要注意代码的规范性,如变量命名、代码缩进等,这有助于提高代码的可读性和可维护性。
  • 对于异常处理,虽然在本复习总结中未深入涉及,但在实际开发中,要注意对可能出现的异常进行处理,防止程序崩溃。
  • 多使用调试工具,如 IDE 中的调试功能,可帮助查找代码中的错误和理解程序的执行过程。

希望这篇复习总结对正在学习 Java 的同学有所帮助。

在复习过程中,我还总结了一些学习方法和技巧:

学习方法

  1. 多做练习题:通过实际编写代码来巩固所学知识,加深对概念的理解。
  2. 阅读优秀代码:可以从开源项目、技术博客等渠道获取优秀的 Java 代码,学习他人的编程风格和设计思路。
  3. 参加在线课程和论坛:在线课程可以系统地学习 Java 知识,论坛则可以与其他学习者交流经验,解决遇到的问题。
  4. 动手实践项目:尝试自己动手开发一些小项目,如命令行工具、简单的图形界面程序等,将所学知识应用到实际中。

技巧总结

  1. 注重代码规范:良好的代码规范可以提高代码的可读性和可维护性,减少错误的发生。
  2. 学会调试代码:掌握调试工具的使用方法,能够快速定位和解决代码中的问题。
  3. 理解底层原理:不仅要掌握 Java 的语法和 API,还要了解其底层实现原理,如 JVM 的工作机制、垃圾回收等。
  4. 持续学习:Java 语言不断发展,要保持学习的热情,关注新的技术和趋势。

        总之,通过对 Java 课程第一章到第六章全面而系统的复习,我深刻地感受到自己对 Java 编程的认识和理解达到了一个新的高度。

        在第一章中,我了解了 Java 的发展历程、跨平台原理以及面向对象程序设计思想的初步概念,为后续的学习奠定了坚实的基础。开发环境的搭建过程让我熟悉了工具的使用,而第一个“Hello, World!”程序的成功运行则给了我极大的鼓舞和信心。

        第二章的 Java 编程基础内容丰富而实用。从变量与常量的定义到各种运算符的灵活运用,再到选择结构、循环结构的巧妙运用,以及方法和数组的深入学习,让我掌握了 Java 编程的基本技能。在这个过程中,我也遇到了一些挑战,例如运算符优先级的记忆、循环控制的精准把握以及数组越界的避免等问题,但通过不断地实践和总结,我逐渐克服了这些难点。

        第三章面向对象程序设计基础,让我深入理解了面向对象的三大特性——封装、继承和多态。类和对象的概念变得更加清晰,构造方法、`this`关键字、`static`关键字以及包的使用,让我能够更加高效地组织和管理代码。

        第四章的进阶内容进一步拓展了我的编程视野。封装的实现让代码更加安全可靠,继承和方法重写使代码复用性大大提高,`super`关键字的运用让我更好地理解了父子类之间的关系,`final`关键字的使用增强了代码的稳定性。多态的概念让程序更加灵活多变,抽象类和接口的学习则为复杂系统的设计提供了有力的工具。内部类的各种形式也为特定场景下的编程提供了更多的选择。

        第五章的异常处理让我认识到程序的健壮性至关重要。学会了如何抛出、声明和捕获异常,以及自定义异常的方法,让我能够更好地应对程序运行过程中的各种意外情况。

        第六章介绍的 Java 常用类,如包装类、`String`类及其相关类、时间和日期相关类、`Math`类等,为我的编程实践提供了丰富的工具和方法。

        在今后的学习和实践中,我将继续努力,不断探索和尝试新的编程技术和方法。通过参与更多的实际项目,积累经验,提高自己的编程能力。

你可能感兴趣的:(java,学习,开发语言)