static关键字:

1)static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享;
2)只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

一、static变量

1、按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。
两者的区别是:
1)对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
2)对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
注:static成员变量的初始化顺序按照定义的顺序进行初始化,static不可以修饰局部变量。
2、所以一般在需要实现以下两个功能时使用静态变量:
1)在对象之间共享值时
2) 方便访问变量时

二、静态方法

1、静态方法的好处就是不用生成类的实例就能直接调用,可以这样理解使用static修饰的成员不再归对象所以,而是属于类 可以理解为是共有的,也就说只要通过类名就可以访问,不需要耗费资源反复创建对象。因为在程序第一次加载的时候就已经在内存中了,直到程序结束该内存才会释放。如果不是static修饰的成员在使用完之后该内存就会被回收,所以说static要慎用,根据实际情况而定
2、如果这个方法是作为一个工具来使用,就声明为static,不用new一个对象出来就可以使用了。比如连接到数据库,我声明一个 getConnection()的方法,就定义为静态的,因为连接到数据库不是某一个对象所特有的。它只作为一个连接到数据库的工具。static 成员的最常见的例子是main( ) ,因为在程序开始执行时必须调用main() ,所以它被声明为static。

3、声明为static的方法有以下几条限制:
1)它们仅能调用其他的static 方法
2)它们只能访问static数据
3)它们不能以任何方式引用this 或super

三、static代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次,所以说static块可以用来优化程序性能。

1、static方法块和static方法的区别:
1)静态代码块是自动执行的;
2)静态方法是被调用的时候才执行的;

2、 静态方法:如果我们在程序编写的时候需要一个不实例化对象就可以调用的方法,我们就可以使用静态方法,具体实现是在方法前面加上static,如下:public static void method(){}

在使用静态方法的时候需要注意一下几个方面:
1)在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。(备注:静态变量是属于整个类的变量而不是属于某个对象的)
2)静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。

3、静态程序块:当一个类需要在被载入时就执行一段程序,这样可以使用静态程序块。

例1

 public class Test5 {
private static int a;
private int b; static{
Test5.a=3;
System.out.println(a);
Test5 t=new Test5();
t.f();
t.b=1000;
System.out.println(t.b);
}
static{
Test5.a=4;
System.out.println(a);
}
public static void main(String[] args) {
// TODO 自动生成方法存根
}
static{
Test5.a=5;
System.out.println(a);
}
public void f(){
System.out.println("hhahhahah");
}
}

运行结果:

3
hhahhahah
1000
4
5

例2

// Demonstrate static variables,methods,and blocks. 

class UseStatic {
static int a = 3;
static int b; static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);
} static {
System.out.println("Static block initialized.");
b = a * 4;
} public static void main(String args[]) {
meth(42);
}
}

一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。

运行结果:

Static block initialized.
x = 42
a = 3
b = 12

例3

class StaticDemo {
static int a = 42;
static int b = 99;
static void callme() { System.out.println("a = " + a);
}
} class StaticByName { public static void main(String args[]) {
StaticDemo.callme();
System.out.println("b = " + StaticDemo.b);
}
}

运行结果:

a = 42
b = 99

四、static和final一块用表示
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
1、对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
2、对于方法,表示不可覆盖,并且可以通过类名直接访问。

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. loadrunner12-错误 -26366: 找不到 web_reg_find 的“Text=19728.00”

    转:检查点(web_reg_find函数详解) LR检查点 设置检查点的目的不只是为了验证我们的脚本没有错误,而更重要的是一个规范问题,如何使得测试结果更具有说服力,因此建议所有的测试脚本中都添加检查 ...

  2. code1099 字串变换

    BFS 听上去蛮简单的,实际编程复杂度较高(至少一个快睡着的人是这么认为的...) 抄的题解(感谢题解的作者<'_'>): #include<queue> #include&l ...

  3. fgetc()

    fgetc() 函数从文件指针中读取一个字符.

  4. [Training Video - 6] [File Reading] [Java] Read Excel File Using Apache POI API

    读取以下两种格式的Excel : *.xls  and *.xlsx 用Apache POI API来实现,需要用到 HSSF 和 XSSF 的类库 HSSF is the POI Project's ...

  5. C++获取字符串长度数

    strlen,获取到的是字节数,中文占两个字节. 如何获取字符数,无论中文英文,标点符号,都按一个字符计算呢?这里提供其中的一个方法.那就是通过MultiByteToWideChar函数,将CStri ...

  6. left join、right join、inner join、full join

    转自:某一网友 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join ...

  7. ScreenCapturePro2 for Joomla_3.4.7-tinymce4x

    1.1. 与Joomla_3.4.7-tinymce4x整合 示例下载:Joomla_3.4.7,   1.1.1. 添加screencapture文件夹   1.1.2. 2.添加插件文件夹 路径: ...

  8. SciTE编写lua的快捷键整理

    SciTE快捷键整理 常用键整理: Ctrl + Q: 多行注释 Ctrl + L:删除一行或多行 Ctrl+T :和上一行换位置 Ctrl+D :复制高亮选中字符. 如果没有高亮选择字符, 则复制光 ...

  9. struts2的validate输入验证

    原创 struts2的输入验证有两种方式: 使用validate()方法实现验证 使用验证文件实现验证 下面通过一个例子介绍validate()方法验证——实现客户注册输入验证 设计的JSP页面代码: ...

  10. arcgis android 中shapefile的加载

    前言 本文为大家分享arcgis android 中shapefile的加载,默认你有java环境,懂一定的android基础知识,默认你已经安装android studio.如缺乏以上环境和知识,请 ...