Java面向对象学习周记
学习来源:B站黑马程序员Java零基础教程
学习内容:一维数组与多维数组、类与对象、成员变量和方法、继承、抽象类、接口
一、本周学习内容总结
这周跟着黑马程序员的课程,我正式从基础语法迈入Java面向对象的核心内容。面向对象和之前写的面向过程代码思维差异很大,也是这段学习里最难适应的部分,我一边看视频,一边跟着敲案例,慢慢转变自己的编程思路。
最先复习巩固的是一维数组和多维数组。数组是用来存放相同类型数据的容器,一维数组就像一条直线上连续存放的数据,适合存储一组简单数据,比如班级学生成绩;二维数组可以理解成“数组里面存放数组”,类似表格、矩阵结构。黑马老师着重强调,数组一旦初始化,长度就固定不能修改,访问下标从0开始,如果下标超出范围,会抛出数组下标越界异常 ArrayIndexOutOfBoundsException 。
下面是二维数组遍历的示例代码:
java
public class ArrayDemo {
public static void main(String[] args) {
int[][] arr = {{11,22},{33,44},{55,66}};
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
一开始我经常搞混 arr.length 和 arr[i].length ,前者代表二维数组一共有多少行,后者代表当前这一行有多少个元素,反复练习遍历案例之后,才慢慢熟练。
接下来学习了类与对象,这是面向对象的基石。课程里讲到,类是模板,对象是根据模板创建出来的实例。我们可以抽象一类事物的共同特征和行为,定义成类;而一个个具体的个体,就是对象。用 class 关键字定义类,使用 new 关键字创建对象。
java
class Student{
String name;
int age;
}
public class TestStudent {
public static void main(String[] args) {
Student s = new Student();
s.name = “小明”;
s.age = 19;
System.out.println(s.name + " " + s.age);
}
}
这里我踩了一个坑:类里面的成员变量拥有默认初始值,而方法里面的局部变量必须手动赋值才能使用,这点一定要区分清楚。
之后三天的内容是成员变量与方法,包含访问权限、静态成员、方法重载、构造方法。 private 修饰的私有成员,只能在本类内部访问,外部不能直接访问,一般搭配get、set方法实现封装; public 公共成员在任意位置都可以访问;被 static 修饰的静态成员属于类本身,不属于某个单独对象,可以直接用 类名.成员 调用,所有对象共享同一份静态数据。
方法重载是同一个类中,方法名相同、参数列表不同,和返回值类型无关;构造方法和类名同名,没有返回值,创建对象的时候自动调用,用来给成员变量初始化。黑马老师特意提醒我们,重载和后面继承里的重写很容易混淆:重载发生在同一个类,重写发生在父子类之间。
java
class Person{
private String name;
public Person(String name){
this.name = name;
}
public String getName(){
return name;
}
public void say(){
System.out.println(“你好”);
}
public void say(String msg){
System.out.println(msg);
}
}
最后学习继承、抽象类和接口。继承使用 extends 关键字,子类可以复用父类中非私有的成员,减少重复代码,Java只支持单继承,一个子类只能直接继承一个父类。用 abstract 修饰的是抽象类,里面可以有抽象方法,抽象类不能直接new对象,专门交给子类继承并且实现抽象方法。接口使用 interface 定义,类通过 implements 实现接口,一个类可以同时实现多个接口,弥补了Java单继承的局限。这一部分核心就是面向对象三大特性:封装、继承、多态,写代码不再是一步步写流程,而是先思考有哪些事物、事物有什么属性和行为、事物之间是什么关系。
二、本周学习与生活感悟
刚接触面向对象的时候,我非常不适应。之前写代码都是面向过程,先想好第一步干什么、第二步干什么;现在要学会提炼事物、抽象成类。很多概念听视频的时候听懂了,关掉视频自己动手写代码就报错。比如 static 关键字、this关键字、抽象类和接口的区别,都需要反复回看视频、敲代码才能理解。
数组的知识点虽然相对简单,但是多维数组、数组作为方法参数返回值这类题目,依然需要大量练习巩固。我也意识到,面向对象不是简单的语法,而是一种全新的编程思想,死记硬背语法没有用,要多写案例、画图理清类之间的关系。
这周在生活上,我也学会合理分配时间,平衡专业课、社团和代码练习,不再临时赶任务。遇到看不懂的知识点,不再一直内耗,先标记下来,多看几遍黑马老师的讲解,再动手调试代码,在报错里找问题,比单纯看视频效率更高。
三、下周学习规划
- 复盘本周全部代码案例,独立重写构造方法、重载、继承、抽象类、接口的代码,整理错题笔记;
- 重点攻克多态知识点,提前预习黑马课程对应的章节,多写多态综合案例;
- 写一个简易的学生管理小项目,把数组、类、封装、继承的知识点融合起来,锻炼面向对象的编程思维;
- 整理对比表格,区分容易混淆的知识点:重载和重写、抽象类和接口,方便以后复习;
- 坚持每天固定时间敲代码,保持手感,遇到不懂的问题及时记录、请教同学。