个人总结
面向对象是有点抽象的,所以总的来说学习起来没有之前java基础部分轻松,这点很明显地体现在下课后还会需要复习并且敲更长时间的代码。
在学习过程中,老师敲写代码的速度会逐渐加快,各种接口、类和方法之间会不停地跳转,这需要上课时更加专注(因为上网课的原因,可能会松懈点,不过目前跟着老师敲代码写笔记还勉强跟上了)。
在面向对象阶段的一周学习中比较让我困惑的是:某些方法的参数列表的来源可能会是通过继承、接口实现等后再创建的一个新对象。 我跟着老师学习的时候能很好的理解,但是自己独立完成作业的时候就会磕磕碰碰的,思路不够清晰,并且不乏存在因为粗心犯的错误而导致进度卡壳的时刻(例如循环嵌套了、new对象时的位置不对,方法逻辑不够完善等),虽然可以问老师,但我总会觉着想自己琢磨,然而事实是这样真的会浪费很多时间。
学习中,还会有一个做笔记的困惑,因为老师讲一个东西时会先给一些它的概念,然后结合代码实例进行演示从而加深理解,这个过程就涉及到我自己边做笔记边敲代码会遗漏一些老师讲的内容,甚至老师讲快了还会敲不赢代码。基于此,虽然可以通过观看教学视频回放解决这个问题,但我觉着这样确实也太浪费时间了。
总之,针对自己的困惑,在接下来的学习时间段里,我觉得我有必要在课后花更多时间去复习,并且在原有基础上更多地去拓展一些细节,在遇到问题时还是多和同学或老师进行交流。在做笔记方面可以稍微让步,优先听老师的讲解,自己在一天课程结束后再补上未做的笔记。
技术总结(选写)
-
面向对象思维OOP
是创建解决问题的对象,赋予对象相应的行为和特征,让这些对象互相配合完成。这种思想致力于将计算机中的世界,描述的和现实中一致的思想。- 如洗衣服
创建一个能洗衣服的工具:洗衣机,让洗衣机拥有洗衣粉的行为(方法),调用该行为即可。 - 如组装电脑
A推荐配置单,B去商城购买,C送回家、D组装
- 如洗衣服
-
类class
是拥有相同属性和行为的对象的集合。是类的模板。 -
定义类
[修饰符]class 类名{
//属性(变量)
//行为(方法)
}
- 对象Object
某个类的具体实例 - 创建对象
类名 变量名 = new 构造方法([参数]);
- 成员变量、局部变量、静态常量
- 成员变量:定义在类中的变量,即类的属性。它有默认值。通过对象访问。
- 局部变量:定义在方法中的变量。它没有默认值。只能在方法中赋值后才能使用。
- 静态常量:特殊的成员变量,用final static修饰。它有默认值。通过类名访问。
class Person{
//成员变量
String name;
//静态常量
final static String COUNTRY="中国";
//定义方法
void info(){
//局部变量
int age=20;
System.out.println("我叫"+name+",今年"+age+"岁,是一个"+COUNTRY+"人");
}
}
-
方法的总结
-
无返回值的方法,返回值部分要写出void
-
有返回值的方法,方法体中必须要写上return,只要在return后写上对应返回值类型的数据
-
没有返回值的方法体中,也可以使用return关键字,但后面不能有值,只要出现return关键字,就不执行后续代码。
-
有返回值的方法在调用时,需要接收返回的数据才能使用该数据,或者也可直接打印
-
方法定义时的参数称为形式参数,简称为形参,方便在方法体中使用,方法调用时传递的值称为实际参数,简称为实参,只需要保证满足参数的数据类型即可,与形参名无关,就是调用时提前定义一个符合数据类型的参数也可以拿来用。
-
-
构造方法
是一种特殊的方法。方法名和类名一致,没有返回值部分。访问修饰符 类名(){ }
- 没有返回值部分,方法名必须和类名一致。
- 在使用new关键字创建对象时,调用对应的构造方法。
- 每个类在定义后,都隐藏有一个无参的构造方法。
- 如果自定义了有参数的构造方法,无参数的构造方法就会失效。如果想要使用无参构造方法,就要再写出来。
- 构造方法通常用于限制创建对象时携带的参数,初始化成员变量。
- 构造方法之间都是重载关系,构造方法不能重写。
- 构造方法执行时,不一定会创建对象。如抽象类中有构造方法,但无法创建抽象类对象,只能在创
- 建抽象类的子类对象时,自动调用抽象类的构造方法。
-
面向对象三大特性
-
封装
将类中的属性使用private修饰,这样就能防止非当前类对其访问。
封装的步骤:- 1.给类中的所有属性添加private访问修饰符
- 2.给每个属性添加getXXX()方法用于读取属性值
- 3.给每个属性添加setXXX()方法用于给属性赋值
-
继承
类A extend 类B。类A就是类B的子类,类A的对象就能直接访问类B中非私有成员。或接口A extends 接口B。 -
多态
在继承关系中,子类的对象可以保存到父类的变量中。
多态通常应用于定义方法时,形参为一个父类或接口类型变量,实参可以是子类对象。
无法通过父类变量调用子类独有的方法,如果调用重写了父类的方法时,执行重写后的内容。
-
-
访问修饰符
访问修饰符 | 含义 | 可以修饰 |
---|---|---|
public | 公共的 | 类、属性、方法 |
protected | 受保护的 | 属性、方法 |
不写 | 默认的 | 类、属性、方法 |
private | 私有的 | 属性、方法 |
- 访问权限表
同一个类中 | 同一个包中的不同类 | 不同包中的子类 | 不同包中的非子类 | |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | X |
不写 | √ | √ | X | X |
private | √ | X | X | X |
- final关键字
- 修饰属性
当final修饰属性时,该属性的值不可更改。定义属性时,在属性前加上final。这时的属性称为常量。常量命名时,所有字母都大写,多个单词之间用_隔开。 - 修饰方法
当final修饰方法时,该方法不能被重写。定义方法时,在返回值前加上final。 - 修饰类
当final修饰类时,该类不能被继承。定义类时,在返回值前加上final。
- 修饰属性
- Object类
是Java中所有类的父类,该类中定义了很多方法,通常需要重写。
常用方法 | 返回值 | 作业 |
---|---|---|
toString() | String | 在输出某个对象时,会默认调用该方法,该方法默认输出“包名.类@十六进制哈希码”。通常用于重写后输出对象的属性 |
hashCode() | int | 得到某个对象的哈希码,哈希码可以理解为对象内存地址通过一种算法转换得到的一个特定值。 |
getClass() | Class | 得到某个对象的所在类,默认输出“class 包名.类名” |
equals(Object obj) | boolean | 判断两个对象是否相同,Object默认用==比较对象, |
notify() | void | 唤醒某个线程 |
notiyAll() | void | 唤醒所有线程 |
wait() | void | 让线程休眠,直到被唤醒 |
finalize | void | 当某个对象被垃圾回收(GC)回收前执行的方法 |
- abstract
用于修饰类和方法,表示抽象的。
修饰方法,方法成为抽象方法,没有方法体,同时该方法的所在类也一定要用abstract修饰,让其成为抽象类。- 抽象方法只能出现在抽象类中,不能出现在普通类中。
- 抽象类中可以没有抽象方法。
- 抽象类中有构造方法,但该构造方法只会在new抽象类的子类对象时会自动调用,抽象类不能创建自身对象。
- 抽象类通常需要被继承,一旦有子类继承了抽象类,就必须要重写抽象类中的所有抽象方法。
- interface
用于定义接口的关键字。代替class。
如果某个抽象类中全都是抽象方法时,可以将这个类改为接口。- 接口是一个完全抽象类,其中的方法都是public abstract修饰的抽象方法,没有方法体,其中的属性都是public final static修饰的静态常量。
- 接口中没有构造方法,不能创建对象。
- 接口通过implements实现,实现它的类称为该接口的实现类。
- 一个类可以同时实现多个接口。
- 一个类实现了接口后,必须重写其中的抽象方法。
- JDK1.8后,可以在接口中定义default方法和static方法,该方法不用重写。
- static
可以修饰方法、属性或代码块。被修饰的内容称为静态成员。
静态成员在类加载时就会保存到内存中,所以访问静态成员时,无需对象,直接通过类名即可访问。
当某个属性或方法被高度重用时,可以将其定义为静态的,之后通过类名调用。
还可以在类中定义静态代码块static{},在类加载时自动执行的代码块。- 静态方法中无法使用非静态成员
- 普通方法中可以使用静态成员
。。。。。。