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的基本使用。

 

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


目录
相关文章
|
28天前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
50 9
|
28天前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
51 8
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
46 4
|
1月前
|
存储 Java
Java 中的静态(static)
【10月更文挑战第15天】静态是 Java 语言中一个非常重要的特性,它为我们提供了一种方便、高效的方式来管理和共享资源。然而,在使用过程中,我们需要谨慎考虑其优缺点,以确保代码的质量和可维护性。
|
2月前
|
Java 程序员
在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。
【10月更文挑战第13天】在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。本文介绍了Java关键字的基本概念及其重要性,并通过定义类和对象、控制流程、访问修饰符等示例,展示了关键字的实际应用。掌握这些关键字,是成为优秀Java程序员的基础。
28 3
|
2月前
|
算法 Java
在Java编程中,关键字和保留字是基础且重要的组成部分,正确理解和使用它们
【10月更文挑战第13天】在Java编程中,关键字和保留字是基础且重要的组成部分。正确理解和使用它们,如class、int、for、while等,不仅能够避免语法错误,还能提升代码的可读性和执行效率。本指南将通过解答常见问题,帮助你掌握Java关键字的正确使用方法,以及如何避免误用保留字,使你的代码更加高效流畅。
36 3
|
2月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
38 3
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
28 5
|
2月前
|
Java 开发者
在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选
【10月更文挑战第6天】在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选。相比 `synchronized`,Lock 提供了更灵活强大的线程同步机制,包括可中断等待、超时等待、重入锁及读写锁等高级特性,极大提升了多线程应用的性能和可靠性。通过示例对比,可以看出 Lock 接口通过 `lock()` 和 `unlock()` 明确管理锁的获取和释放,避免死锁风险,并支持公平锁选择和条件变量,使其在高并发场景下更具优势。掌握 Lock 接口将助力开发者构建更高效、可靠的多线程应用。
27 2