static修饰成员变量——自动生成学号方式一
(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
}
}
static修饰成员变量——自动生成学号方式二
(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
}
}
========================================================================================================================================================
static修饰成员方法以及静态代码块
(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();//静态方法 静态方法
}
}
本文详细介绍了Java中static关键字的使用,包括static修饰成员变量的两种自动生成学号的方式,static修饰的成员方法和静态代码块的特性,以及在类内部如何直接调用静态方法。重点讨论了静态方法不能访问非静态成员的原因,并举例说明了静态代码块的执行时机和用途。
1044

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



