这次我们来学习静态(static)
知识点
1.静态方法只能调用静态变量
2.静态变量属于整个Class,会随着发生变化。
案例:定义一个自动增长的学生类。
题目要求:
定义一个学生类,除了姓名、性别、学历层次。
还有自动增长的学号,本科以A开头,专科以B开头。 编号从100开始,如A0103。
方法思路:
1.定义学生属性,姓名name 性别sex 学历层次level 学号 studentNo
2. 学号增长函数(解决自动增长问题)
3.测试
程序代码:
Student(学生类)
1 public class Student { 2 public static final byte MALE = 0; 3 public static final byte FEMALE = 1; 4 public static final byte UNDERGRATUATION = 1; 5 public static final byte SPECIAL = 0; 6 7 private static int noA ;//本科计数器 8 private static int noB ;//专科计数器 9 10 private String name; 11 private byte sex; 12 private byte level; 13 private String sno; 14 // 静态代码块,实现自动增长。 15 static { 16 noA = 0; 17 noB = 0; 18 } 19 20 /** 21 * 构造函数,构造学生信息。 并且自动生成学号 22 * @param name 姓名 23 * @param sex 性别 24 * @param level 学历 25 */ 26 public Student(String name, byte sex, byte level) { 27 this.name = name; 28 this.sex = sex; 29 this.level = level; 30 31 //自动生成学号 32 if (UNDERGRATUATION == level){ 33 this.sno = String.format("A%04d",++noA); // String,format 格式化输出 34 }else { 35 this.sno = String.format("B%04d",++noB); 36 } 37 } 38 39 /** 40 * 输出函数,输出学生的所有信息。 41 */ 42 public void print(){ 43 System.out.println("学号:"+sno); 44 System.out.println("姓名:"+name); 45 System.out.println("性别:"+(sex==MALE?"男":"女")); 46 System.out.println("学历:"+(level==UNDERGRATUATION?"本科":"专科")); 47 System.out.println(); 48 } 49 50 public String getName() { 51 return name; 52 } 53 54 public void setName(String name) { 55 this.name = name; 56 } 57 58 public String getSex() { 59 return sex == MALE?"男":"女"; 60 } 61 62 public void setSex(byte sex) { 63 this.sex = sex; 64 } 65 66 public byte getLevel() { 67 return level; 68 } 69 70 public void setLevel(byte level) { 71 this.level = level; 72 } 73 74 public String getStuNo() { 75 return sno; 76 } 77 78 public void setStuNo(String stuNo) { 79 this.sno = stuNo; 80 } 81 82 /** 83 * 计算某种学历的总人数 84 * @param level 学历(本科 专科) 85 * @return 某种学历的注册总人数 86 */ 87 public static int getCount(byte level){ 88 return UNDERGRATUATION==level?noA:noB; 89 } 90 }
Test(测试)类
1 public class Test { 2 public static void main(String[] args) { 3 Student stu1 = new Student("小明",Student.MALE,Student.UNDERGRATUATION); // 小明 男 本科 4 Student stu2 = new Student("小红",Student.FEMALE,Student.SPECIAL); // 小红 女 专科 5 Student stu3 = new Student("小张",Student.MALE,Student.SPECIAL); 6 Student stu4 = new Student("小王",Student.MALE,Student.SPECIAL); 7 8 stu1.print(); 9 stu2.print(); 10 stu3.print(); 11 stu4.print(); 12 13 int n1 = Student.getCount(Student.UNDERGRATUATION); 14 int n2 = Student.getCount(Student.SPECIAL); 15 System.out.printf("已经注册了%d个本科生,%d专科生",n1,n2); 16 System.out.println(); 17 } 18 }
运行结果:
心得体会:
这是4个类型的使用权限。
静态 static 是属于整个class的,会随着函数的运算发生改变,而局部变量调用函数,在函数内发生了变化,然而本身并没有变化。
这个有点像 String 和 StringBuffer 。 stringBuffer也是全局改变的。
举例:
主函数中代码如下所示
int num = 5; add(5); System.out.println(num);
add函数
public static void add (int num){ ++num; System.out.println(num); }
运行结果: