1、static关键字
1.1static关键字的介绍
static是静态修饰符,可以用来修饰:
成员变量:静态变量,可以直接通过类名访问
成员方法:静态方法,可以直接通过类名访问
代码块:静态代码块,当Java虚拟机加载类时,就会执行该代码块(构造代码块:每次创建对象会调用。(优先于构造方法)。用于执行所有对象均需要的初始化动作。)
1.2成员变量和局部变量区别
成员变量:也被称为属性、实例(对象)变量
局部变量(Local Variable):定义在类中方法内(临时保存数据)
(1)定义位置的不同:
成员变量定义在类中方法;
外局部变量定义在类中方法内(方法体中定义、方法声明上的形参也是局部变量)。
(2)初始值不同:
成员变量是有默认值的(整数默认值:0,浮点数默认值:0.0,引用数据类型默认值:null...)
局部变量没有默认的,如果不赋值直接使用,会报错!
(3)作用域不同:
(使用范围)成员变量的作用域是在定义它的类中可以使用,类中的所有成员方法 都可以使用该变量;
局部变量的作用域是在定义它的方法中,其他方法无法使用另一个方法中定义的变 量。
(4)生命周期不同:
(诞生、消亡)成员变量是随着对象的创建而产生,随着对象的销毁(GC)而销毁。 局部变量是随着方法的压栈而诞生,随着方法的弹栈而销毁。
(5)在内存中的位置不同:
成员变量:在堆内存
局部变量:在栈内存。
1.3静态方法
(1)静态方法可以通过类名点方法名的方式(即:类名.方法名();)调用,而非静态方法通过类名点方法名的方式调用。
例如:
public void test01(){
//调用方法
Dog.sleep();
}
/**
* 行为 睡(狗类中的方法)
*/
public static void sleep() {
System.out.println("在睡觉");
}
(2)通过类的实例化对象名点方法名的方式(即:对象名.方法名();)调用非静态方法和静态方法。
例如:
public void test02(){
Dog dog = new Dog();
//调用非静态方法
dog.eat();
//调用静态方法
dog.sleep();
}
/**
* 行为 吃(狗类中的方法)
*/
public void eat() {
System.out.println("在吃狗粮");
}
/**
* 行为 睡(狗类中的方法)
*/
public static void sleep() {
System.out.println("在睡觉");
}
(3)静态方法可以调用静态方法而不可以调用非静态方法。
例如:
public class DogTest {
public static void main(String[] args) {
//静态方法调用非静态方法 会报错
//Dog.eat();
//静态方法调用静态方法
Dog.sleep();
}
/**
* 行为 吃(狗类中的方法)
*/
public void eat() {
System.out.println("在吃狗粮");
}
/**
* 行为 睡(狗类中的方法)
*/
public static void sleep() {
System.out.println("在睡觉");
}
(4)非静态方法可以调用静态方法,也可以调用非静态方法。
例如:
public void eat() {
System.out.println("在吃狗粮");
//调用静态方法
sleep();
//调用非静态方法
run();
}
/**
* 行为 跑
*/
public void run() {
System.out.println("在跑步");
}
/**
* 行为 睡
*/
public static void sleep() {
System.out.println("在睡觉");
}