面向对象基础知识(static、类变量、类方法、工具类、代码块、单例)

一、类变量、实例变量;类方法、实例方法;

一、static

1、
类变量(静态成员变量)
实例变量(对象变量)
在这里插入图片描述
2、成员变量执行原理
栈内存:方法、方法的变量s1
堆内存:对象、类变量、实例变量
s1指向的对象储存在堆内存,s1指向该对象
在这里插入图片描述

二、类变量应用

在这里插入图片描述
在这里插入图片描述

三、类方法

类方法中不能访问实例成员变量(不带static),实例成员变量是对象的成员变量,类方法只能访问类变量!!!!!!!!!!

在这里插入图片描述
在这里插入图片描述

拓展:
在这里插入图片描述

四、工具类

在这里插入图片描述

五、类方法、实例方法

在这里插入图片描述
this表示当前对象的地址,因此在类方法中不可出现
在这里插入图片描述

六、代码块

1、静态代码块
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、实例代码块
在这里插入图片描述

在这里插入图片描述
作用:可以将多个构造器中的重复代码拿到实例代码块中

七、饿汉式单例

饿汉模式,就是它很饿,它的对象早早的就创建好了
只能通过调用类方法获取单例对象
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

优点:避免浪费内存,只需要一个对象就可以处理问题
在这里插入图片描述

八、懒汉式单例(线程不安全)

懒汉模式,顾名思义就是懒,有人来向它要对象的时候再实例化对象
对象很少调用时使用,稍微比饿汉节约内存
在这里插入图片描述
单例中懒汉和饿汉的本质区别在于以下几点:
①饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的。
②从实现方式来讲他们最大的区别就是懒汉式是延时加载,他是在需要的时候才创建对象,而饿汉式在虚拟机启动的时候就会创建,饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例(上面有个朋友写错了)、所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。

二、

一、继承

子类对象由父类、子类共同决定!
在这里插入图片描述
继承:同样可以访问父类私有成员变量

在这里插入图片描述

权限修饰符

在本类中:在别的地方即使是本类的对象也不可以访问
在这里插入图片描述

继承注意

在这里插入图片描述

二、方法重写

在这里插入图片描述
写代码要求:!!!!!!
在这里插入图片描述
了解:
在这里插入图片描述

toString()

在这里插入图片描述
在这里插入图片描述

打印对象输出的不是地址,是内容则代表对object的toStirng()方法重写了!!!

三、super关键字

变量super.name;
在这里插入图片描述
方法super.print1()
在这里插入图片描述

四、构造器

super():表示调用父类构造器!!!!!
要点:子类构造器第一行代码都有一行super(),自动调用父类构造器!!!
在这里插入图片描述

1、子类调用无参构造器:
在这里插入图片描述
2、子类调用有参构造器:(父类无参构造器同样被调用)
在这里插入图片描述
在这里插入图片描述

子类构造器调用父类构造器

super(参数1,参数2…)
父类:成员变量、setget方法、有参、无参构造器
如何写好子类的构造器?
创建子类对象时,调用子类构造器,子类构造器第一行默认是调用父类无参构造器super(),
因此想创建对象时为父类变量赋值必须要super有参构造器!!!!!
在这里插入图片描述

构造器中的调用:this调用兄弟构造器:

this(参数1,参数2…)

作用:不填第三个参数默认定义为:“黑马程序员”
只初始化两个参数,则匹配兄弟构造器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、

一、对象多态、行为多态

在这里插入图片描述

父类类型指向子类对象,面向父类类型编程,可以随时更换子类代码而不修改其他代码
在这里插入图片描述

1、对象行为

编译看左边,运行看右边
在这里插入图片描述
父类引用子类对象:Person p1=new Student();

2、成员变量

不存在多态(编译运行都看左边。也就是成员变量没有多态特性)

在这里插入图片描述

3、静态static

方法和变量:编译运行都看左边,同成员变量一样。

二、多态(polymorphism)

1、父类变量接对象
2、解耦合
在这里插入图片描述

