static是一个静态修饰符,用于修饰成员(成员变量,成员函数)。《thinking in java》对staic的使用场景有下面2种定义:“一种情形是只想用一个存储区域来保存一个特定的数据—— 无论要创建多少个对象,甚至根本不创建对象。另一种情形是我们需要一个特殊的方法,它没有与这个类的任何对象关联。也就是说,即使没有创建对象,也需要一个能调用的方法”。。在类中,用static声明的成员变量成为静态成员变量,用static声明的方法即称为静态方法。对于static,它有如下几个特点:

 1.随着类的加载而加载。

一旦static被创建,它会一直存在静态常量池中,知道程序执行完,随着类的消失而消失,它的生命周期相对来说是最长的。

2.优先于对象存在

静态是优先于对象存在的。

举个例子:

public class Demo {

    public static void main(String[] args) {
Test.name="hello";
Test.staticHello();//优于对象创建,所以可以直接调用static修饰的方法
//Test.age=0 //调用非静态变量age会报错,因为对象还未创建
Test t=new Test();//创建对象
t.age=18;//这个时候就可以调用非静态变量和方法
t.normalHello(); }
}
class Test{
static String name;
int age;
public static void staticHello(){
System.out.println("static name:"+name);
}
public void normalHello(){
System.out.println("normal age:"+age);
}
}

输出结果为:

static name:hello
normal age:18

从这个例子还可以看出,我们可以在没有创建对象的情况下,通过类名直接调用static修饰的方法和变量,所以可以得知,static是不依赖于对象存在的,即

3.被类的所有对象所共享

因此,静态的成员变量和方法也不能使用this,super关键字,这2个关键字都是基于对象的。

4.可以直接被类名所调用

在上述的例子中,可以看到static修饰的变量方法是直接通过类名Test调用出来的,当然,在创建对象之后,同样可以使用创建的对象去调用这个方法。

在不创建对象的情况下,静态方法不能访问类的非静态成员变量/方法,main方法就是一个静态方法,假如我们在Demo类里创建一个成员变量String names,要在main方法里直接取到这个值是不行的,如果没有创建对象,它就不能直接访问。而非静态方法可以访问静态成员/方法

《Thinking in java4》中“当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前没有使用static关键字”。因为静态方法可以在未创建对象时调用,从这个角度看,构造方法在对象未创建时调用,可以看作是静态方法。
但从另一个方面来看,静态方法不能调用实例方法,而构造方法可以调用实例方法,所以构造方法也不算是静态方法。

转载请注明出处http://www.cnblogs.com/epilogue/p/5670220.html

java Static的使用的更多相关文章

  1. Java static 的一两点使用

    这篇文章是关于Java static关键字的使用,主要会介绍以下的内容: static 的概念 static的各种应用 总结 static 是什么 static 顾名思义是静态的意思.与this相对, ...

  2. java static 变量,和方法从属于类

    第36集 java static 变量,和方法从属于类 可以用类来直接调用static属性和方法 static方法不能调用非静态的属性和方法,反之可以 new产生的对象,不包括static 属性和方法

  3. [转]java static final 初始化

    http://tanbing1986411.blog.163.com/blog/static/7259798220103610224434/ java static final 初始化 1.stati ...

  4. Java static修饰符

    Java static修饰符 static修饰符是静态修饰符,大家写Java第一次接触static就是主函数中的pubic static void main的声明了. 那么static有什么用?本文来 ...

  5. Java Static关键字详解

    提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...

  6. java static

    一. static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员 ...

  7. Java static解析

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块 一.static变量 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它 ...

  8. 13)Java static

    1.static变量      按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是:    ...

  9. JAVA! static什么作用?

    是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只 ...

  10. JAVA static 作用

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

随机推荐

  1. 使用Eclipse进行Javaweb项目开发时,如何设置外置浏览器Chrome

    使用Eclipse开发Javaweb项目时,在Eclipse中显示页面不是很好,那么如何让它自动打开外置浏览器呢?操作如下

  2. springmvc 添加@ResponseBody

    1.添加ResponseBody之后的话 返回字符串的时候 就是一个字符串. @RequestMapping(value = "/{bookId}/detail.do",metho ...

  3. Python+requests库 POST接口图片上传

    捕获到POST接口的请求参数,如下: 包括data.file两个部分,上传代码如下: 比较简单,直接发送files参数即可 heads中 content-type 折腾了1个小时,呵呵

  4. python+requests+unittest API接口测试

    黑熊再网上查找了下接口测试相关的资料,大都重点是以数据驱动的形式,见用例维护在文本或表格中,而没有说明怎么样去生成想要的用例, 问题: 测试接口时,比如参数a,b,c,我要先测a参数,有(不传,为空, ...

  5. .Net中的AOP系列之《AOP实现类型》

    返回<.Net中的AOP>系列学习总目录 本篇目录 AOP是如何跑起来的 运行时编织 复习代理模式 动态代理 编译时编织 后期编译(PostCompiling) 来龙去脉 运行时编织 VS ...

  6. oracle日期时间函数 总结

    表中存在伪列:sysdate,systimestamp 伪列存在但是不显示 select sysdate from dual; select systimestamp from dual; 日期计算公 ...

  7. asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010

    using Microsoft.Office.Interop.Excel;//转换为excel时,需要引用此命名空间 using ET;//转换为wps时,需要引用此命名空间using KSO;//转 ...

  8. CNN压缩:为反向传播添加mask(caffe代码修改)

    神经网络压缩的研究近三年十分热门,笔者查阅到相关的两篇博客,博主们非常奉献的提供了源代码,但是发发现在使用gpu训练添加mask的网络上,稍微有些不顺,特此再进行详细说明. 此文是在 基于Caffe的 ...

  9. javac不是内部命令和外部命令

    因为系统不能识别javac命令,或者是因为你没有正确安装JDK. 在你的JDK所在的安装目录,在DOS环境里,比如是:C:\java>set path=c:\java1.4.1\bin 然后在c ...

  10. JAVA基础——方法笔记

    java方法_学习笔记 由于我本人对java方法已经比较熟悉了,java方法的定义和使用也比较简单,这里只列举了基于我自身容易搞错的地方,希望对大家的学习有帮助!! 方法的参数可以是基本数据类型,如 ...