哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!
这一节啊,咱们要学习的内容是Java的static关键字。
1. 我们是怎么使用static关键字的
我们其实一直在用static关键字,比如main方法:
public static void main(String[] args) { }
static关键字可以用来修饰方法,main方法也是方法。它还可以修饰成员变量。
回到之前Car的例子,我们新增一个价格属性,价格用double类型。
你有没有发现,用static修饰的变量,在IDEA中是斜体的。那么和其他变量有啥区别呢,我们来看一个例子你就明白了。
public class CarTest { public static void main(String[] args) { Car car1 = new Car(); car1.price = 200000; Car car2 = new Car(); car2.price = 300000; System.out.println("car1.price = " + car1.price); System.out.println("car2.price = " + car2.price); } }
此段代码中,定义了Car类,创建了两个实例car1和car2,并为car1和car2分别设置了price属性,然后输出了这两个实例的price属性值。
结果:
car1.price = 300000.0
car2.price = 300000.0
代码中其实给出了警告信息:
意思是你用实例对象去访问一个静态变量,编译器对你提出了警告。虽然不影响运行,但是结果和我们预想的有出入,price的值都是30w。
static关键字用于定义静态变量和静态方法,可以通过类名直接调用,不需要实例化对象。
因为static修饰的变量是类变量,类变量是属于整个类的,与类的实例对象无关,所以不需要实例化对象,可以直接通过类名调用。
对Car类来说,静态的price属性是所有实例对象共享的一块内存,所以不管是car1还是car2,访问的和操作的都是同一块内存。
我们访问静态变量,是可以直接用类名去访问的,比如:
System.out.println("car1.price = " + Car.price);
2.静态方法
static除了可以修饰成员变量,还可以修饰成员方法,典型的就是main方法。
需要注意的是,static修饰的方法只能访问其他静态静态成员变量和静态方法,不能访问普通成员变量和普通方法,也不能访问this关键字。
因为this关键字代表当前对象,而static修饰的方法是所有实例对象共有的,所以this没办法代表其中某一个实例。
#3. 总结
static关键字用于定义静态变量和静态方法,可以通过类名直接调用,不需要实例化对象。
例子1 - 静态方法访问静态成员变量:
public class Test { public static int count = 0; //定义静态变量 public static void main(String[] args) { count++; System.out.println("count值为:"+count); } }
例子2 - 静态方法访问其他静态方法:
public class Test { public static void printMessage() { //定义静态方法 System.out.println("Hello World!"); } public static void main(String[] args) { printMessage(); //通过类名调用 } }
当然,在静态方法中,你依然可以用new的方式创建实例对象,然后去调用其普通方法。
public static void test(){ Car car = new Car(); car.setBrand("五菱宏光"); System.out.println(car); }
3.代码块问题
代码块:代码块是指由花括号括起来的语句块,每当创建类的实例时,代码块都会被执行。
实际作用:可以用来给实例变量赋值,或者调用方法,用来初始化实例变量,提高代码的复用性。
举例:
public class Person { private String name; private int age; { System.out.println("这是代码块"); } public Person() { System.out.println("这是构造方法"); } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
静态代码块:静态代码块是指由static关键字和花括号括起来的语句块,只会在类加载的时候执行一次,一般用于初始化类的静态变量。
实际作用:可以用来给类变量赋值,或者调用方法,用来初始化类变量,提高代码的复用性。
举例:
public class Person { private static String name; private static int age; static{ System.out.println("这是静态代码块"); } public Person() { System.out.println("这是构造方法"); } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
4.课后作业
1.static关键字的作用是?(多选)
A、修饰类
B、修饰变量
C、修饰方法
D、修饰块
有任何不懂的地方,可以点击下方的“发消息”给我留言。
PS:从这一节开始,欢迎你使用任何你喜欢的IDE完成作业,比如eclipse,IDEA,如果不会使用工具,可以去B站搜索相关的视频进行学习哈。