一、Static修饰符
static是静态的意思,基本概念如下:
Static分类:
一般我们分类都是按照是否使用static修饰进行分类。分为静态变量(类变量)、实例变量。
静态变量和实例变量的比较:
比较,只要记住一点其它的就都很好理解了。静态变量在内存空间只有一份。
使用场景:
应用实例:
需要注意:静态方法只能访问静态实例。不能访问实例变量。
一二、单例模式
饿汉式模型:
懒汉式模型:
应用场景:
main()方法解释:
加了static之后,可以看作是程序的入口。
一三、代码块
代码块就是用来初始化类和对象的信息。根据初始化的内容不同,分为静态代码块和非静态代码块。
基本概念:
代码块的使用:
一四、类中属性赋值顺序:
(笔试题常考)
二、final修饰符:
概念:
final修饰符表示最终的,用在类、方法、变量。在方法里,代表地址不能变。在变量上,表示变量内容不能变。在类里,无法被继承。
而前面学到static修饰符,它更多的用在代码块,对属性赋值时用的比较多。
final修饰变量的分类:
三、抽象类和方法
抽象,就是只有方法签名,没有方法体。分为抽象类和抽象方法。它的具体实现主要在于重写抽象方法。(而且重写抽象类的属性叫做implement,不是ovriding)
基本概念:
只用于修饰类和方法。不能用于修饰属性!
具体使用:
作用范围:(常考)
三二、模板方法设计模式:
(TemplateMethod)
看这个模板设计模式,其实就是抽象类的一个特性,它表明,在抽象类里面可以写抽象方法也可以写非抽象方法。而在继承的子类里面,只需要重写抽象方法即可。
疑惑::
前面说,抽象类的实例化,必须由子类全部重写父类的方法才能实现类的实例化。那这种模板设计模式,应该是不会重写抽象类的非抽象方法的。那直接实例化是否会报错?
可以直接实例化子类!那也就是说没有全部重写父类的方法,只重写父类的抽象方法。子类是可以运行的,不会被认作抽象类。
三三、接口(重点)
接口,其实就是和抽象类一样的特性,不过,和抽象类不同的是,它们不是继承关系,而是实现关系!也不是子类和父类的关系,而是接口(相当于父类)和实现类的关系。接口也有多态性。它和抽象的不同就是,它没有构造器。用不了super和this的方法。
概念:
就是“能不能”,相当于某一个功能性的实现!
样例模型:
声明属性,不要忘记添加static final;声明方法,不要忘记添加abstract。
接口的特性:
新增两种匿名对象的方式:
面试题:区分抽象类和接口
继承和接口的综合使用:
三四、JDK8和JDK9的接口新特性
JDK8之前,方法的修饰必须加上public abstract。
JDK8之后,可以调用默认方法,静态方法(static)。
知识点1:接口声明的静态方法,只能由接口调用。不能由其实现类调用。
知识点2:接口声明的默认方法可以被实现类继承。相当于实现类继承接口的默认方法。有重写的特性。
知识点3:类实现两个接口,这两个接口有同名同参的默认方法。若实现类没有重写这两个默认方法,就会报错。(接口的默认方法冲突)
知识点4:子类继承父类然后又实现了接口。但是父类和接口有同名同参的方法。默认调用父类的方法。类优先原则。
知识点5:在实现类中调用接口里被重写的方法。(接口.super.方法() )
四、内部类
内部类,其实就是创建在一个类中的另一个类,它和外部类的关系是this关系,不是继承,也不是实现。内部类的作用是可以实现“高内聚,低耦合”的开发原则。
基本概念:
分类:
需要掌握:
创建内部类的实例、在内部类调用外部类的结构。
成员内部类的理解:
创建内部类的实例(考):
有两种类型的创建方式,分为静态内部类的创建实例(new 类.类),非静态内部类的创建实例(类对象.new.类)。
接口内部类的三种匿名方式:
这个Comparable是jdk自带的一个类。
内部类传值(常考)
五、枚举类
枚举类也是一种类,它和class修饰的类不同的是,枚举它不能在测试里面随意创建它的对象。枚举相当于是已经在此类里面创建好了实例。
概念:
枚举类的实现:
在JDK5之前,实现在类的外部不能创建其对象(也就是实现枚举的方式):
第一步:声明当前类的对象的实例变量(声明属性)。(外不可见)
第二步:私有化类的构造器。 在外部不能创建对象。
第三步:创建类的实例。public static final。声明常量对象。(外可见)
jdk5之后直接使用枚举类:
枚举类的使用方式:
主要在平常例子里面,我们创建好了枚举类之后,怎么使用它。下面介绍了几种方式,主要记住,枚举类型[ ] values()。它返回该对象的数组。
测试实例:
枚举类实现接口:
实现对应于继承关系
枚举的类型:
分为无参的枚举,这种情况下没有构造器,没有重写tostring方法。
带参的枚举,这种情况下有构造器,需要根据需要重写tostring方法。
六、注解Annotation
注解就是从jdk5.0开始,以@注解名的方式存在。它的作用就是简便。可以代替一些配置文件的使用。也可以指定所使用类的范围。
基本概念:
基本的注解:
常用的注解就是前面两个。
元注解:
其实就是对现有注解在注解。用来指定这个注解的范围、格式。
6.1、单元测试(重要)
单元测试本质就是白盒测试。像之前我们使用增删改查,每一个类都要写一个测试类。这样就比较麻烦,通过单元测试就不用每一个类都写一个测试。可以把需要测试的类、方法都放一起。每一个都可以单独测试。而且它也可以把一个类里不同的方法也单独测试。
基本概念:
基本步骤:
样例:@Test
简化操作:
七、包装类的理解
包装类就是swapper。通过学习包装类,我们可以在使用基本数据类型时将其转换为引用数据类型。因为一些基本数据类型是用不了面向对象的一些方法。就很不方便。例如下面:
存在的必要:
核心要求:
基本数据和包装类之间的转换。
案例操作:
jdk5之后:
jdk5之后的版本,开始使用自动装箱和自动拆箱。比之前使用的方式更加迅捷,但是本质还是使用基本的方式。
7.1、String的数据转换:
基本概念:
互相转换:
对于String类型,包装类,基本数据类型的转换如下图所示。其实在jdk5之后,相当于只有String类和(String类与包装类)的互相转换。
自动装箱注意:
自动装箱的方式应该只适用于包装类和基本数据类型类。对于String类,它的本质就是另类的包装类。它的转换方式是String.valueOf( i )。而之前学的基本型转包装类也是,Interger.valueOf( i )。
不同的是String转基本类。使用的方式是parseInt( String )。而包装类转基本类使用的是intValue( Integer )。
案例操作:
前面学习使用数组存储数据,这次这里使用vector的方式存储。它们的优缺点:
操作步骤:
使用自动装箱和装箱的差异:
v.addElement(Object obj); 相当于Object obj = intScore。(进行了自动装箱)。这种方式用的最多的。
笔试题:
八、IDEA快捷键和断点。