一、static定义

  static是静态修饰符意思,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,万物皆对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的。

static声明的静态变量可以直接通过类名调用!

 class Demo{
public static void main(String[] args)
{
Person p = new Person();
System.out.println(p.country); //1、新建对象调用
System.out.println(Person.country); //2、通过类名直接调用
}
}
class Person{
static String country = "china";
}

二、static特点

由此我们得出static的特点。

a、static是一个修饰符,用于修饰成员。

b、static修饰的成员被所有的对象共享。

c、static优先于对象存在,static成员随着类的加载就已经存在。

d、static修饰成员多一种调用方式--通过类名调用。

三、成员变量和静态变量区别?

1.两个变量的生命周期同

  成员变量随对象创建存在,随对象回收而释放。

  静态变量随类的加载而存在,同样也随着类而消失。

2、调用方式

  成员变量只能被对象调用。

  静态变量能被对象调用,还可以被类名调用。

3、内存中存储位置不同。

  成员变量存储在堆内存中。

  静态变量存储在方法区(共享数据区)的静态区。

四、静态使用注意事项

1、静态方法只能访问静态成员。

2、静态方法中不可以用this或super关键字。

3、主函数都是静态的。

class Demo{
public static void main(String[] args)
{
Person.show();
}
}
class Person{
static String country = "china";
  String name = "jinfulin";
public static void show()
{
System.out.print(country); //正确
//System.out.print(name); //错误
}
}

五、什么时候使用静态?

1、静态成员

  分析对象中所有的成员变量的值都是相同的。

2、静态函数

  不需要初始化就能直接访问(该函数没有访问到类的特有数据)。

  还是上面那个人的例子,下面这个show方法没有调用特有数据,所以定义成静态的更好。

class Demo{
public static void main(String[] args)
{
Person.show();
}
}
class Person{
static String country = "china";
String name = "jinfulin";
public static void show()
{
System.out.print("哈哈~");
}
}

六、特殊用法--静态代码块

随着类的加载而执行,而且只执行一次。

作用:用于类的初始化。

class Demo{
public static void main(String[] args)
{
new Person().show();
new Person().show();
}
}
class Person{
static
{
System.out.println("haha....");
}
void show()
{
System.out.println("哈哈~");
}
}

如上:结果为一次haha,两次哈哈

ps:在执行顺序上,静态代码块>构造代码块>构造函数

最后,以上就是java中static的用法,static不仅上编程时候难理解的地方,也是面试爱考的地方,以后我们的学习必定要更加的细化,不仅要明白如何做出,还要知道如何做好。

详解java中staitc关键字的更多相关文章

  1. 干货——详解Java中的关键字

    在平时编码中,我们可能只注意了这些static,final,volatile等关键字的使用,忽略了他们的细节,更深层次的意义. 本文总结了Java中所有常见的关键字以及一些例子. static 关键字 ...

  2. 详解详解Java中static关键字和final关键字的功能

    摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要. 本文分享自华为云社区<Java: static关键字与final关键字>,原文作者:唐里 . ...

  3. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  4. 详解Java中的final关键字

    本文原文地址:https://jiang-hao.com/articles/2019/coding-java-final-keyword.html1 final 简介2 final关键字可用于多个场景 ...

  5. 从缓存入门到并发编程三要素详解 Java中 volatile 、final 等关键字解析案例

    引入高速缓存概念 在计算机在执行程序时,以指令为单位来执行,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入. 由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这 ...

  6. 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

    这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...

  7. 详解Java中的字符串

    字符串常量池详解 在深入学习字符串类之前, 我们先搞懂JVM是怎样处理新生字符串的. 当你知道字符串的初始化细节后, 再去写String s = "hello"或String s ...

  8. 详解Java中的Object.getClass()方法

    详解Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Me ...

  9. 详解Java中的访问控制修饰符(public, protected, default, private)

    Java中的访问控制修饰符已经困惑笔者多时,其中较复杂的情况一直不能理解透彻.今天下定决心,系统.全面地研究Java中的访问控制修饰符的所有方面,并整理成这篇文章,希望有同样疑惑的读者读完后能有所收获 ...

随机推荐

  1. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  2. 列表和元组的基本操作,for遍历,range

    1,list(增删改查):列表可以装大量数据,不限制数据的类型(int,str,bool, list,tuple,dict,set),表示方法用[  ],list和sttr有区别,list可以直接在原 ...

  3. a simple and universal interface between web servers and web applications or frameworks: the Python Web Server Gateway Interface (WSGI).

    WSGI is the Web Server Gateway Interface. It is a specification that describes how a web server comm ...

  4. POJ3020 Antenna Placement —— 最大匹配 or 最小边覆盖

    题目链接:https://vjudge.net/problem/POJ-3020 Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K ...

  5. javascript 二级联动

    <html> <head> <title></title> <meta http-equiv="Content-Type" c ...

  6. 并不对劲的bzoj4560:p3269:[JLOI2016]字符串覆盖

    题目大意 \(T\)(\(T\leq10\))组询问 每组询问给出一个字符串\(A\)(\(|A|\leq10^4\)),\(n\)(\(n\leq4\))个\(A\)的子串\(B_1,B_2,B_3 ...

  7. BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie树

    BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie Description Bessie the cow has a new cell phone and enjo ...

  8. 使用slot分发内容 作用域插槽

    除非子组件模板包含至少一个<slot>插口,否则父组件的内容将会别丢弃.当子组件模板只有一个没有属性的slot时,父组件整个内容片断将插入到slot所在的DOM位置,并替换掉slot标签本 ...

  9. INT_PTR数据类型

    A signed integer type for pointer precision. Use when casting a pointer to an integer to perform poi ...

  10. MD5 密码加密算法 系统等待

    MD5 密码加密算法 public static String md(String md, String pass) { MessageDigest m; String passok = " ...