作者:孙玉昌,昵称【逐个哥】,另外【壹壹哥】也是我哦

千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、优质作者

配套开源项目资料

Github地址 逐个哥/从零开始学Java

Gitee地址: 逐个哥/从零开始学Java

前语

在前一篇文章中,壹哥给咱们讲解了abstract关键字,然后让咱们把握了笼统类与笼统办法的特性。除此之外,面向目标的核心润饰符还有static和final。今天这篇文章,壹哥会持续带领咱们学习static关键字的特性,请各位打起精神来吧。static关键字是Java开发中很常用也很重要的一个关键字,咱们必须要搞清楚哦。

——————————前戏已做完,精彩即开始—————————-

全文大约【3300】 字,不说废话,只讲能够让你学到技术、了解原理的纯干货!本文带有丰厚的事例及配图视频,能够让你更好地了解和运用文中的技术概念,并能够给你带来具有满足启迪的思考……

一. static关键字

1. 简介

在Java中,static表明 “静态的” ,它也是一种润饰符,能够润饰特点、办法、代码块和内部类

2. 特性

static润饰符具有如下特性:

  • 被static润饰的特点(成员变量)称为静态变量,也叫做类变量;
  • 被static润饰的常量称为静态常量;
  • 被static润饰的办法称为静态办法,也叫做类办法;
  • 被static润饰的代码块叫做静态代码块;
  • 被static润饰符的内部类,叫做静态内部类。

其中,静态变量、静态办法、静态常量统称为类的静态成员,归整个类一切,不归于某个单一的目标。也就是说,静态成员不归于某个目标单独具有,而是被类的一切实例目标同享。举个例子,咱们在教室里放了一台饮水机,这台饮水机是本教室一切成员同享的,不归于张三,也不归于李四,这台饮水机就是”静态成员“。而每个人还能够有自己单独的一个水杯,张三、李四都有自己独有的水杯,水杯不是同享的。另外,默认情况下,这些水杯是不能混用的,张三和李四互相的水杯是互相阻隔的。也就是说,自己的隐私不可被侵略和窥视。

所以,静态成员不需求经过目标来进行拜访,而是直接经过类来拜访。只需这个类被加载,Java虚拟机就能够依据类名找到它们。咱们调用静态成员的语法格局如下:

类名.静态成员

3. 留意事项

依据以上特性,咱们需求留意以下几点:

  • static关键词润饰的成员变量和办法都归于类,不归于某个目标;
  • 一般变量和办法归于某个目标,每个目标都有自己的变量和办法,互相之间是阻隔的;
  • 静态办法不能调用非静态的变量和非静态的办法,否则编译时就会报错。

4. 配套视频

与本节内容配套的视频链接如下:

player.bilibili.com/player.html…

二. 静态特点与静态常量

1. 概念

在Java类中,由static润饰的特点(成员变量)叫做静态变量,也叫类变量。而被static润饰的常量就叫做静态常量, 静态变量和静态常量统称为静态成员。留意,局部变量不能被声明为静态变量。

关于静态变量和静态常量来说, 不管一个类实例化出来多少个目标,它的静态成员都只有一份复制,能够被一切的目标同享

对实例变量来说,每个实例目标都有自己独立的变量,各个实例目标中的同名变量互不影响。可是关于静态变量来说,不管修正哪个实例目标的静态变量,作用其实都是相同的。也就是说,一切实例目标的静态变量都会被修正,原因在于静态变量并不归于某个单独的实例目标一切。

所以当咱们需求在多个目标之间进行信息同享的时分,就能够考虑运用静态变量或静态常量,增加实例之间的交互性。而假如类的一切实例目标都包括一个相同的常量特点,咱们就能够把这个特点界说为静态常量,以此节约内存空间。

能够说,实例成员在每个实例目标中都有自己的一个独立的私有“空间”,可是静态成员只有一个同享的公共“空间”,一切实例目标都会同享该静态成员。

2. 语法

关于静态变量或静态常量,咱们能够经过如下格局调用:

类名.变量名

类名.常量名

3. 静态变量与实例变量的差异

咱们现在现已知道什么是静态变量,什么是实例变量(成员变量)了,那么两者的差异有哪些呢?壹哥给咱们总结一下。

3.1 静态变量

  • JVM虚拟机只会为静态变量分配一次内存,在加载类的过程中完成对静态变量的内存分配;
  • 咱们能够在类的恣意办法中直接拜访恣意静态变量;
  • 咱们能够在其他类中经过”类名.静态变量”的办法,来拜访该类中的静态变量。

3.2 实例变量

  • 每创建一个Java实例目标,JVM虚拟机就会为该实例变量分配一次内存;
  • 咱们能够在类的非静态办法中直接拜访实例变量;
  • 在类的静态办法中,需求经过”目标.实例变量”的办法进行拜访。

4. 事例

4.1 界说静态特点和常量

咱们来界说一个Student类,在该类中界说如下几个成员变量、静态变量和静态常量。

/**
 * @author 逐个哥Sun
 * 千锋教育
 */
public class Student {
	//成员变量
	public String name;
	//静态变量
	public static String className;
	//静态变量
	public static int age;
	//静态常量
	public static final String SCHOOL_NAME="湘北中学";
	//静态办法
	public static void setAge(int age) {
            //静态办法中不能运用this和super!
            //this.age=age;
            //能够经过“类名.静态成员”的办法来调用
            Student.age=age;
            //在本类中,咱们也能够直接在static办法中直接拜访原本中的静态成员
            System.out.println("age="+age+",className="+className);
	}
}

