面向对象进阶(static)

多关注语法点的基本作用

多进行思考和记忆、练习

要自信

static关键字;设计模式:单例(一个类只产生一个对象);面对对象三大特征之二:继承;

目录

static静态关键字

static修饰成员变量

static修饰成员方法

注意事项

static应用知识

工具类

代码块

单例

继承

继承的特点

继承后:成员变量、成员方法的访问特点

继承后:方法重写

继承后:子类构造器的特点

继承后:子类构造器访问父类有参构造器 

 this和super的使用总结

static静态关键字

静态,修饰成员变量和成员方法,被修饰的成员变量只在内存中只存储一份,可以被共享访问、修改

static修饰成员变量

类名   静态成员变量   (推荐)

对象(new)  静态成员变量     (不推荐)

实例成员变量:无static修饰,属于每个对象的,必须用对象名访问

 

 同一个类中访问静态成员变量类名可以省略不写

简单来说就是当用static修饰成员变量时可以直接用类名来访问,对象名虽然也可以但是不推荐。而不用static修饰的成员变量则不能使用类名来访问会报错,必须使用对象名(即先new一个新的对象)来访问

静态成员变量:有static修饰,属于类,加载一次可以被共享访问,推荐用类名访问

实例成员变量:无static修饰,属于对象,用对象名访问

定义好的静态成员变量会在堆内存开发出一块区域存储成员变量,而实例成员变量并没有,因此必须要用对象名才能访问实实例成员变量

static修饰成员方法

静态成员方法:有static修饰,属于类,推荐用类名访问,也可以用对象访问

实例成员方法:无static修饰,属于对象,只能用对象名访问

使用场景:

1、 表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法

即该方法需要用到实例成员时就申明成实例方法

2、如果该方法是以执行一个共用功能为目的,则可以申明成静态方法

即不用实例成员

注意事项

1、静态方法可以访问静态成员,不能直接访问实例成员(用对象访问)

2、实例成员可以访问静态成员,也可以访问实例成员

3、静态方法中不可以出现this关键词

static应用知识

工具类

类中都是一些静态方法,每个方法完成一个共同的功能,用来给系统开发人员共同使用

为什么不用实例方法:实例方法需要创建对象,浪费内存

用静态方法可以直接用类名调用(工具类无需创建对象,建议将工具类的构造器进行私有化private)

一次编写处处可用,提高代码的复用性

代码块

属于类,类中方法外

在Java下,{}围起来的就是代码块

静态代码块:

static{},通过static修饰,属于类与类一起优先加载,自动触发执行

作用:初始化静态资源

构造代码块(实例代码块)(了解,见得少):

没有static修饰,属于对象。每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行。(实例代码块:每次构建对象时,都会触发一次)

作用:初始化实例资源

单例

设计模式:开发中遇到的各种问题通常有n种解法,但其中的最优解会被人们总结出来,称之为设计模式

单例模式:

该模式保证这个类只有一个实例,即一个类只能选择创建一个对象

1、饿汉单例模式

饿汉单例是在获取对象前已经先创建好了一个对象;
这个对象只能是一个,所以定义静态变量来记住;
速度快,再来拿对象前对象就已经准备好了

* 定义一个类,把构造器私有
* 定义一个静态变量存储一个对象 

2、懒汉单例模式

定义一个静态成员变量来存储一个对象,只加载一次,只有一份
需要时才初始化对象

* 定义一个类,把构造器私有
* 定义一个静态变量存储一个对象
* 提供一个返回单例的方法

继承

子类可以直接使用父类的方法
子类能得到父类的属性和行为

Student extends People      Student是子类,People是父类


子类们的共同属性、方法可以放在父类中,子类独有的属性和行为放在各个子类中

继承的特点

1、子类可以继承父类的属性和方法,但不能继承父类的构造器

子类有自己的构造器,子类可以继承父类的私有成员

子类不能继承父类的私有成员?可以,只是不能直接访问

子类可以继承父类的静态成员?可以使用,但这不算继承,而是一种共享

2、Java是单继承模式:一个类只能继承一个直接父类

3、Java不支持多继承、但是支持多层继承

即A可以继承B,B可以继承C,则A也可以用C里面的东西

4、Java中所有的类都是Object类的子类

Object类是祖宗类

继承后:成员变量、成员方法的访问特点

就近原则

先子类局部范围找;

然后子类成员范围找;(还可以用this关键字)

然后父类成员范围找,如果父类范围还没找到就会报错(还可以用super关键字)

super.父类成员变量/父类成员方法

 

继承后:方法重写

在继承体系中,子类出现和父类一模一样的方法申明,就成子类这个方法是重写的方法

方法重写的应用场景

1、当子类需要父类的功能,但父类的功能不完全满足自己的需求时

2、子类可以重写父类中的方法

@Override        重写校验注解,不正确会被报错;提高程序可读性

重写方法的名称、形参列表与被重写方法必须一样

私有方法不能被重写

子类重写父类方法时,访问权限必须大于或等于父类(缺省<propected<public)

子类不能重写父类的静态方法,会报错

 

继承后:子类构造器的特点

默认先访问父类无参构造器,再访问子类的构造器(有参/无参)

 调用父类的构造器:super();

继承后:子类构造器访问父类有参构造器 

作用:初始化继承自父类的数据

如果子类没有无参构造器,父类没有无参构造器不会报错

但如果子类有无参构造器,父类没有就会报错

子类调用父类有参构造器:super(......);

 this和super的使用总结

this:代表本类对象的引用

this.成员变量    访问本类成员变量             this.成员方法(......)       访问本类成员方法

this(......)   访问本类构造器

super:代表父类存储空间的标识

super.成员变量    访问父类成员变量            super.成员方法(......)       访问父类成员方法

super(......)   访问父类构造器

 super(......);    必须放第一行               this(....)  也必须放在第一行

必须先初始化父类,再初始化自己

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值