问题:无法调用子类的独有功能
编译看左边,运行看右边
编译报错!People的p1没有子类student的独有功能test()
在这里插入图片描述
即使test方法是public,但是父类没有该方法!编译阶段就报错!!!!
在这里插入图片描述

instanceof :强转前先判断

作用:如果使用父类变量接对象,那么不清楚接到的对象具体是哪个对象,使用instanceof不会出现ClassCastException异常
在这里插入图片描述

三、final

在这里插入图片描述
Java中的变量:
(区别于数据类型:基本数据类型、引用数据类型)
在这里插入图片描述

1、
在这里插入图片描述
2、
在这里插入图片描述

3、注意:

在这里插入图片描述

在这里插入图片描述
4、常量
在这里插入图片描述

在这里插入图片描述

四、抽象类

在这里插入图片描述
在这里插入图片描述

总结:
在这里插入图片描述
abstract抽象类存在构造器吗?
存在!!!
虽然抽象类没有提供任何构造函数,编译器将为抽象类添加默认的无参数的构造函数,如果没有的话抽象类的子类将无法编译,因为在任何构造函数中的第一条语句隐式调用super(),即调用父类的构造器。
在这里插入图片描述

抽象类的好处

在这里插入图片描述
不用也可以,父类的构造函数写一个方法体,子类重载就行;
抽象方法(无方法体),则强制子类必须重写

应用场景

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、接口

在这里插入图片描述

接口定义变量、方法

变量都是静态的常量,如果是不是常量那通过A.name修改后所有对象的成员变量都将改变!!!
在这里插入图片描述

实现类必须实现接口的全部抽象方法
在这里插入图片描述

接口的好处:弥补单继承的不足

在这里插入图片描述

面向接口编程!
在这里插入图片描述
在这里插入图片描述

班级学生信息管理模块

在这里插入图片描述

在这里插入图片描述

1、信息类
在这里插入图片描述
2、操作类:向上又向下!!!!!!
(提供方法给主函数调用,同时也调用了实现类的方法)
在这里插入图片描述
3、操作的接口
在这里插入图片描述
4、实现类
在这里插入图片描述
5、主函数
在这里插入图片描述

切换方案:在这里插入图片描述

六、接口新增方法

在这里插入图片描述
当接口需要拓展方法时,只需增加一个带方法体的方法,实现类不需要重写!!!!
在这里插入图片描述

接口多继承

类单继承(亲爹),接口多实现(干爹)
接口多继承:实现类只需要实现一个接口,方便一点
在这里插入图片描述

四、

一、外部类

成员内部类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

静态内部类

类方法中不能访问实例成员变量(不带static),是对象的成员变量,只能访问类变量!!!

静态内部类的方法中同样也不能!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

匿名内部类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

应用

不需要定义实现类,直接构建匿名类内部对象:简化代码!
一般不写,在调用API需要传递参数为对象时,才用!!!
在这里插入图片描述
再简化:
在这里插入图片描述
lamda表达式
在这里插入图片描述

二、枚举类

1、枚举类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、抽象枚举

抽象枚举第一行不能直接罗列对象?
因为该类中有抽象方法
如果第一行创建了对象X,Y,Z,那岂不是可以直接调用该类的抽象方法了?
在这里插入图片描述

3、枚举的应用

1、
在这里插入图片描述
约束好了,代码严谨!游戏性能好
在这里插入图片描述

2、枚举应用到单例设计模式
在这里插入图片描述

三、泛型

在这里插入图片描述
在这里插入图片描述

泛型类

在这里插入图片描述
在这里插入图片描述

泛型接口

在这里插入图片描述
再拓展:
在这里插入图片描述

泛型方法

传入的参数确定返回值类型!!!
泛型方法中是在本类中自己定义的
在这里插入图片描述

1、
在这里插入图片描述
2、
在这里插入图片描述

泛型方法的应用场景

1、
在这里插入图片描述
2、
在这里插入图片描述
3、
在这里插入图片描述
4、通配符
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

泛型擦除

在这里插入图片描述
注意事项:数据类型限制在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值