Java基础之static的用法

一、前言

在java中static可以用来修饰以下内容:

  • 成员变量

静态变量,可以直接通过类名去访问

  • 成员方法

静态方法,可以直接通过类名去访问

  • 代码块

静态代码块,当java虚拟机加载类时,就会执行该代码块

二、static修饰成员变量

  • 成员变量

静态变量,可以直接通过类名去访问

2.1 类的成员变量

类的成员变量包括

  • 类变量(静态变量)

被static修饰的变量
在内存中只有一个拷贝
类内部,可以在任何方法内直接访问静态变量
其它类中,可以直接通过类名访问

  • 实例变量

没有被static修饰的变量
没创建一个实例,就为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

package cn.zhz.Kind.dh;

public class Person04 {
    //属性 成员变量 全局变量 实例变量
    public int age;
    public String name;
    //静态变量  调用时用类名调用
    public static String email;
}
package cn.zhz.Case.dh;

import cn.zhz.Kind.dh.Person04;

public class Person04Test {
    public static void main(String[] args) {
        //调用类的普通成员变量 (属性) 创建对象(实例) 通过对象去调用-->实例变量
        Person04 person04 = new Person04();
        person04.age = 18;
        person04.name = "张三";
        //静态变量直接通过类名去调用
        Person04.email = "zhansan@gmail.com";
    }
}
  • static变量的作用:

可以被类的所有的实例共享,可以作为实例之间进行交流的共享数据
如果类的所有实例都包含一个相同的常量属性,可以把这个属性定义为静态常量属性,从而节省内存空间。

package cn.zhz.Case.dh;

public class StaticTest {
    static int num;
    public static void main(String [] args){
        num++;
        StaticTest staticTest = new StaticTest();
        staticTest.num++;
        StaticTest staticTest1 = new StaticTest();
        staticTest1.num++;
        StaticTest.num++;
        System.out.println(num);
    }
}

编写程序模拟实现选民投票过程,一群选民进行投票,每一个选民只允许进行一次投票,并且当投票总数达到100时,就停止投票

package cn.zhz.Kind.dh;

//模拟实现选民投票过程,一群选民进行投票,每一个选民只允许进行一次投票,并且当投票总数达到100时,就停止投票
public class Voter {
    //目前投票数 被所有的选民实例共享
    static int count;
    //投票的最大值
    static final int MAX_COUNT = 100;
    //选民名称
    private String name;

    public Voter() {

    }

    public Voter(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void vote() {
        if (count == MAX_COUNT) {
            System.out.println("投票总数达到100,无法继续投票");
        } else {
            count++;
            System.out.println(this.name + "投票成功当前票数为" + count);
        }
    }
}
package cn.zhz.Case.dh;

import cn.zhz.Kind.dh.Voter;

public class VoterTest {
    public static void main(String[] args) {
        Voter voter1 = new Voter("张三");
        voter1.vote();
        Voter voter2 = new Voter("李四");
        voter2.vote();
        Voter voter3 = new Voter("王五");
        voter3.vote();
        Voter voter4 = new Voter("赵六");
        voter4.vote();
        for (int i = 1;i <= 97;i++){
            Voter v = new Voter("v"+ i);
            v.vote();
        }
        Voter voter = new Voter("小尾巴");
        voter.vote();
    }
}

三、static修饰方法

  • 成员方法

静态方法,可以直接通过类名去访问
静态方法中不可以使用this和super
不可以直接访问所属类的实例变量和实例方法
可以直接访问类的静态变量和静态方法

  • 实例方法:通过实例进行访问

可以直接访问所属类的静态变量、静态方法、实例变量和实例方法

注意:静态方法必须被实现

package cn.zhz.Kind.dh;

public class Person04 {
    //属性 成员变量 全局变量 实例变量
    public int age;
    public String name;
    //静态变量  调用时用类名调用
    public static String email;

    public void m2() {
        System.out.println("实例方法m2");
    }

    //成员方法:实例方法->可以调用实例变量 实例方法 静态变量 静态方法
    public void m1() {
        System.out.println(this.age);
        System.out.println(email);
        m2();
        m3();
    }

