【Java基础】面向对象部分知识点笔记

一.方法重载与重写:

1.重载(Overload):
一个类里,定义了若干个相同名称的方法,并且只有参数列表不同:参数个数或数据类型不同
2.重写(Override):
父类已经实现了某方法,子类又重新实现了该方法,就是重写


二.基本数据类型和引用数据类型

1.基本数据类型:基本数据类型就是一般化的对象定义,存储的是对象的实际值
2.引用数据类型:只要是需要new出来的对象,不论是自定义类还是其他封装类产生的,都是引用数据类型
→举例:数组、枚举、封装类(基本数据、String等)、接口、类等
→引用数据类型不保存对象实际值,只存储数据的引用(引用存放在栈中,实际数据存放在堆中,需要到堆中找值)

三.方法的基本内存原理

1.栈内存:主要用于存储方法调用和局部变量
- 采用先进后出(LIFO)的方式管理数据,即最后进入栈的数据最先被取出
- 在方法调用时动态分配栈帧(Stack Frame),包括方法参数、局部变量和操作数栈等

2.堆内存:
主要用于存储对象实例和数组
- 堆是一种树形结构,对象在堆中分配的位置不是连续的,而是散落在不同的位置上
- 通过 `new` 关键字在堆上动态分配内存,即所有通过 `new` 关键字创建的对象都存储在堆中


四.方法参数传递

1.基本数据类型传递:

结论:传递基本数据类型时,传递的是**实参**,形参改变不会影响实参的值

2.引用数据类型传递:

结论:引用数据类型传递参数时,传递的是**地址值**,形参的改变会改变实参的值

五.构造方法

1.构造方法形式:没有返回类型,与类名相同,可以有参/无参构造
2.构造方法调用:没有人为定义时,系统会创建默认构造方法;人为定义好之后,系统就不会再使用默认的(如果一旦定义了有参构造器,无参的也就没有了,系统默认也是无参的,所以需要自己再创建)
3.有参、无参构造方法可同时存在,也就是构造方法可以重载
→Maze m=new Maze( ); 创建对象时就是JVM调用构造方法才产生的

六.标准JavaBean类

固定要求:
1.类名、属性、方法名要见名知意,驼峰命名
2.属性要private
3.至少两个构造器(无参、含全部参数)
4.提供每个成员变量对应的setXXX和getXXX方法

七.三种对象内存图:

1.三种内存空间

方法区把创建的类文件提前存储进去

2.两个引用指向同一对象

这时相当于把对象1的地址赋给了对象2,两个对象共用一个堆内存空间

八.成员、局部变量

解释:因为对象是new出来的,所以对象内存是堆内存,而成员变量属于类本身,实际上也就属于对象,所以内存也是堆内存;因此生命周期也是和对象创建销毁有关的

 九.上、下转型变量

1.上转型:
(1)形式:将子类的对象向上转化为父类的对象:A a=new B( );
注意必须B继承A类或者实现A接口,否则不能成立
这种转换往往是自动的,因为子类继承父类,就认为父类对象可以访问子类方法,不需要显式地标记转换操作符
(2)运行原理:编译器要求上转型变量只能访问父类方法,即便它指向子类对象引用;但是子类如果重写父类方法,那么调用这样的方法只会运行子类的而不会运行父类
(3)意义:通过这种变化可以实现多态。比如Animal ani=new Dog(),ani变量现在属于Dog对象,如果有其他的动物类,就可以把ani变量赋为其他对象,从而实现多态,还不需要每次都创建新的动物变量,节省效率

2.下转型:
(1)形式:将父类对象再转换为子类对象,一般是在已经上转型之后
由于运行可能抛出ClassCastException异常,需要利用instanceof检查对象是否是子类的类型或者利用try-catch进行异常处理,即:

//方案1
if (myAnimal instanceof Dog) 
{ Dog myDog = (Dog) myAnimal; 
  myDog.fetch(); // 访问子类特定方法
}

//方案2
Animal animal = new Animal(); 
try { Dog dog = (Dog) animal; // 可能会抛出ClassCastException 
     // 进行后续操作 
     } catch (ClassCastException e) { 
     // 异常处理代码 
     e.printStackTrace(); 
    }

(2)意义:由于上转型变量只能访问父类方法,因此可通过下转型恢复为子类变量,再去访问子类特定方法

十.instanceof关键字

1.作用:用于检查对象是否是特定类的实例或者是否实现了特定接口
2.应用:
(1)上转型时判断是否为父类的实例
(2)在下转型之前要事先进行类型判断

 十一.this、super关键字

1.this:
(1)this作用:区分成员变量和局部变量
this调用的属性表示成员变量
(2)this本质:代表方法调用者的地址值
所以this调用的变量也就是调用了那个方法的地址指向的内存单元里的变量,即成员变量
2.super: `super` 关键字在子类中是用来访问父类的构造方法、成员变量和成员方法的
(1)在子类的构造方法中,可以使用 `super()` 调用父类的构造方法。这种调用必须是构造方法的第一条语句
(2)用`super`来访问父类中的成员变量,特别是在子类中有同名变量时,可以通过 `super` 来区分
(3)利用`super` 调用父类中被子类重写的方法

十二.static关键字

1.作用:表明被修饰的成员属于类本身,而不是类的实例
2.情形:
(1)静态变量:它们属于类的一部分,而不是类的每个实例的一部分。所有该类的实例共享同一个静态变量的值。静态变量在第一次被访问时被初始化,且只会初始化一次
如果某一个实例改变了静态变量的值,那么其他实例调用时也会改变;可以直接通过类来调用,就不必再创建实例
(2)静态方法:静态方法属于类本身,可以直接通过类来调用静态方法不能被重写
(3)静态代码段:
static {
// 静态代码块,在类加载时执行 }
※静态方法中只能访问静态变量和调用静态方法,不能直接访问类的非静态成员


十三.final关键字

1.修饰类:使一个类成为最终类,这样的类不能被继承(适用于那些不希望子类修改或者扩展其行为的情形,可以维护类的稳定性与可用性) 
2.修饰方法:使该方法成为最终方法,即不能被子类重写(保持方法的逻辑不被子类修改,维持稳定性与可用性)
3.修饰变量:这个变量是一个常量,只能被赋值一次;一旦赋值之后,不能再被修改

部分截图/总结来源:黑马程序员
我的笔记:Obsidian摘录

                                           

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值