阶段一模块二任务三 static和继承
&&&&&&&&&&总结
& static关键字
概念,使用方式,构造块和静态代码块,单例类设计模式,饿汉式和懒汉式等
& 继承
概念,特点,方法的重写,重写的原则,
& 访问控制
public,private,package,导入等
& final关键字
概念,修饰类,成员方法,成员变量,常量
1,static关键字
a,基本概念
表示静态的含义,此时成员变量由对象层级提升至类层级,
即整个类只有一份,且被所有成员共享
该成员变量随着类的加载准备就绪,与是否创建对象无关
b,使用方式
在非静态的成员方法中能访问非静态的成员又能访问静态的成员
(成员: 成员变量 + 成员方法, 静态成员被所有对象共享)
静态成员方法中只能访问静态成员不能访问非静态成员
(成员: 成员变量 + 成员方法, 因为此时可能还没有创建对象)
在以后的开发中 只有隶属于类层级并被所有对象共享的内容
才可以使用static关键字修饰
2,构造块和静态代码块(熟悉)
a,构造块:
在类体中直接使用{}括起来的代码块
每创建一次对象都会执行一次构造块
b,静态代码块
使用static修饰的构造块
静态代码块只会执行一次
3,main方法详解
java MainTest 关羽 张飞 赵云 黄总 马超
以上即为赋参
4,Singleton类的实现(重中之重 )
//1.私有化构造方法,使用private
private Singleton(){}
//2.声明本类类型的引用指向本类类型的对象,使用private和static共同修饰
private static Singleton sin = new Singleton(); //饿汉式
//3.提供公有的get方法负责将对象返回出去,使用public static关键字共同修饰
public static Singleton getInstance() {
return sin;
}
================main方法中==========>>>>>>>>>>>>>
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2); //true
5,单例类设计模式, 即Singleton类 (例如任务管理器)
a,实现流程
私有化构造方法使用private修饰
声明本类类型的引用指向本类类型的对象,并使用private static 关键字共同修饰
提供公有的get方法负责将对象返回出去,并使用public static 共同修饰
6,继承
a,继承的由来和概念
将相同内容提取出来组成一个公共类,让多个类吸收公共类中已有特征和行为,
而在多个类型中只需要编写自己独有的特征和行为的机制
在Java中使用extends(扩展)关键字类表示继承关系
例如:
public class Worker extends Person {} - 表示Worker类继承自Person类
其中 Person类叫做超类,父类,基类
Worker类叫做派生类,子类,孩子类
b,继承的意义
提高了代码的复用性, 可维护性及扩展性, 是多态的前提条件
c,继承的特点
&子类不能继承父类的构造方法和私有方法,但私有成员变量可以继承但是不能直接访问
&无论使用何种方式构造子类的对象时,都会自动调用父类的无参构造方法,
来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代码super()的效果
&使用继承必须满足逻辑关系: 子类 is a 父类,也就是不能滥用继承
&Java语言中只支持单继承不支持多继承,也就是一个子类只能有一个父类,
但一个父类可以有多个子类
7,方法重写
a,概念
从父类中继承下来的方法不满足子类的需求时,就要在子类中重新写一个和父类一样的方法
来覆盖从父类继承下来的版本,该方式就叫做方法的重写(Override)
b,原则(复制过去就行)
要求方法名相同,参数列表相同以及返回值类型相同,从Java5开始允许返回子类型
方法的访问权限不能变小,但是可以变大或者相同
要求方法异常只能变小
8,构造块和静态代码块的考点(笔试)
先执行父类的静态代码块,再执行子类的静态代码块
执行父类的构造块,执行父类的构造方法体
执行子类的构造块,执行子类的构造方法体
9,权限修饰符和包
a,常用的访问控制符
修饰符 本类 同一个包中的类 子类 其他类
public 可 可 可 可
protected 可 可 可 不可
默认(啥都不写) 可 可 不可 不可
private 可 不可 不可 不可
public修饰的可在任意位置使用
private修饰的只能在本类使用
通常情况下, ,成员方法都用public, 成员变量都private
b, 包package语句
&由来
定义类时需要指定类的名称, 但如果仅将类名作为类的唯一标识,
则不可避免的出现命名冲突的问题,
会给组件复用以及团队间的合作造成麻烦
在Java中使用package来区别
&定义
在定义一个类时,除了定义类的名称,一般还要指定一个包名,格式如下:
package 包名;
package 包名1.包名2.包名3...包名n;
为了实现项目管理,解决命名冲突以及权限控制的效果
&规范
org.apache.commons.lang.StringUtil
其中StringUtils是类名而org.apache.commons.lang是多层包名,含义:
org.apache表示公司或组织的信息, commons表示项目名称,
lang表示模块的名称信息
&导入
使用import关键字导入包
使用import关键字导入静态成员,从Java5.0开始
10,final关键字
a,概念
可以修饰类,成员方法,成员变量
b,使用方式
final修饰类体现在该类不能被继承
- 主要用于防止滥用继承, 如: java.lang.String
final修饰方法现在该方法不能被重写,但可以被继承
- 防止不经意间造成重写,如: java.text.Dateformate类中的format方法等
final修饰成员变量体现在该成员变量必须初始化且不能改变
- 主要用于防止不经意间造成改变,如: java.lang.Thread类中MAX_PRIORITY等
11,常量
在以后的开发中很少单独使用final关键字来修饰成员变量,
通常使用public static final关键字共同修饰成员变量来表达常量的含义,
常量的命名规范要求是所有字母都要大写,不同的单词之间采用下划线连接
目的是(类名.)就可以访问,不用创建对象