1.static是什么
static是静态的意思,可以用来修饰成员变量、成员方法
static修饰成员变量之后称为静态成员变量(类变量),修饰方法之后称为静态方法(类方法)
static修饰后的成员变量,可以被类的所有对象共享(访问、修改)
同一个类中,静态成员变量、静态方法的访问可以省略类名
2.成员方法的分类
静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问
实例成员方法(无static修饰,归属于对象),只能用对象触发访问
3.static访问注意事项
静态方法只能访问静态的成员,不可以直接访问实例成员
实例方法可以访问静态的成员,也可以访问实例成员
静态方法中是不可以出现this关键字的
4.工具类是什么
类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的
5.使用工具类的好处
一是调用方便,二是提高了代码复用(一次编写,处处可用)
6.为什么工具类中的方法不用实例方法做?
实例方法需要创建对象调用。 此时用对象只是为了调用方法,这样只会浪费内存。
7.工具类有什么要求
工具类不需要创建对象
建议工具类的构造器私有化处理
8.代码块的概念
代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。
在Java类下,使用 { } 括起来的代码被称为代码块 。
9.代码块的分类
(1)静态代码块:
格式:static{ }
特点:有static关键字修饰,属于类,与类一起优先加载一次,自动触发执行
使用场景:初始化静态资源
(2)构造代码块/实例代码块(了解,见的少):
格式:{ }
特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且在构造器执行前执行
使用场景:初始化实例资源。
10.单例模式
可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象
例如任务管理器对象我们只需要一个就可以解决问题了
11.饿汉单例模式
概念:在用类获取对象的时候,对象已经提前为你创建好了
实现步骤:(1)定义一个类,把构造器私有化 (2)定义一个静态变量存储对象
public class SingleInstance {
/**
2.饿汉单例是在获取对象前,对象已经提前准备好了一个
*/
public static SingleInstance instance=new SingleInstance();
//1.必须把构造器私有化
private SingleInstance(){
}
}
SingleInstance s=SingleInstance.instance;
12.懒汉单例模式
概念:在真正需要该对象的时候,才去创建一个对象(延迟加载对象)
实现步骤:(1)定义一个类,把构造器私有化 (2)定义一个静态变量存储一个对象(最好私有化)
(3)提供一个返回单例对象的方法
public class SingleInstance2 {
/**
* 2.定义一个静态的成员变量负责存储一个对象
* 只加载一次,只有一份
* 注意:最好私有化
*/
private static SingleInstance2 instance;
/**
* 3.提供一个方法,对外返回单例对象
*/
public static SingleInstance2 getInstance(){
if (instance == null) {
//第一次来拿对象,此时需要创建对象
instance = new SingleInstance2();
}
return instance;
}
/**
* 1.私有化构造器
*/
private SingleInstance2(){
}
}
SingleInstance2 s=SingleInstance2.getInstance();
13.继承
概念:继承就是java允许我们用extends关键字,让一个类和另一个类建立起一种父子关系
格式:子类 extends 父类
好处:提高代码复用性,减少代码冗余,增强类的功能扩展性
继承后子类特点:子类可以得到父类的属性和行为,子类可以使用, Java中子类更强大
设计规范:子类们相同特征(共性属性,共性方法)放在父类中定义,子类独有的的属性和行为应该定义在子类自己里面
14.继承的特点
(1)子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
(2)Java是单继承模式:一个类只能继承一个直接父类。
(3)Java不支持多继承、但是支持多层继承。
多继承会出现二义性,所以java不支持多继承,但java支持多层继承
(4)Java中所有的类都是Object类的子类
15.子类是否可以继承父类的私有成员
有争议
可以,但不能直接访问
16.子类是否可以继承父类的静态成员
有争议
子类可以直接使用父类的静态成员(共享)
但个人认为:子类不能继承父类的静态成员(共享并非继承)
17.继承后,在子类方法中访问成员(成员变量、成员方法)满足:就近原则
先在子类局部范围找
然后在子类成员范围找
然后在父类成员范围找,如果父类范围还没有找到则报错
18.方法重写
概念:子类写一个与父类申明一样的方法覆盖父类的方法
@Override重写注解:放在重写后的方法上,作为重写是否正确的校验注解
方法重写的注意事项和要求:
重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。
私有方法不能被重写。
子类重写父类方法时,访问权限必须大于或者等于父类 (暂时了解 :缺省 < protected < public)
子类不能重写父类的静态方法,如果重写会报错的。
19.子类继承父类后构造器的特点
子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。
(为什么?子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化)
子类构造器的第一行语句默认都是:super(),不写也存在
20.继承后,子类构造器访问父类有参构造器:
super调用父类有参数构造器的作用: 初始化继承自父类的数据。
如果父类中没有无参数构造器,只有有参构造器,会出现什么现象呢?
会报错。因为子类默认是调用父类无参构造器的。
如何解决? 子类构造器中可以通过书写 super(…),手动调用父类的有参数构造器
21.this(...)和super(…)使用注意点:
子类通过 this (...)去调用本类的其他构造器,本类其他构造器会通过 super 去手动调用父类的构造器,最终还是会调用父类构造器的。
注意:this(…) super(…) 都只能放在构造器的第一行,所以二者不能共存在同一个构造器中。