java中static关键字的作用_java中static关键字的作用

java中static关键字的作用_java中static关键字的作用java中static关键字主要有两种作用:第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。第二,实现某个方法或属性与类而不是对象关联在一起简单来说,在Java语言中,static主要有5中使用情况:成员变量、成员方法、代码块,内部类和静态导包。基本用法:static修饰成员变量:该成员变量属于类变量,可以通过ClassName.attributeName直接引用,而不…

大家好,又见面了,我是你们的朋友全栈君。

java中static关键字主要有两种作用:

第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。

第二,实现某个方法或属性与类而不是对象关联在一起

简单来说,在Java语言中,static主要有5中使用情况:成员变量、成员方法、代码块,内部类和静态导包。

基本用法:

static修饰成员变量:该成员变量属于类变量,可以通过 ClassName.attributeName 直接引用,而不需要new出类的实例。

static修饰成员方法:该方法属于类的方法,可以通过 ClassName.methodName 直接引用,而不需要new出类的实例。

static修饰代码块:仅在类初始化的时候执行一次,且加载顺序是严格按照类中静态资源的定义顺序来加载的;静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问。;父类代码块->子类代码块。

static修饰内部类:static不能修饰普通类,只能修饰内部类,被static修饰的内部类的创建方式: new OuterClass.InnerClass()。

static导入包:语法“import static java.lang.Math.*”,这样在类中就可以直接使用Math类中的静态方法而不需要写类名,个人认为,在频繁使用某个类的时候比较方便,但是降低了可读性。并且不建议导入*

下面分别举例说明static的各种用法

static修饰成员变量和成员方法

几个结论:

/***

* Created by ascend on 2017/6/9 13:51.*/

public classTest {public static void main(String[] args) throwsClassNotFoundException {

Class.forName(“net.liebao.test.A”);

}

}classA {static{

System.out.println(“A.static initializer”);

}publicA() {

System.out.println(“A.A”);

}

}

输出:

A.static initializer

结论一:静态资源属于类,但是独立于类,静态资源在类初始化的时候被加载(早于new),比如通过:Class.forName(“xxx”)可以加载一个类的静态资源,但是没有new。

cc106a72cc6dd016f80c9e0b5b52f0d0.png

结论二:静态资源(静态成员变量,静态成员方法,下同)不能访问非静态资源,非静态资源是new时候才会产生,所以不能访问,反之,非静态资源则可以访问静态资源。

c589e828435744d21fc6800948cfe232.png

结论三:静态资源可以访问静态资源,但是需要注意的是,静态资源可以为定义在它之后的静态资源赋值,但是不能访问定义在它之后的静态资源

另外一个常见的用途是static实现单例模式

我们都知道,单例模式的特点是该类只能有一个实例,为了实现这一功能,必须隐藏类的构造函数,即把构造函数声明为private,并提供一个创建对象的方法,由于构造对象被声明为private,外界无法直接创建这个类型的对象,只能通过该类提供的方法来获取类的对象,要达到这样的目的只能把创建对象的方法声明为static,程序实例如下:

classSingleton {private static Singleton instance = newSingleton();//私有化构造函数

privateSingleton(){}public staticSingleton getInstance(){returninstance;

}

}

上面的单例模式是饿汉模式;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156562.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 包教包会-贝塞尔曲线的绘制原理与应用

    包教包会-贝塞尔曲线的绘制原理与应用

    2022年3月4日
    65
  • 深度学习的深度和宽度的理解[通俗易懂]

    深度学习的深度和宽度的理解[通俗易懂]文章目录1.深度1.1为什么加深可以提升性能1.1.1更好拟合特征1.1.2网络更深,每一层要做的事情也更加简单1.2如何定量评估深度与模型性能1.2.1直接法1.2.2间接法1.3加深就一定更好吗?1.3.1加深带来的优化问题1.3.2网络加深带来的饱和2.宽度2.1为什么需要足够的宽度2.2网路到底需要多宽2.2.1网络宽度的下限在哪?2.2.2网络宽度对模型性能的影响2.2.3网络宽度和深度哪个更重要?2.3如何更加有效地利用宽度2.3.1提高每一层的通道的利用率

    2022年5月11日
    66
  • 浅谈Android指纹识别技术[通俗易懂]

    浅谈Android指纹识别技术[通俗易懂]浅谈Android指纹识别技术当今时代,随着移动智能手机的普及,指纹解锁早已是手机不可或缺的一个功能。除了现在比较新款的iPhone或者部分手机采用了FaceID之外,人们几乎天天都会用到指纹解锁技术。但你知道指纹解锁技术背后的原理吗?原理指纹识别的前提是对指纹的采集,所以我们首先就应该了解第一步:指纹采集。第一步:指纹采集指纹采集主要分为两种方式:滑动式采集和按压式采集滑动式采集是将手指在传感器上滑过,从而使手机获得手指指纹图像。滑动式采集具有成本相对偏低,而且可以采集大面积图像的优势。但这

    2022年8月10日
    1
  • 【推荐】mysql联合 索引(复合索引)的探讨

    【推荐】mysql联合 索引(复合索引)的探讨 Mysql联合索引(复合索引)的使用原则 命名规则:表名_字段名需要加索引的字段,要在where条件中。 数据量少的字段不需要加索引。最窄的字段放在键的左边。 如果where条件中是OR关系,必须所有的or条件都必须是独立索引,否则加索引不起作用。见:mysql关于or的索引问题 最左匹配原则。 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL…

    2022年5月18日
    58
  • DB监控简易脚本

    DB监控简易脚本

    2021年6月9日
    107
  • 常用dos命令(八)–COPY命令

    常用dos命令(八)–COPY命令今天的是copy(复制)命令,说起这个命令,也许你没使用过这个命令,但是平常生活与工作中总会长期用到ctrl+c和ctrl+v这两个功能吧。下面是几个小例子:1、将桌面的hello.txt文件复制到d盘:c:\Users\DT236\Desktop>copyhello.txtd:2、将多个文件合并在一个文件里面:c:\Users\DT236\Desktop>copyh

    2022年7月18日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号