![8bfca9f6c0d0c1bd013863b8c65898d4.png](https://i-blog.csdnimg.cn/blog_migrate/400b303f6b1e53b3b4bc1d1d8657d840.jpeg)
(六)面向对象-下
关键字:static
static
- 可以用来修饰的结构:主要用来修饰类的内部结构
- 属性、方法、代码块、内部类
- static修饰属性:静态变量(类变量
属性,是否使用static修饰,又分为:静态属性vs非静态属性(实例变量
实例变量:
我们创建了类的多个对象,每个对象独立拥一套类中的非静态属性。当修改其中一个对象中的静态属性 时 不会导致其他对象中同样的属性值的修改。
静态变量:
我们创建了类的多个对象,多个对象共享同一个静态变量。当通过某一个对象修改静态变量时会导致其他对象调用此静态变量时,是修改过的
static修饰属性的其它说明:
1、静态变量随着类的加载而加载
2、静态变量加载早于对象的创建。可以通过"类.静态变量"的方式进行调用
3、由于类智慧加载一次,则静态变量的内存中也只会存在一份:存在方法区的静态域
静态属性举例:System.out; Math.PI
- 静态变量内存解析
![8db0309fdfd3a062d183b2c753bd5ddb.png](https://i-blog.csdnimg.cn/blog_migrate/ce7c4e8e2a84c0c809440dd64aecafb6.jpeg)
- static修饰方法:静态方法
随着类的加载而加载,可以通过“类.静态方法”的方式进行调用
静态方法中,只能调用静态的方法或属性
非静态方法中,既可以调用静态的方法或属性,也可以调用静态的方法或属性
- static的注意点 在静态的方法内,不能使用this关键字、super关键字 关于静态属性和静态方法的使用,大家都从生命周期的角度去理解
- 如何判定属性和方法应该使用static关键字
关于属性
属性可以被多个对象所共享的,不会随着对象的不同而不同 类中的常量也常常声明为静态变量
关于方法
操作静态属性的方法通常设置为静态的 工具类的方法,通常声明为static的。比如:Math、Arrays、Collections
- 使用举例
举例一:Arrays、Math、Collections等工具类
举例二:单例模式
举例三:
class Circle{
private double radius;
private int id;
public Circle(){
id = init++;
total++;
}
public Circle(double radius){
this();
this.radius = radius;
}
private static int total;//记录圆创建的个数
private static int init = 1001;//static的属性被所对象所共
public void setId(int id) {
this.id = id;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
public int getId() {
return id;
}
public double findArea(){
return 3.14*radius*radius;
}
public static int getTotal() {
return total;
}
}
单例模式
- 设计模式的说明
理解:设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式
常用设计模式:23种经典的设计模式
- 单例模式
要解决的问题:所谓 类的单例设计模式,就是