"Java面向对象深入,探讨了静态属性、静态方法、静态修饰符static的使用,以及在类和对象中的应用。"
在Java面向对象编程中,静态属性(也称为类变量)是所有对象共享的数据成员。这意味着无论创建多少个对象,静态属性都只有一个副本,它存储在内存的静态存储区。例如,在类`Circle`中有一个静态属性`radius`,其值在内存中的地址是固定的,如0x3000或0x8000。可以通过类名(如`Circle.radius`)或对象名(如`q.radius`或`p.radius`)来访问静态属性。
静态属性的特点是,当通过一个对象修改静态属性时,所有其他对象都能看到这个变化。在练习中,创建了两个`Circle`对象`c`和`d`,如果修改`c`的`pi`,那么`d`的`pi`也会随之改变,因为它们都引用同一个静态变量。
除了静态属性,还有静态方法。静态方法不需要创建对象就可以调用,它直接属于类,而不是属于任何特定的对象。例如,`Circle`类中可以有`getPi()`和`getRadius()`这样的静态方法,用于获取`pi`和半径的值。静态方法可以通过类名直接调用,如`Circle.getPi()`,也可以通过对象实例调用,如`c.getPi()`。但静态方法不能访问非静态成员,因为它不与特定对象关联,所以不能使用`this`关键字,并且不能被非静态方法覆盖。
静态修饰符`static`还可以用于静态代码块,这些代码块在类加载时执行一次,用于初始化静态属性。静态代码块的执行优先级高于非静态代码块和构造方法。同时,`main`方法是每个Java应用程序的入口点,它必须是public、static和void返回类型,接收一个`String[]`类型的参数`args`,表示命令行参数。
在类和对象初始化的过程中,静态属性首先被初始化,然后是父类的静态属性和非静态属性,最后是子类的静态和非静态属性。在同一个类内,初始化顺序为:1) 隐式赋予变量默认值,2) 显示赋予初始值,3) 构造方法体赋予新值。
了解并熟练运用这些概念对于深入理解Java面向对象编程至关重要,它可以帮助我们更好地设计和实现类,优化代码结构,提高程序效率。在实际开发中,合理利用静态属性和方法可以有效地减少资源消耗,特别是在需要全局共享数据或者不依赖对象状态的场景下。