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. Windows服务器常用的性能计数器

    Windows常用性能计数器总结 基础监控: 1.SQL Server Buffer: Buffer Cache Hit Ratio 这是一个很重要查看内存是否不足的参数.SQL Server Buf ...

  2. 面向对象的JavaScript-004

    1. // Below is an example of how to use Object.create() to achieve classical inheritance. This is fo ...

  3. List 组件简单示例及其onItemsDisclosure点击事件

    来自<sencha touch权威指南>第9章,276页开始 ------------------------------------------------- app.js代码如下: E ...

  4. 往数据库添加的时候(只添加以前未添加的记录的写法)c#

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  5. datatable:dt.page(dt.page()).draw(false)

    dt.page(dt.page()).draw(false);该方法可以直接返回到当前页,不用重新绘制table 描述 分页是DataTables的一个核心功能,并且该方法提供对表格显示页面的外部控制 ...

  6. pageadmin去掉xxx

    首先,屏蔽网页标题栏上的版权信息. 这个版本的信息在Incs目录下,我添加代码的文件是web_top.ascx,在它的最底下加入下面的代码. <script language="jav ...

  7. PropertiesConfiguration 修改配置文件的信息,不打乱顺序

    需引入jar包 <!-- https://mvnrepository.com/artifact/commons-configuration/commons-configuration --> ...

  8. WebService搭建

    好久没有用WebService了,今天想复习一下原来的技术,结果错误百出. 这几天重装了系统,所有的东西都要重新配置,导致了很多原来没有发生过的问题,在这里做个笔记,希望以后不会再有这样的错误.

  9. 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  10. INDEX--关于索引的琐碎

    --=========================================================更新时的操作1>更新时有两种方式,一种是在原来的位置更新,另外一种是移除删除 ...