java静态方法与非静态方法和成员变量与局部变量

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("在睡觉");
}


版权声明:本文为m0_69246524原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。