4.2 界说测验类

接下来咱们再来界说一个测验类,看看如何在代码中调用这些成员变量、静态变量等。关于静态变量和静态常量,咱们要经过 ”类名.静态成员“ 的办法进行调用,可是不主张经过“目标.静态变量”的办法来调用静态变量,尽管这样调用也不会报错!假如这样调用,会提示”静态特点应该经过静态办法来拜访,The static field Student.className should be accessed in a static way”。

/**
 * @author 逐个哥Sun
 * 千锋教育
 */
public class StaticTest {
	public static void main(String[] args) {
            Student stu01=new Student();
            //调用成员变量
            stu01.name="流川枫";
            System.out.println("学生称号="+stu01.name);
            Student stu02=new Student();
            //调用成员变量
            stu02.name="樱木花道";
            System.out.println("学生称号="+stu02.name);
            //调用静态变量
            Student.className="高一.10班";
            System.out.println("班级称号="+Student.className);
            System.out.println("学校称号="+Student.SCHOOL_NAME);		
            //不主张经过“目标.静态变量”的办法来调用静态变量!静态特点应该经过静态办法来拜访!
            //The static field Student.className should be accessed in a static way
            //System.out.println("学生地点班级="+stu02.className);
	}
}

从上述事例中,咱们能够总结出如下规则:

  • 关于成员变量,要经过 “目标.变量名” 的办法调用;
  • 成员变量归于某个目标 ,归于目标自己的 “私有财产” ,不能被整个类同享,目标之间不能同享这些成员变量;
  • 静态变量和静态常量归于整个类 ,能够被类的一切目标同享,归于 “公共财产”
  • 在同一个类中,咱们能够在静态办法中 直接调用静态成员 ,也能够经过 “类名.静态成员” ,或 “目标.静态成员” 的办法进行调用;
  • 尽管语法支持经过“目标.静态变量”或“目标.静态常量”的办法进行调用,但不主张这样做;
  • 关于静态成员,一般都是要经过 “类名.静态成员” 的办法调用,否则在编译时会有“静态特点应该经过静态办法来拜访”的提示;

5. 配套视频

与本节内容配套的视频链接如下:

player.bilibili.com/player.html…

三. 静态办法

1. 概念

被static润饰的办法叫做静态办法,也叫做类办法。 咱们经常在工具类中界说静态办法,比如常用的工具办法Arrays.sort()、Math.random()等。静态办法具有以下特性:

  • 静态办法中只能调用静态成员和静态办法;
  • 静态办法中不能运用this和super关键字;
  • 笼统办法不能运用static进行润饰;
  • 静态办法不能被重写,但能够被继承!

2. 语法

关于静态办法,咱们能够经过如下格局调用:

类名.办法名

3. 静态办法与实例办法的差异

接下来壹哥再给咱们总结一下静态办法与实例办法的差异。

  • 静态办法能够直接经过“类名.办法名”的办法调用;
  • 静态办法中不能运用this和super关键字;
  • 静态办法中不能拜访非静态的成员;
  • 实例办法中能够直接拜访所属类的静态变量、静态办法、实例变量和实例办法。

4. 事例

4.1 界说静态办法

咱们在静态办法中,只能调用静态的成员和静态的办法,不能调用非静态的!

/**
 * @author 逐个哥Sun
 * 千锋教育
 */
public class Student {
	//静态变量
	public static int age;
	//静态办法---静态办法中只能调用静态成员和静态办法,不能调用非静态的!
	public static void setAge(int age) {
            //静态办法中不能运用this和super!
            //this.age=age;
            //能够经过“类名.静态成员”的办法来调用
            Student.age=age;
            System.out.println("age="+age);
	}
}

4.2 调用静态办法

关于静态办法的调用,需求运用“类名.静态办法名”的格局。

/**
 * @author 逐个哥Sun
 * 千锋教育
 */
public class StaticTest {
	public static void main(String[] args) {
        //调用静态办法---类名.静态办法名
        Student.setAge(100);
	}
}

5. 配套视频

与本节内容配套的视频链接如下:

player.bilibili.com/player.html…

——————————正片已结束,来根过后烟—————————-

四. 结语

至此,壹哥就把static静态变量、静态常量、静态代码块、静态类、静态导入等相关的内容给咱们介绍结束了,这是咱们开发时很常用的内容,所以壹哥希望各位初学者,要把static相关的内容牢牢把握。最后简略总结一下本文关键:

  • 静态变量、静态办法、静态常量统称为类的静态成员;
  • 静态成员归整个类一切,不归于某个单一的目标,是 中的“公共财产”;
  • 要弄清楚静态变量和实例变量的差异;
  • 静态办法中不能运用this和super关键字;
  • 静态办法中不能拜访非静态的成员。

另外假如你单独学习觉得有许多困难,能够加入壹哥的学习互助群,咱们一同交流学习。

五. 今天作业

1. 第一题

class MyClass{
    static int a;
    int b;
}
public class TestMain{
    public static void main(Stringargs[]){
        MyClass mc1=new MyClass();
        mc1.a=100;
        mc1.b=200;
        MyClass mc2=new MyClass();
        mc2.a=300;
        mc2.b=400;
        System.out.println(mc1.a);
        System.out.println(mc1.b);
        System.out.println(mc2.a);
        System.out.println(mc2.b);
    }
}

分析上述代码的执行结果,请在评论区给出你的答案。

本文正在参加「金石方案」