- 浏览: 291311 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
wahahachuang5:
web实时推送技术使用越来越广泛,但是自己开发又太麻烦了,我觉 ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
fmpoffice:
发来感谢!准备尝试!https://m.yooshifu.co ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
playboyhaolei:
爱死博主了 学习了 已经成功的推送了 ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
playboyhaolei:
爱死博主了 学习了 已经成功的推送了 ...
java以post发送方式实现百度Sitemap实时推送代码分享 -
真三武侯:
爱死博主了
java以post发送方式实现百度Sitemap实时推送代码分享
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:
·
它们仅能调用其他的static 方法。
·
它们只能访问static数据。
·
它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:
// 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 方法中引用任何实例变量都是非法的。
下面是该程序的输出:
Static block initialized.
x = 42
a = 3
b = 12
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:
classname.method( )
这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。
下面是一个例子。在main() 中,static方法callme() 和static 变量b在它们的类之外被访问。
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表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
类名.静态方法名(参数列表...)
类名.静态变量名
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。
1、static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
2、静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3、static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。例如:
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
利用静态代码块可以对一些static变量进行赋值,最后再看一眼这些例子,都一个static的main方法,这样JVM在运行main方法的时候可以直接调用而不用创建实例。
//扩展
之前被面试问到父子类静态代码块、非静态代码块、构造函数
一直以来我我认为这三者的执行顺序是静态代码块、非静态代码块、构造函数。
网上搜了下也都是这么说的。
就像下面这段代码:
执行结果
=====
父类--静态代码块
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
发表评论
-
java以post发送方式实现百度Sitemap实时推送代码分享
2015-06-21 09:48 9243怎么实现百度sitemap实时推送,首先,得拥 ... -
[Java]读取文件方法大全
2012-12-22 16:39 11471、按字节读取文件内容 2、按字符读取文件内容 3、按行读 ... -
Dom4j创建XML文件,对该文件进行修改、格式化以及读取的Demo
2012-11-22 18:04 1772import java.io.File; import ... -
JAVA的文件操作【转】
2012-11-22 14:28 188711.3 I/O 类使用 由于在 IO 操作 ... -
Java文件file操作总结
2012-11-22 14:14 17402010-08-31 15:55 1106人阅读 ... -
java反射详解
2012-11-22 10:29 1081本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ... -
Java反射机制的学习
2012-11-22 10:27 1552Java反射机制是 Java 语言被视为准动态语言的关键性 ... -
JAVA:注解(一)
2012-11-20 20:52 1179JAVA:注解(一) (2010-06-24 08:52 ... -
lucene3.6.1 经典案例 入门教程
2012-09-12 10:47 17377第一步:下载lucene的核心包 lucene-core-3 ... -
JAVA 反射详细讲解 实例
2012-08-17 16:06 2595一、反射的含义: Java类的一种自审机制, ... -
Eclipse快捷键大全 (转载)
2012-07-13 19:11 1057eclipse快捷键详细介绍 用的最多Ctrl+1 快 ... -
java时间格式大全1!
2012-07-10 17:13 1149java时间格式大全1! 2007年10月22日 星期 ... -
JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍
2012-05-28 17:46 2208JUnit 4 中的Before After Ign ... -
java 静态块、非静态块、静态函数、构造函数 执行顺序
2012-04-01 16:25 9780java中经常有一些静态块 ... -
c:foreach 标签的属性 详细解释
2012-03-27 09:00 2678<c:forEach>标签的使用 2007年03 ... -
java中equals 方法和 == 的区别 (详细)
2012-03-26 11:05 3431equal 和 == 的区别 java中eq ... -
java 创建线程的方法 继承Thread类和实现Runnable接口
2011-12-06 10:51 10161要产生一个线程,有两种方法: ◆需要从Java.lang.T ... -
Java HashMap和Hashtable的区别
2011-11-06 16:07 17671、 继承和实现区别 Hashtable是基于陈旧 ... -
java String和StringBuffer的区别
2011-11-06 15:44 1329在java中有3个类来负责字符的操作。 1.Characte ... -
Java int Integer 详解
2011-11-06 15:36 39481.int是基本的数据类 ...
相关推荐
"Java 中 static 作用" static 是 Java 语言中一个关键字,表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态代码块。在 Java 语言中,没有全局变量的概念,但是可以使用 static 来实现...
在Java编程语言中,`static`关键字是一个非常重要的修饰符,它有多种用途,但最常见的是用来修饰类的方法和变量。在这个主题中,我们将深入探讨`static`修饰方法的概念、作用以及它如何影响Java程序的执行。 首先,...
在Java编程语言中,`static`关键字扮演着至关重要的角色,它被用于声明类成员(如变量、方法)为静态的。静态成员不依赖于任何特定的对象实例,而是与类本身绑定,这意味着无论该类有多少个实例,静态成员只会有一份...
本文详细介绍了Java中的`static`属性,包括静态成员变量、静态方法以及静态语句块的概念和使用方法。通过具体的代码示例,我们不仅了解了`static`关键字的基本用法,还深入探讨了静态成员变量如何在整个类之间共享,...
Java 中的 static 关键字 Java 中的 static 关键字是用于声明类的成员变量和成员方法的,它可以使得变量和方法属于类本身,而不属于某个对象。静态变量也称为类变量,静态方法也称为类方法。静态变量和静态方法可以...
在Java编程语言中,`static`关键字扮演着重要的角色,特别是在初始化类的静态成员时。`static`静态初始化块是用来初始化类级别的变量,也就是说,这些变量是属于类本身,而不是类的实例。当我们讨论“Java static...
本视频教程详细讲解了`static`关键字在Java中的应用及其背后的原理。 首先,我们要理解`static`关键字的基本含义。在Java中,`static`关键字用于声明类级别的成员,这意味着它们与类本身关联,而不是类的任何实例。...
Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...
Java中的`static`关键字是编程中的一个重要概念,它在Java语言中扮演着多个角色,尤其在处理类和对象时起到关键作用。`static`关键字可以用来修饰成员变量、方法、代码块以及内部类,每种情况都有其特定的含义和用途...
Java 中 final 和 static ...通过上面的解释,我们可以看到 final 和 static 关键字在 Java 中的不同用法。final 关键字用于表示不可变的变量、方法、类等,而 static 关键字用于表示静态的成员变量、方法、代码块等。
java中final和static讲解及实例
在Java编程语言中,`static`、`this`、`super`和`final`是四个非常重要的关键字,它们各自有着特定的用途和含义。 1. **static**: 静态关键字`static`用于声明类级别的变量和方法,即静态变量和静态方法。静态变量...
Java中static变量的几个优缺点 简单介绍static
本文将深入探讨`static`在变量、方法和代码块中的应用,通过示例和解释帮助读者更深刻地理解其功能与特性。 #### 1. Static变量 `static`变量,亦称为静态变量或类变量,与实例变量相对。其最显著的特点在于,无论...
### 关于static的小结(Java内存溢出) #### 标题和描述中的知识点 在《关于static的小结(Java内存溢出)》这篇文章中,作者主要探讨了与Java中的`static`关键字相关的知识点,以及如何可能导致内存溢出的情况。...
以下是对`static`关键字的详细解释: 1. **静态变量(Static Variables)** - 静态变量是属于类的,而不是属于类的任何实例。这意味着所有类的实例都会共享同一个静态变量的值,而不是每个实例都有自己的副本。...
### static在Java中的作用 `static`是Java语言中的一个关键字,主要用来修饰类成员(变量、方法或代码块),其核心功能在于定义类级别的共享属性。通过使用`static`,可以实现对类属性和方法的共享访问,而无需创建...
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
static 关键字是 Java 中的一种访问修饰符,用于修饰变量、方法和块,下面是 static 关键字的详细解释: 1. static 变量 static 变量是属于类的变量,而不是实例变量。static 变量只有一份拷贝,所有实例共享同一...