前言

在Java语言中,static表示“静态”的意思,使用场景可以用来修饰成员变量和成员方法,当然也可以是静态代码块。static的主要作用在于创建独立于具体对象的域变量或者方法。本文主要来去讲解一下static的来龙去脉。

static要解决什么问题?

我们知道,当我们通过new关键字去创建对象的时候,那么数据的存储空间才会被分配,类中的成员方法才能被对象所使用。但是呢有两种特殊的情况:1、我们通过new关键字创建的对象共享同一个资源,而不是说每个对象都拥有自己的数据,或者说根本就不需要去创建对象,这个资源和对象之间是没有关系的。2、希望某个方法不与包含它的类的任何对象联系在一起。总结下来就是说:即使没有创建对象,也能使用属性和调用方法,static目的就是在于解决这个问题。

格式

修饰变量:static 数据类型 变量名

修饰方法:【访问权限修饰符】 static 方法返回值 方法名(参数列表)

特点

static可以修饰变量,方法

被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。

在类被加载的时候,就会去加载被static修饰的部分。

被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。

static静态变量

被static修饰的成员变量叫做静态变量,也叫做类变量,说明这个变量是属于这个类的,而不是属于是对象,没有被static修饰的成员变量叫做实例变量,说明这个变量是属于某个具体的对象的。

静态变量和实例变量的区别

实例变量:每次创建对象,都会为每个对象分配成员变量内存空间,实例变量是属于实例对象的,在内存中,创建几次对象,就有几份成员变量。

静态变量:静态变量由于不属于任何实例对象,是属于类的,所以在内存中只会有一份,在类的加载过程中,JVM为静态变量分配一次内存空间。

static静态方法

被static修饰的方法也叫做静态方法,因为对于静态方法来说是不属于任何实例对象的,那么就是说在静态方法内部是不能使用this的,因为既然不属于任何对象,那么就更谈不上this了。

static应用场景

如果某个成员变量是被所有对象所共享的,那么这个成员变量就应该定义为静态变量。

static如何去访问

静态变量:

类名.静态变量

对象.静态变量(不推荐的)

静态方法:

类名.静态方法

对象.静态方法(不推荐)

这里呢就啰嗦一句,由于被static修饰的变量和方法是不属于任何实例对象的,所以在这里,强烈建议不要通过对象的方式去访问静态的变量或者方法。

static使用注意事项

在静态方法中没有this关键字因为静态是随着类的加载而加载,而this是随着对象的创建而存在的。静态比对象优先存在。

静态可以访问静态的,但是静态不能访问非静态的。

非静态的可以去访问静态的。

总结

静态只能访问静态。

非静态既可以访问非静态的,也可以访问静态的。


原文:http://baijiahao.baidu.com/s?id=1601254463089390982&wfr=spider&for=pc



前言

针对Java语言中的final关键字,想必都不陌生了。本来主要是来对final做关键字做一个总结。

final关键字用法

修饰类当用final去修饰一个类的时候,表示这个类不能被继承。注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法。说明:在自己设计一个类的时候,要想好这个类将来是否会被继承,如果可以被继承,则该类不能使用fianl修饰,在这里呢,一般来说工具类我们往往都会设计成为一个fianl类。在JDK中,被设计为final类的有String、System等。代码:



2. 修饰方法

被final修饰的方法不能被重写。

注意:

a. 一个类的private方法会隐式的被指定为final方法。

b. 如果父类中有final修饰的方法,那么子类不能去重写。

代码:



3. 修饰成员变量

注意:

a. 必须要赋初始值,而且是只能初始化一次。

代码:



4. 修饰成员变量

注意:

a. 必须初始化值。

b. 被fianl修饰的成员变量赋值,有两种方式:1、直接赋值 2、全部在构造方法中赋初值。

c. 如果修饰的成员变量是基本类型,则表示这个变量的值不能改变。

d. 如果修饰的成员变量是一个引用类型,则是说这个引用的地址的值不能修改,但是这个引用所指向的对象里面的内容还是可以改变的。

代码:

原文:http://baijiahao.baidu.com/s?id=1601084106055683243&wfr=spider&for=pc


Java中final变量为什么在使用前必须要进行初始化

final关键字我们并不陌生,但是final修饰的属性变量为什么必须在定义的时候或者构造函数中被初始化呢?

static final修饰的变量又为什么必须在定义的时候进行初始化呢?

首先要明白一点:

final修饰的变量表示赋值之后不能再进行更改,系统赋默认值也算赋值,因此系统也不会赋默认值。

如果不在定义的时候或者构造函数中对final变量进行赋值的话,则生成的对象中final变量的值是未知的(编译器也会直接报错),因此必须进行初始化。

如果用static final同时修饰变量的话,则变量必须在定义的时候进行初始化。因为static变量属于类,在调用构造函数之前就已经被系统赋予默认值了

