本篇浅析java中static的用法,主要五个方面:静态成员变量,静态方法,静态块,静态内部类,静态导包。
首先还是一张表格说一下静态对象和非静态对象的区别:
静态对象 | 非静态对象 | |
归属 | 类共同具有 | 类的各个实例独立拥有 |
内存分配 | 内存空间上固定的 | 附属类分配 |
分配空间顺序 | 优先分配静态对象空间 | 优先分配静态对象空间,初始化也一样 |
1 静态变量,静态方法,静态块
静态对象,静态方法都是在原对象和方法上加上static关键字修饰,表示类可以直接调用这些,而不需要实例化后再调用。具有的好处是:
1--静态对象的数据是全局唯一的,一改都改,可以保证数据的唯一性
2--引用方便,直接用类名.方法(属性)就可以了,不用再get和set
当然静态方法(变量,块)也有相应的限制:
1--不能调用其他非静态方法(只能调用static方法)
2--只能访问static数据
3--不能以任何方式引用this或super
示例代码:
public class StaticExercise { public static String sky="jeyson"; public static String getMySky(String sky){ return sky; } static { System.out.println("这是静态块中的内容--"); System.out.println("静态块:"+getMySky(sky)); } /** * ***静态对象好处: * 1--静态对象的数据是全局唯一的,一改都改,可以保证数据唯一。 * 2--引用方便,直接类名.方法就行了,不用set和get * ***分配空间顺序: * 先分配静态对象空间再分配非静态。初始化顺序也是这样 * ***static final 修饰的成员变量和成员方法可以理解为全局变量(java中没有全局变量概念) * ***静态对象,方法,块的限制: * 1--只能html" target="_blank">调用其他的static方法 * 2--只能访问static数据 * 3--不能以任何方式引用this或super * 静态对象测试 */ @Test public void testStatic1(){ System.out.println(sky); System.out.println("-----------------"); System.out.println(getMySky(sky)); System.out.println("-----------------"); System.out.println(StaticTest.getSms()); } }
2 静态内部类
当一个类跟另一个类(外部类)有紧密的联系,一般只有用到外部类的时候才会用该类的话,可以将该类作为静态的内部类。这样就可以随着类的加载而直接产生。不用再可以实例化。
使用方法:随类一同被加载,调用直接外部类.内部类.静态对象(方法)
示例代码:
class StaticTest{ public static String sms="to my sky"; public static String getSms(){ return sms; } /** * 静态内部类 * ***使用场景: * 内部类跟外部类联系紧密,一般只有用到外部类的时候才会用到这个类 * ***使用 * 随类一同被加载,直接外部类.内部类.静态对象(方法) */ static class InnerStatic{ public static final String MYSKY="MY FINAL SKY"; } } @Test public void testStatic2(){ System.out.println(StaticTest.InnerStatic.MYSKY); }
2 静态导包
如果要用的静态方法所在的类跟当前类不在同一个包下,可以使用静态导包。这样你想要用的静态方法或变量就相当于在该类中直接可见,无需再类名.静态变量的方式调用。
使用方法:
import static 包名.类名.静态成员变量(方法)
好处:
被导入的静态变量和方法在该类中直接可见,直接用
坏处:
一定程度上降低了代码的可读性
代码示例:
public class MyStaticImportTest { public static final int number=55; public static void getMyWords(){ System.out.println("hello ,这是一个静态导包的测试"); } } import static com.generic.MyStaticImportTest.number; import static com.generic.MyStaticImportTest.getMyWords; /** * @Description: * 静态 */ public class StaticExercise { /** * 静态导包 * ***使用方法: * 直接静态导入相应的变量和方法:(import static 包名.类名.静态成员变量(方法) * import static com.generic.MyStaticImportTest.number; * import static com.generic.MyStaticImportTest.getMyWords; * *** 好处: * 被导入的静态方法和变量在这个类中直接可见,无需再给出类名 * *** 坏处 * 一定程度上降低了代码的可读性 */ @Test public void testStatic3(){ //静态导入后可以直接用 int myNumber=number; getMyWords(); } }
以上所述是小编给大家介绍的浅析java 的 static 关键字用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍浅谈Java中static关键字的作用,包括了浅谈Java中static关键字的作用的使用技巧和注意事项,需要的朋友参考一下 static关键字主要有两种作用: 第一,为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。 第二,实现某个方法或属性与类而不是对象关联在一起 具体而言,在Java语言中,static主要有4中使用情况:成员变量、成员方法、代码块和内部类 (1
本文向大家介绍JAVA Static关键字的用法,包括了JAVA Static关键字的用法的使用技巧和注意事项,需要的朋友参考一下 static关键字的作用: 用来修饰成员变量和方法,被修饰的成员是属于类的,而不单单是属于某个对象的,也就是说,可以不靠对象来调用。 首先我们来介绍类变量 当static修饰成员变量时,该变量称为类变量,该类的每个对象都共享同一个类变量的值,任何 对象都可以更改该变量
主要内容:静态变量,静态方法,静态代码块在类中,使用 static 修饰符修饰的属性(成员变量)称为静态变量,也可以称为类变量,常量称为静态常量,方法称为静态方法或类方法,它们统称为 静态成员,归整个类所有。 静态成员不依赖于类的特定实例,被类的所有实例共享,就是说 static 修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载, Java 虚拟机就可以根据类名找到它们。 调用静态成员的语法形式如下: 注意: static
本文向大家介绍java之static关键字用法实例解析,包括了java之static关键字用法实例解析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java中static关键字用法,分享给大家供大家参考。具体分析如下: 一、介绍: 1、在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。 2
本文向大家介绍Java中的static关键字全面解析,包括了Java中的static关键字全面解析的使用技巧和注意事项,需要的朋友参考一下 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列举了一些面试笔试中常见的关于static的考题。以下是本文的
本文向大家介绍java中static关键字用法详解,包括了java中static关键字用法详解的使用技巧和注意事项,需要的朋友参考一下 前言 static对我们来说并不陌生,也是面试经常碰到的问题,今天抽空整理了一篇总结作为笔记保存起来! static用法可以分为三大块:静态变量、静态方法、静态代码块,下面将从这三个方面分析 静态方法 通常在一个类中定义一个方法为static,即为静态方法,无需本