一、static关键字
1.定义及用法
(1)定义[相关概念]
- static是静态的意思,可以用来修饰成员变量、成员方法。
- static修饰成员变量之后称为静态成员变量(or类变量),修饰方法之后称为静态方法(类方法)。
- static修饰后的成员变量,可以被类的所有对象共享(访问、修改)。
(2)用法
static修饰成员变量时,被称为静态成员变量。
其特点是:属于类、加载一次,内存中只有一份
其访问格式为:①类名.静态成员变量(推荐)②对象名.静态成员变量(不推荐)
static修饰成员方法时,被称为静态成员方法
特点,格式均与静态成员变量相同;需要注意的是静态成员方法只能访问静态成员变量,且不可以出现this关键字
2.具体代码
public class Student
private String name;
∥1.实例方法:无static修饰的,属于对象的
public void study(){
System.out.println(name+"在好好学习~~~");
}
∥2.静态方法:有static修饰,属于类和对象共享的
public static int getMax(int a int b){
return a>b?a:b;
}
public static void main(String[]args){
∥1.类名.静态成员方法
System.out.println(Student.getMax(10,2));
川注意:同一个类中访问静态成员类名可以不写
System.out.println(getMax(2,10));
∥2.对象.实例成员方法
∥study();∥会报错
Student s new Student();
s.name="猪八戒";
s.study();
∥3.对象静态成员方法。(不推荐)
System.out.println(s.getMax(20,10));
3.static基础应用知识
(1)工具类
Q:什么是工具类?
A:类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的。这样的类就是工具类
Q:工具类有什么用?
A:①调用方便(直接用类名.静态方法名即可);②提高了代码复用
Q:工具类有什么要求?
A:
- 建议工具类的构造器尽量私有化处理
- 工具类不需要创建对象
(2)代码块
Q:什么是代码块?
A:代码块是类的5大成分之一(成员变量、构造器,方法,代码块,内部类),定义在类中方法外。
(3)单例设计模式
① 设计模式的定义:开发中经常遇到一些问题,一个问题通常有n种解法的,但其中肯定有一种解法是最优的,这个最优的解法被人总结出来了,称之为设计模式。
② 单例设计模式的作用:可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
③两种常见的单例设计模式:
- 饿汉设计模式 – 怕饿着,所以先创建好备着
具体指:在用类获取对象的之前,提前创建好对象。
/**a、定义一个单例类*/
public class SingleInstance{
/**a.定义一个静态变量存储一个对象即可:属于类,与类一起加载一次*/
public static SingleInstance instance new SingleInstance ();
/**b.单例必须私有构造器*/
private SingleInstance ();
System.out.println("创建了一个对象");
}
- 懒汉设计模式 – 懒得提前创建,要用了才创建
具体指:在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。
/**定义一个单例类*/
class SingleInstance{
/**定义一个静态变量存情一个村象即可:属于类,与类一起加载一次*/
public static SingleInstance instance //null
/**单例必须私有构造器*/
private SingleInstance(){}
/**必须提供一个方法返回一个单例对象*/
public static SingleInstance getInstance(){
instance = new SingleInstance();
return instance;
注意!使用单例设计模式的类若后续需要获取和修改参数,则一定要提供对外的接口,比如getxxx()方法和setxxx()方法。
二、面向对象三大特性之二 ---- 继承
1.基本概念
什么是继承?
继承是java允许我们用extends关键字,让一个类和另一个类建立起一种父子关系。
继承的好处
提高代码复用性,减少代码冗余,增强类的功能扩展性。
继承的特点
①子类可以继承父类的属性和行为,但是子类不能继承父类的构造器。
②Java是单继承模式:一个类只能继承一个直接父类。【但是接口可以有多个父级接口】
③Java不支持多继承、但是支持多层继承。
④Java中所有的类都是Object类的子类。
2.易错点
(1)一些特殊的变量能否继承
①父类的私有成员变量/方法 – 可以继承,但是不可以直接访问,可以使用super.xx访问
②父类的静态成员 --子类可以直接共享访问,但不应理解为继承(尚有争议)
(2)在子类中访问成员遵循 就近原则
(3)构造器问题
子类中所有的构造器默认都会先访问父类中无参的构造器,再执行自己。
3.方法重写
定义:在继承体系中,子类出现了和父类中一模一样的方法声明,我们就称子类这个方法是重写的方法
注意点:
- 最好在重写的方法之上都加上@override重写注解(加上该注解后如果重写错误,编译阶段会出现错误提示。)
- 重写方法的名称、形参列表必须与被重写方法的名称和参数列表一致。
- 私有方法不能被重写。
- 子类重写父类方法时,访问权限必须大于或者等于父类 (缺省 < protected < public)
- 子类不能重写父类的静态方法,若重写则会报错。