(1)定义一个私有成员变量来接收 自增静态成员变量
使用:所有构造方法中:this.私有成员变量 = ++静态成员变量
public class Student { private String name; private int age; private int id; //私有成员变量接收计数器 static int idCounter; //学号计数器 public Student() { this.id = ++idCounter; //空参构造 } public Student(String name, int age) { this.name = name; this.age = age; this.id = ++idCounter; //全参构造 } public void show() { System.out.println("姓名为:" + this.name + ",年龄为" + age + ",学号为" + id); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } } public class Demo { public static void main(String[] args) { Student stu1 = new Student("李大伟", 20); stu1.show();// 姓名为:李大伟,年龄为20,学号为1 Student stu2 = new Student(); stu2.setName("周小姐"); stu2.setAge(18); System.out.println("姓名为:" +stu2.getName()+ ",年龄为"+stu2.getAge()+",学号为"+ stu2.getId()); // 姓名为:周小姐,年龄为18,学号为2 } }(2)定义一个私有静态自增成员变量
使用:所有构造方法中:this.私有静态成员变量 = ++私有静态成员变量
public class Student01 { private String name; private int age; private static int id; public Student01() { this.id = ++id; } public Student01(String name, int age) { this.name = name; this.age = age; this.id = ++id; } public void show() { System.out.println("姓名为:" + this.name + ",年龄为" + age + ",学号为" + id); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public static int getId() { //被private和static共同修饰的成员变量get写法 return id; } public static void setId(int id) {//被private和static共同修饰的成员变量set写法 Student01.id = id; } } public class Demo { public static void main(String[] args) { Student01 student01 = new Student01("周卫国", 32); student01.show();//姓名为:周卫国,年龄为32,学号为1 Student01 student02 = new Student01("小皮球", 12); System.out.println("姓名为:" +student02.getName()+",年龄为"+student02.getAge()+",学号为"+ Student01.getId());//对象名调用类名调用都可以,推荐类名调用 //姓名为:小皮球,年龄为12,学号为2 } }========================================================================================================================================================
(1)静态方法: 静态不能访问非静态,非静态可以访问静态; 原因: 静态优先于main()和构造方法先执行,因此在内存中,先有静态内容,后有非静态内容;
(2)静态代码块: 当第一次使用本类时,静态代码块执行唯一一次;
public class TestClass { public TestClass() { System.out.println("构造方法"); //第二步 methodStatic(); //第三步 } public static void methodStatic() { System.out.println("静态方法"); } static { methodStatic(); //第一步 } }测试类:
public class Test { public static void main(String[] args) { TestClass testClass = new TestClass(); //输出结果如下: //静态方法 静态代码块中的先执行 //构造方法 构造方法执行 //静态方法 构造方法调用静态方法执行 }} (3)静态代码块用途: 用来对静态成员进行初始化,还可以有其他逻辑代码,比如调用静态方法;
public class Clsss { int num ;//成员变量 static int numStatic ;//静态变量 public void method() {//成员方法 System.out.println(num);//可以访问成员变量 System.out.println(numStatic);//可以访问静态变量 } public static void methodStatic() {//静态方法 // System.out.println(num);Non-static field 'num' cannot be referenced from a static context // System.out.println(this);this cannot be referenced from a static context System.out.println(numStatic);//可以访问静态变量 } static{//静态代码块给静态变量赋值,还可以有其他逻辑代码 // num=10;Non-static field 'num' cannot be referenced from a static context numStatic=20;//赋值 methodStatic();//调用静态方法 } }========================================================================================================================================================
结论:本类当中调用本类静态方法,可以省略类名称
证明一
public class Test { public static void main(String[] args) { methodTest(); //执行! Test.methodTest(); //执行! } public static void methodTest() { System.out.println("执行!"); } }证明二
public class TestClass { public static void methodStatic(){ System.out.println("静态方法"); } public void method(){ methodStatic(); //静态方法 TestClass.methodStatic();//静态方法 } }测试类:
public class Test { public static void main(String[] args) { TestClass testClass = new TestClass(); testClass.method();//静态方法 静态方法 } }