    //静态方法
    public static void m3() {
        //在静态方法中不可以使用this
//        System.out.println(this.age);
//        m1();//在静态方法中不可以调用实例方法
        //在静态方法中不可以调用实例变量
//        System.out.println(age);
        System.out.println("静态方法m3");
        //在静态方法中可以直接访问静态变量
        System.out.println(email);
        m4();
    }

    public static void m4() {
        System.out.println("这是一个静态方法");
    }
}
package cn.zhz.Case.dh;

import cn.zhz.Kind.dh.Person04;

import java.util.Arrays;

public class Person04Test {
    public static void main(String[] args) {
        //调用类的普通成员变量 (属性) 创建对象(实例) 通过对象去调用-->实例变量
        Person04 person04 = new Person04();
        person04.age = 18;
        person04.name = "张三";
        //静态变量直接通过类名去调用
        Person04.email = "zhansan@gmail.com";
        //通过实例调用实例方法
        person04.m1();
        //可以通过类名调用静态方法
        Person04.m3();
//        Math.random();
//        Arrays.sort();
//        Arrays.binarySearch();
    }
}

其实java程序的入口main()方法就是最常用的静态方法

public static void main(String [] args){

}

四、static修饰代码块

静态代码块,当java虚拟机加载类时,就会执行该代码块

当程序中有多个静态代码块时,程序会依次向下执行,按照顺序加载,并且每一个静态方法块只可以执行一次

package cn.zhz.Kind.dh;

public class Static01 {
    static int num = 100;

    static {
        num += 100;
        System.out.println(num);
    }

    static {
        num += 100;
        System.out.println(num);
    }

    public static void main(String[] args) {
        Static01 static01 = new Static01();
        Static01 static02 = new Static01();
        System.out.println(Static01.num);
    }
}

到此这篇关于Java基础之static的用法的文章就介绍到这了,更多相关Java static的用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java多线程关键字final和static详解