如果不在定义的时候初始化,那么既无法在构造函数中初始化,系统也不会赋默认值。则该变量被定义出来是毫无意义的。

原文:https://blog.csdn.net/xtsylc/article/details/78463211


Java之static静态关键字详解|final关键字详解的更多相关文章

  1. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  2. this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系

    this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...

  3. Java之static静态代码块

    Java之static静态代码块 构造代码块 使用{}包裹的代码区域,这里的代码区域特指位于class{}下面的而不是存在于其他type method(){}这类函数下面的代码区域 public cl ...

  4. Java中static静态关键字的使用

    我们可以基于一个类创建多个对象,每个对象都拥有自己的成员,所有成员变量的值是根据对象而存在的,有些时候我们希望一个类的所有对象共享一个成员,这就用到了static静态关键字 被静态关键字修饰的成员属于 ...

  5. Java连载53-单例模式初步、final关键字补充、回顾知识点

    一.回顾 1.类和对象的区别 2.UML(uniform makeup language) 3.方法区存储静态变量.常量(static final修饰) 4.堆内存中存储对象 5.栈存储变量 6.th ...

  6. 【Java学习笔记之二十】final关键字在Java继承中的用法小结

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法. ...

  7. 乐字节Java继承|方法重写、super和final关键字

    大家好,乐字节的小乐又来了,上一篇是:乐字节Java|JavaBean.继承与权限修饰,也是属于Java继承的,今天继续Java继承. 一. 方法的重写 父类不满足子类的要求,按需改写.注意 方法签名 ...

  8. 【Java基本功】一文读懂final关键字的用法

    本文主要介绍了final关键字的基本使用方法及原理 final关键字可以修饰类.方法和引用. 修饰类,该类不能被继承.并且这个类的对象在堆中分配内存后地址不可变. 修饰方法,方法不能被子类重写. 修饰 ...

  9. JAVA基础知识(四):final关键字

    final关键字可以用于成员变量.本地变量.方法以及类. 2. final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误. 3. 你不能够对final变量再次赋值. 4. 本地 ...

随机推荐

  1. Typec转HDMI+VGA+PD3.0+USB3.0扩展坞四合一芯片方案|CS5268替代AG9321

    CS5268是一种高度集成的单芯片,适用于多个细分市场和显示应用,如拓展坞.扩展底座等. 2.CS5268参数说明 总则 USB Type-C规范1.2 HDMI规范v2.0b兼容发射机,数据速率高达 ...

  2. .NET6 微服务——CI/CD(1):搭建Jenkins并实现自动构建

    CI/CD 它的意思是 持续集成/持续部署,这也不是新概念.那些八股文就不写了,说话的方式简单点:如果成功搭建CI/CD环境,当你需要迭代线上程序时,只需通过git提交代码就可以,其他什么都不用做.是 ...

  3. Solr集群安装Version5.5.2(cloud模式)

    Solr安装cloud模式,基于Solr的安装版本为5.5.2. 安装规划 Solr IP/机器名 安装软件 运行进程 zdh-7 solr jar zdh-9 solr jar zookeeper ...

  4. 【工控老马】OPC通讯协议解析-OPC七问

    1 通讯步骤 1.1 第一问 OPC Client和OPC Server之间通讯谁是主动的? 答:当然是OPC Client. 1.2 第二问 OPC Client第一次动作做了什么? 答:从大多数O ...

  5. HDU ACM 8.13 T2 的 O(m)做法

    前言 由于本人比较拉所以看起来很啰嗦,将就看就好. 题目大意 \(n\)种包,每个包里面有一大一小两个球,选小球的代价是\(1\),大球的代价是\(2\),可以都不选,若一次性买两个包,则可以优惠\( ...

  6. CSS基础-7 盒子模型大小

    在盒子模型当中,有些元素是影响盒子大小的. 首先border就会影响盒子的大小. 其次padding也会影响盒子的大小. 例子: .one { width:100px; height:100px; b ...

  7. Docker_镜像(image)使用(3)

    查找docker镜像 我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/ 我们也可以使用 docker search 命令 ...

  8. 【PowerShell】格式化输出字符串

    1 '{0:d4}' -f 10 2 '数字的补零';{} 3 '{0:f4}' -f 10 4 '保留小数位数';{} 5 '{0:p2}' -f 0.4567 6 '转换为百分比';{} 7 '{ ...

  9. PyCharm - 关联mysql失败 - Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.

    时区错误,MySQL默认的时区是UTC时区,比北京时间晚8个小时. 所以要修改mysql的时长 在mysql的命令模式下,输入: set global time_zone='+8:00'; 再次连接成 ...

  10. java.exe and -classpth or -cp

    mydirname=$(dirname $0) java -cp $classes_dir:$lib_dir/*:$config_dir -Doracle.net.wallet_location=${ ...