一、static类
1、static类的定义
static被称为静态,可以用来修饰类的属性或方法。
如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰,被static修饰的属性称为静态属性。
static属性可以使用对象调用,也可以直接用类名调用。
静态属性的类的所以对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个。
public class Employee{
private String name;--------------------------非静态类
private double salary;------------------------非静态类
private static int count;-----------------------静态类
}
2、static方法定义
如果某个方法不需要与某个特定的对象绑定,那么该方法可以使用static修饰,被static修饰的方法称为静态类方法。
访问权限 static修饰符 返回值类型 方法名
public static void sellticket(){
System.out.println("所有火车票都是12306卖的!")
}
3、static方法可以使用对象调用,也可以直接用类名调用建议用类名直接调用
4、何时使用static方法
如果某个方法与实例无关,也就是说不管那个对象调用这个方法,都执行相同的操作,与对象没有关系,则应该定义为静态方法。不需要创建对象后在使用该方法。
如:API中的Math,都是静态方法,因为进行数学运算,与Math对象本身无关,使用类直接调用即可。
任何方法都可以直接调用静态方法;
静态方法不能直接调用静态方法,需要创建对象,用对象名调用非静态方法
5、static块
static块和static的属性以及方法的性质是相同的,用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块。
区别在于语法不同。
static块语法:直接在代码块前加上关键字static即成为静态块。
static用途
1)、静态块只有在类加载的时候被执行一次,不管创建多少个对象,都不会再执行。
2)、如果一个类加载的时候,总要预先做一些事情,则可以放在静态块中,例如,读取一个属性文件,进行一些常规配置,写一些日志等。
3)、一个类中可以有多个静态块,按照顺序执行。
二、final
1、final用于定义声明属性,方法和类
属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改。
方法:定义必须有实现代码,并且子类里不可被继承。
类:不能被定义为抽象类或是接口,不可被继承。
2、final修饰属性
当final修饰属性时,基本数据类型的属性将成为常量,不能被修改
一些数学定理中的常量经常使用final修饰
3、final属性的赋值
在声明时同时赋值,往往与static一起使用
在声明时不赋值,必须在构造方法中逐一赋值
总的原则:保证创建每一个对象的时候,final属性得知是确定的
例:
4、final修饰参数
在方法参数面前加final关键字,为了防止数据在方法体中被修改。
三、类与类的关系
1、关联关系
1)、关联关系定义
对象和对象之间的链接。在Java中,关联关系的代码表现形式为一类做为另一类的属性类型存在。
即“有”的关系:"has-a".
2)、关联关系的方向
单向关联:A类关联B类。
双向关联:A类关联B类,B类关联A类;例:
3)、关联关系的多重性
一对一关联:一个学生只能在一个班级学习。
一对多关联:一个学生,可以参加多个班级学习
解决方案:集合与数组
2、依赖关系
1)、依赖关系定义(use-a)
指一个类A使用到另一个类B
2)、依赖关系的特性
这种关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A。
3)、依赖具体表现
在代码层面,依赖关系表现为类B作为参数被类A在某个method
方法中使用
3、关联与依赖的区别
关联是“HAS”关系,依赖是“USE”关系
A类关联B类,指的是B类对象作为A类的属性存在,称为“has”关系。
A类依赖B类,指的是B的对象作为A类的方法参数存在,称为“use”关系。
生命周期不同
如果A类关联B类,那么创建A类的对象时实例化B类的对象,直到A类对象被销毁,所关联的B类对象也被销毁。即只要A类对象存在,B类对象就存在。
如果A类依赖B类,那么只有当A类对象调用到相应方法时,B类对象才被临时创建,方法执行结束,B类对象即被回收,A类和B类之间的依赖关系是一种瞬时的关系。