    这篇文章主要介绍了java多线程关键字final和static详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 final关键字 1.final关键字在单线程中的特点: 1)final修饰的静态成员:必须在进行显示初始化或静态代码块赋值,并且仅能赋值一次. 2)final修饰的类成员变量,可以在三个地方进行赋值:显示初始化.构造代码块和构造方法,并且仅能赋值一次. 3)final修饰的局部变量,必须在使用之前进行显示初始化(并不一定要在定义是

  • 浅析对Java关键字final和static的理解

    一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final类不能被继承,没有子类,final类中的方法默认是final的. final方法不能被子类的方法覆盖,但可以被继承. final成员变量表示常量,只能被赋值一次,赋值后值不再改变. final不能用于修饰构造方法. 注意:父类的private成员方法是不能被子类方法覆

  • 浅谈Java中static关键字的作用

    static关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static主要有4中使用情况:成员变量.成员方法.代码块和内部类 (1)static成员变量: Java类提供了两种类型的变量:用static关键字修饰的静态变量和不用static关键字修饰的实例变量.静态变量属于类,在内存中只有一个复制,只要静态变量所在的类被加载,这个静态变量就会被分配空间,因此就可以被使

  • Java static关键字详细介绍与用法总结

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念.下面整理内容大家可以参考下. 1.     静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法    声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它们只能访问static数据. 它们不能以任何方式引用this 或super. class Simp

  • 详解java中的static关键字

    Java中的static关键字可以用于修饰变量.方法.代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字不同的作用,且在开发中使用广泛,这里做一下深入了解. 静态资源(静态变量与静态方法) 被static关键字修饰的变量和方法统一属于类的静态资源,是类实例之间共享的.被static关键字修饰的变量.方法属于类变量.类方法,可以通过[类名.变量名].[类名.方法名]直接引用,而不需要派生一个类实例出来. 静态资源分类存放的好处 JDK把不同的静态资源放在了不同的

  • Java8的default和static关键字的使用讲解

    1. default和static关键字 a.default 用在接口中, 为该接口的实现类的方法.  --> 不能通过接口直接调用. static 也是用在接口中, 同Class中的static方法一样, 是类级别的方法, 而不是对象的方法.  --> 可以通过接口直接调用. b.一个接口可以有多个default方法, 也可以有多个static方法. 2. default 在使用中的注意事项 如下面的例子 有两个接口, InterA和InterB, 都有一个方法, 为defaultFunct

  • Java中的static关键字深入理解

    在学习Java以来很长一段时间,我都不能理解为什么修饰一个方法的关键字各不相同,为什么有的方法可以直接调用,而有的方法需要用对象才能调用.毫不夸张的说,最近一次让我决定去整理清楚static关键字,是因为在写jdbc工具类时,其中通过静态代码块来实现加载驱动才让我对它有了新的认识. 通俗来讲,归为几点: 由static关键字修饰的方法或成员变量,不需依赖对象,就可直接访问.(通过 类名.方法名() 或 类名.属性 直接调用) static关键字不会影响到变量或方法的作用域 static关键字不允

  • JAVA Static关键字的用法

    static关键字的作用: 用来修饰成员变量和方法,被修饰的成员是属于类的,而不单单是属于某个对象的,也就是说,可以不靠对象来调用. 首先我们来介绍类变量 当static修饰成员变量时,该变量称为类变量,该类的每个对象都共享同一个类变量的值,任何 对象都可以更改该变量的值,但也可以在不创建该类对象的情况下,通过类名对类变量进行操作 命名格式 static 数据类型 变量名: static int age; 下面我们来举个例子,让大家体会体会类变量的作用 就比如梁山有108位好汉我们给这108位好

  • java中static关键字用法详解

    前言 static对我们来说并不陌生,也是面试经常碰到的问题,今天抽空整理了一篇总结作为笔记保存起来! static用法可以分为三大块:静态变量.静态方法.静态代码块,下面将从这三个方面分析 静态方法 通常在一个类中定义一个方法为static,即为静态方法,无需本类的对象即可调用此方法 声明为static的方法有要注意以下几点: · 它们仅能调用其他的static方法. · 它们只能访问static变量. · 它们不能以任何方式引用this或super. public class MainCla

  • java关键字static的使用详解

    关键字 static 1. 概述 static 是一种修饰符 static 是Java中表静态的关键字 它可以修饰成员变量.成员方法.代码块 被static修饰的成员变量或成员方法,将不再依赖于对象的创建而去使用,而是依赖类的存在,成为类成员或类方法,是共享的(下面将会详细的解释). 2. static修饰成员变量 2.1 常见的修饰符 public 修饰符 private 修饰符 没有修饰符 static 修饰符(静态修饰符) class Test { // public 修饰符 public

  • 学习Java的static与final关键字

    static:(静态修饰符)面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的成员变量一般称作类成员变量,而static修饰的方法一般称作类方法. 分类: 1.static变量,也叫作静态变量或者类变量.另一种是没有被static修饰的变量,叫实例变量. 2.static方法,也叫作静态方法或者类方法,静态方法中不能定义静态变量,实例方法也不能. 3.static代码块,静态块中,可以访问静态变量,调用静态方法. 注意事项: 1.static不依附于任何对

  • Java 关键字static详解及实例代码

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概念,在Java中static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,当然也可以修饰代码块. Java把内存分为栈内存和堆内存,其中栈内存用来存放一些基本类型的变量.数组和对象的引用,堆内存主要存放一些对象.在JVM加载一个类的时候,若该类存在static修饰的成员变量和成员方法,则会为这些成员变量和成员方法在固

  • Java静态static关键字原理详解

    这篇文章主要介绍了Java静态static关键字原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 static关键字既可以修饰成员变量,也可以修改成员方法,修饰的成员变量和成员方法可以直接通过类名调用,也可以通过对象调用(其实即使是通过对象调用,也会被翻译成类名调用),建议通过类名调用. 成员方法用static修饰后,就成为了静态方法,静态方法不属于对象,而是属于类. 注意事项: 1.静态方法中不能使用this,因为this指的是当前对象

随机推荐