Java(十六)static关键字

简介: Java(十六)static关键字

static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。


总结一句话就是:


方便在没有创建对象的情况下来进行调用(方法/变量)。

 

Static关键字特点:


1.被static所修饰的成员是随着字节码文件对象的加载而加载,所以是优先于对象存在于内存中(也就是说,类被加载了,就可以调用类中的静态方法)


2.被static所修饰的成员被该类下所有的对象所共享


3.被static所修饰的成员可以通过类名.直接调用

 

Static关键字注意事项:


1:静态方法中不能有this关键字


2:静态方法中可以调用静态成员变量和静态成员方法,但是不可以调用非静态的成员变量和调用方法。

非静态方法中可以调用静态的成员变量和成员方法,也可以调用非静态的成员变量和成员方法。


3:静态方法和非静态方法是不可以重名的。


4:静态成员变量也是可以通过this来调用的,但是会报警告:The static field person.age should be accessed in a static way

 

下面我们在代码中测试一下:


首先我们定义一个person类:


class person{
    static int age;
    static int weight;
    static int height;
    static String name;
    /**
     * 构造方法
     */
    public person(int a,int w,int h,String n)
    {
        // 静态成员变量也是可以通过this来调用的,但是会报警告:The static field person.age should be accessed in a static way
        this.age = a;
        // 正常调用
        weight = w;
        height = h;
        name = n;
    }
    /**
     * 自我介绍
     */
    public void introduce()
    {
        System.out.println("我是非静态方法");
        System.out.println("我叫:"+name);
        System.out.println("我的身高:" + height);
        System.out.println("我的体重:" + weight);
        System.out.println("我的年龄:" + age);
    }
    /**
     * 自我介绍
     */
    public static void introduceStatic()
    {
        System.out.println("我是静态方法");
        System.out.println("我叫:" + name);
        System.out.println("我的身高:" + height);
        System.out.println("我的体重:" + weight);
        System.out.println("我的年龄:" + age);
    }
}


类中有四个静态的成员变量,age,name,hight,weight。


有构造方法,有一个非静态方法introduce,静态方法introduceStatic。


下面我们先来调用静态成员变量及静态方法

public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
    }


输出:

我是静态方法

我叫:null

我的身高:0

我的体重:0

我的年龄:0

 

因为我们没有给person类的静态成员变量赋值,因此我们的静态方法输出的都是0


接下来,我们给静态变量赋值,再次调用静态方法

public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
        // 2:给person类静态成员变量赋值,再调用静态方法
        person.age = 18;
        person.weight = 100;
        person.height = 180;
        person.name = "玛丽亚";
        person.introduceS();
    }

输出:

我是静态方法

我叫:玛丽亚

我的身高:180

我的体重:100

我的年龄:18

 

下面我们再实例化一下person类,调用一下非静态方法:


public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
        // 2:给person类静态成员变量赋值,再调用静态方法
        person.age = 18;
        person.weight = 100;
        person.height = 180;
        person.name = "玛丽亚";
        person.introduceS();
        // 3:调用非静态方法
        person per = new person(28, 108, 168, "格洛瑞亚");
        per.introduce();
    }

输出:

我叫:格洛瑞亚

我的身高:168

我的体重:108

我的年龄:28

 

最后,我们玩点不一样的,我们在实例化person类之后,再次给类的静态成员变量赋值,看我们再调用非静态方法的时候是什么结果:


public static void main(String[] args) {
        // 1:直接调用静态方法
        person.introduceS();
        // 2:给person类静态成员变量赋值,再调用静态方法
        person.age = 18;
        person.weight = 100;
        person.height = 180;
        person.name = "玛丽亚";
        person.introduceS();
        // 3:调用非静态方法
        person per = new person(28, 108, 168, "格洛瑞亚");
        person.age = 20;
        person.weight = 120;
        person.height = 188;
        person.name = "福特儿";
        per.introduce();
    }

输出:

我是非静态方法

我叫:福特儿

我的身高:188

我的体重:120

我的年龄:20

 

输出的结果是我们赋值之后的值。

 

以上大概就是java中static的基本使用。

 

有好的建议,请在下方输入你的评论。


目录
相关文章
|
16天前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
28天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
25 3
|
1月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
21 5
|
1月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
174 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
2月前
|
存储 Java
Java之静态(static)与实例(instance)
Java之静态(static)与实例(instance)
|
3月前
|
Java
【Java基础面试四十一】、说一说你对static关键字的理解
这篇文章主要介绍了Java中static关键字的概念和使用规则,强调了类成员与实例成员的区别及其作用域的限制。
|
3月前
|
存储 Java 对象存储
【Java基础面试四十三】、 static和final有什么区别?
由于网络原因,我无法获取到您提供的链接内容。如果需要我解析该网页,请确保链接有效并重试,或者提供其他问题,我会尽力帮助您。
|
3月前
|
Java
【Java基础面试四十二】、 static修饰的类能不能被继承?
这篇文章讨论了Java中static关键字修饰的类是否可以被继承,解释了静态内部类的概念、规则以及如何实例化。
|
3月前
|
Java
【Java】static 类方法中注意事项
【Java】static 类方法中注意事项
|
3月前
|
Java
【Java】static 修饰成员方法
【Java】static 修饰成员方法