JAVA中的面向对象2
2021/7/28 12:06:23
本文主要是介绍JAVA中的面向对象2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JAVA中的面向对象2
- 代码块
- 构造代码块
- 局部代码块
- 继承
- 格式
- 权限修饰符
- Super
- Override
- 多态
- Static静态
- 静态方法
代码块
构造代码块
会在每一次创建对象时调用,构造代码块是先与构造方法执行的。
使用方法:直接在类中提供一个{}
局部代码块
在方法中提供一个{}
局部代码块可以提高栈内存的效率,可以提前释放局部的变量内存。
继承
把原有类中的公共的代码抽取到一个新类中,原有类和新类使用extends关键字进行联系。新类称之为父类,原有类称之为子类,子类会继承父类所有的属性和方法。但是子类只能使用对子类可见的属性方法。
格式
子类 extens父类
继承可以提高代码的复用率
java有多层继承,没有多继承
权限修饰符
权限修饰符 | 本类 | 子类 | 同包类 | 其他类 |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
default | 可以 | 同包子类 | 可以 | 不可以 |
private | 可以 | 不可以 | 不可以 | 不可以 |
Super
super关键字可以调用父类可见的方法和属性
当创建子类对象时,会默认去调用父类的构造方法
可能报错:Implicit super constructor 类名() is undefined. Must explicitly invoke another constructor注意有参和无参调用的方法。
super():调用父类的无参构造,super()代码必须放在方法的第一行
this():调用本类的构造方法,必须放在有效代码第一行
所以说super()和this()不能共存。
Override
在父子类中出现了方法签名一致的非静态方法,就称之为重写(Override)
重要的“两小一大”原则
- 方法签名一致
- 如果方法的返回值的类型是基本数据类型/void,那么子类中的方法的返回值类型必须和父类的返回值类型保持一致。
- 子类重写的方法的权限修饰符,必须要比父类方法的权限修饰符范围更大或相等。
- 如果父类方法的返回值类型是引用数据类型,那么子类方法的返回值类型要么和父类的返回值类型一致,要么是父类返回值类型的子类。
多态
事物的多种形态
编译时多态:方法的重载
运行时的多态:方法的重写 向上造型
Static静态
可以修饰变量、方法、代码块
静态变量:使用static修饰的变量,又称之为类变量。可以使用 类名.变量名 来调用静态变量。
静态变量是随着类的加载是加载到方法区的,是先于对象出现的,在方法区中会有一个默认值。不同的对象使用的静态变量是同一个。可以使用类名直接访问。
类是加载到方法区的
类是第一次使用时才加载
类只加载一次
静态变量不可以在构造方法中
静态方法
使用static修饰的方法称之为静态方法。静态方法会随着类的加载而加载到方法区中,当静态方法被0调用时,区栈中执行。静态方法也是先于对象而存在的。可以使用 类名.静态方法名() 的形式调用。
静态方法中可以适应this/super吗? ----->不可以
静态方法中可以调用本类的非静态方法吗?----->不可以、在本类中调用demo()相当于this.demo,
因为静态方法中不可以使用this,所以静态方法不能调用非静态方法
静态方法可以被继承吗? ----->可以
静态方法可以被重写吗?------>不可以 如果父子类中出现了同名的静态方法,称之为隐藏(hide)。
如果父子类中有同名方法,要么都是静态(隐藏),要么都是非静态(重写)
因残也遵循“两等两小一大”原则
静态代码块:被static修饰的{}静态代码块随着类的加载而加载,会在加载类是调用。静态代码块在栈中执行的。
案例:统计当前类创建对象的个数。
静态代码块 构造代码块 构造方法执行顺序
父类静态——>子类静态——>父类非静态——>子类非静态
类加载的过程:
java通过编译生成class文件,经过类加载器将class文件加载成字节码文件区执行
加载:将字节码文件加载到内存中
校验:检查字节码的安全性
准备:会给静态变量开辟内存空间,并且设定一个标记值。标记值可能会被舍弃
解析:
初始化:开始执行静态代码块和静态变量赋值的代码。没有特定的顺序,那行代码在上就先执行
在标记值状态下,不能进行直接操作,但是可以执行引用操作。
这篇关于JAVA中的面向对象2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20RabbitMQ教程:新手入门指南
- 2024-11-20Redis教程:新手入门指南
- 2024-11-20SaToken教程:新手入门指南
- 2024-11-20SpringBoot教程:从入门到实践
- 2024-11-20Java全栈教程:从入门到实战
- 2024-11-20Java微服务系统教程:入门与实践指南
- 2024-11-20Less教程:初学者快速上手指南
- 2024-11-20MyBatis教程:新手快速入门指南
- 2024-11-20QLExpress教程:初学者快速入门指南
- 2024-11-20订单系统教程:从入门到实践的全面指南