概念
static:静态的,可以用来修饰属性、方法、*代码块(或初始化块)、*内部类
static修饰属性(类变量):
1.由类创建的所有的对象,都共用这一个属性
2.当其中一个对象对此属性进行修改,会导致其他对象对此属性的一个调用。vs 实例变量(非static修
饰的属性,各个对象各自拥有一套副本)
3.类变量随着类的加载而加载的,而且独一份
4.静态的变量可以直接通过“类.类变量”的形式来调用
5.类变量的加载是要早于对象。所以当有对象以后,可以“对象.类变量”使用。但是"类.实例变量"是不
行的。
6.类变量存在于静态域中。
static修饰方法(类方法):
1.随着类的加载而加载,在内存中也是独一份
2.可以直接通过“类.类方法”的方式调用
3.内部可以调用静态的属性或静态的方法,而不能调用非静态的属性或方法。反之,非静态的方法是可
以调用静态的属性或静态的方法
静态的方法内是不可以有this或super关键字的!
注:静态的结构(static的属性、方法、代码块、内部类)的生命周期要早于非静态的结构,同时被回收也
要晚于非静态的结构
static修饰代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,
它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按
照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
例题解析
- public class TestCircle {
- public static void main(String[] args) {
- Circle c1 = new Circle();
- Circle c2 = new Circle(2.3);
- System.out.println(c1);
- System.out.println(c2);
- System.out.println(Circle.getTotal());
- }
- }
- class Circle{
- private double radius;
- private static String info = "我是一个圆";
- private int id;//编号
- private static int init = 1001;//控制每个对象的id
- private static int total = 0;//记录创建了多少个对象
- public Circle(){
- this.id = init++;
- total++;
- }
- public Circle(double radius){
- this.radius = radius;
- this.id = init++;
- total++;
- }
- public double getRadius() {
- return radius;
- }
- public void setRadius(double radius) {
- this.radius = radius;
- }
- public static String getInfo() {
- return info;
- }
- public static void setInfo(String info) {
- Circle.info = info;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public static int getTotal() {
- return total;
- }
- public static void setTotal(int total) {
- Circle.total = total;
- }
- @Override
- public String toString() {
- return "Circle [radius=" + radius + ", id=" + id + "]";
- }
- public static void show(){
- System.out.println(Circle.info);
- }
- public void desc(){
- System.out.println(this.info);
- }
- }

我的微信
有问题微信找我