一、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. asp.net listview 实现分页浏览效果

    页面代码: <div style="margin-top:0px;">共<asp:Label ID="lb_count" runat=&quo ...

  2. DBENV->open

    https://stuff.mit.edu/afs/sipb/project/sandbox/golem/db-3.0.55/docs/api_c/env_open.html #include < ...

  3. Hadoop Hive概念学习系列之hive里的索引(十三)

    Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键. Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapReduce任务中需要 ...

  4. Codeforces Round #361 (Div. 2)A. Mike and Cellphone

    A. Mike and Cellphone time limit per test 1 second memory limit per test 256 megabytes input standar ...

  5. O(n²)、O(n)、O(1)、O(nlogn)

    大体上和 @丁戍 说的差不多. 简单说O(n²)表示当n很大的时候,复杂度约等于Cn²,C是某个常数,简单说就是当n足够大的时候,n的线性增长,复杂度将沿平方增长. O(n)也是差不多的意思,也就是说 ...

  6. 异或运算(2014西安网络赛H题)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 题意:给出范围N,给出0-N的一个排列a.让你求出另外一个排列b,使 t = a1 ^ b1 + a ...

  7. poj 3311(DP + 状态压缩)

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5205   Accepted: 2790 ...

  8. 关于jenkins的安装及自动部署

    1. 安装Jenkins 1.1 准备Linux服务器, 关闭防火墙禁止开机启动 systemctl stop firewalld.service #停止firewall systemctl disa ...

  9. linuxmint安装卡在探测文件系统,解决方法。

    今天安装linuxmint17.3,一直卡在探测文件... 解决方法如下: 执行安装程序前,打开终端执行如下命令即可. sudo umount -l /isodevic

  10. java笔记之IO1

    File:文件和目录(文件夹)路径名的抽象表示形式 * 构造方法: *   File(String pathname):根据一个路径得到File对象 *   File(String parent, S ...