1、含义:
是关键字,表示静止的,静态的
2、修饰成员:
成员属性和成员方法
3、静态成员属性
(1)语法
访问修饰符 static 数据类型 属性名;
(2)代码示例
class Voter {
static int count;//票数
public void vote() {
count++;//票数+1
}
}
public class Demo2_静态 {
public static void main(String[] args) {
//需求1:模拟匿名投票
//投票人(投票)
Voter vo = null;
//需求2:模拟100个投票人匿名投票
//Scanner input = new Scanner(System.in);
for (int i = 1; i <= 100; i++) {
vo = new Voter();
vo.vote();
}
//通过类名.静态成员属性名
System.out.println("总票数为:" + Voter.count);//总票数为:100
}
}
3)静态成员变量的内存图解

(4)静态成员变量的作用:
多个对象使用静态变量,实现静态变量的共享。
(5)静态成员变量和非静态成员变量的区别
1)、定义方式不同:静态变量使用static修饰,非静态变量不使用static修饰符。静态变量又称为类变量,非静态变量又称为对象变量。
2)、内存位置不同:静态变量存在于方法去中,非静态变量存在于堆内存中。
3)、作用范围不同:静态变量作用该类所有对象,非静态变量只能作用于本对象中。
4)、生命周期不同:静态变量生命周期开启于类加载,消亡于类卸载。非静态变量生命周期开启于对象创建,消亡于对象变成垃圾空间被jvm回收。
4、静态成员方法
(1)语法
访问修饰符 static 返回值类型 方法名(参数列表){
方法体
}
(2)代码示例
class Voter {
static int count;//票数
public static void vote() {
count++;//票数+1
}
}
public class Demo2_静态 {
public static void main(String[] args) {
//需求1:模拟匿名投票
//投票人(投票)
Voter vo = null;
//需求2:模拟100个投票人匿名投票
//Scanner input = new Scanner(System.in);
for (int i = 1; i <= 100; i++) {
//通过类名.静态成员方法名
Voter.vote();
}
//通过类名.静态成员属性名
System.out.println("总票数为:" + Voter.count);//总票数为:1
}
}
5)静态成员方法的内存图解

6)静态成员方法使用注意点
class Voter {
// public static Voter(){
//
// }
static int count;//票数
int num;
public static void vote() {
count++;//票数+1
//1、静态方法可以使用静态变量,不能使用非静态变量
//解析:非静态变量必须有对象才能使用,静态变量无需对象也能使用,这里矛盾。
//2、静态方法可以调用静态方法,不能调用非静态方法
//解析:非静态方法必须有对象才能使用,静态方法无需对象也能使用,这里矛盾。
//System.out.println(num);
method();
//function();
//3、构造方法不能使用static修饰
//4、不能使用关键字this
}
public static void method(){
}
public void function(){
}
}
静态成员方法的应用——工具类:
//面积类(工具类,类中所有成员都静态)
class Area {
//private double r;//变量只作用与求圆的面积
private final static double PI = 3.14;
// public double getR() {
// return r;
// }
//
// public void setR(double r) {
// this.r = r;
// }
public static double getCircleArea(double r) {
return PI * r * r;
}
}
public class Demo3_静态练习 {
public static void main(String[] args) {
//需求:求圆的面积
//分析:面积{求圆的面积(),半径,PI}
//Area area = new Area();
//area.setR(1.5);
//area.setPi(3.33)x;
System.out.println(Area.getCircleArea(1.5));//7.0649999999999995
//问题1:pi值是3.14是真理,不能改. 解决:加final
//问题2:PI给多个面积对象所使用,实现共享。解决:加static
//问题3:r半径只作用域求圆面积,无需定义成成员变量。解决:定义成方法的参数
//问题4:Area类的对象无需加载变量,仍然占用空间。解决:getCircleArea()静态化
//Area area2 = new Area();
//area.setR(2.4);
System.out.println(Area.getCircleArea(2.4));//18.086399999999998
}
}
2162

被折叠的 条评论
为什么被折叠?



