Java Static关键字
2016-04-08 01:58
405 查看
通常来说,当创建类的描述的那个对象的外观和行为的时候,除非用new创建那个类的对象,否则,实际上并未获得任何对象,执行new来创建对象的时候,数据存储空间才会被分配,其方法才能供外界调用。
但是有两种情况是无法得到解决的:第一,只想为特定域分配单一存储空间而不去考虑究竟要创建多少对象,甚至根本不创建任何对象,另一种情况就是,希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即时没有创建对象,也能够调用这个方法。
通过static关键字可以满足这两方面的需求,当声明一个事务是static时,就意味着这个域或方法不会与包含它的那个类的任何实例对象关联在一起,即便没有创建这个类的实力对象,也可以说使用static方法或者static域,但是要注意的是:由于在static方法前不需要创建任何对象,因此对于static方法不能简单的调用其他非static域或方法而没有指定某个命令对象,来直接访问非static域或者方法。
下面我们来看一个例子:
输出是:474748
由这个例子可以知道即便创建了两个对象,但是i只有一份存储空间,这两个对象共享同一个i,注意:使用类名是引用static变量的首选方式,这不仅仅因为它强调了变量的static结构,而且在某些情况喜爱它还为编译器进行优化提供了更好的机会。
类似的逻辑也应用于静态方法,既可以像其他方法一样,通过类创建一个对象来引用该方法,也可以通过过特殊的语法形式CLASSNAME.METHOD()加以引用,定义静态方法的方式也与定义静态变量相似。
输出47474849
从而可以知道在static方法中不像static字段那样更改数据创建的方法,static方法的一个重要的用法就是在不创建任何对象的时候就可以调用它。
但是有两种情况是无法得到解决的:第一,只想为特定域分配单一存储空间而不去考虑究竟要创建多少对象,甚至根本不创建任何对象,另一种情况就是,希望某个方法不与包含它的类的任何对象关联在一起,也就是说,即时没有创建对象,也能够调用这个方法。
通过static关键字可以满足这两方面的需求,当声明一个事务是static时,就意味着这个域或方法不会与包含它的那个类的任何实例对象关联在一起,即便没有创建这个类的实力对象,也可以说使用static方法或者static域,但是要注意的是:由于在static方法前不需要创建任何对象,因此对于static方法不能简单的调用其他非static域或方法而没有指定某个命令对象,来直接访问非static域或者方法。
下面我们来看一个例子:
public class Main{ public static void main(String[] args){ StaticTest staticTest1=new StaticTest(); System.out.print(staticTest1.i); StaticTest staticTest2=new StaticTest(); System.out.print(staticTest2.i); staticTest2.i++; System.out.print(staticTest1.i); } }
输出是:474748
由这个例子可以知道即便创建了两个对象,但是i只有一份存储空间,这两个对象共享同一个i,注意:使用类名是引用static变量的首选方式,这不仅仅因为它强调了变量的static结构,而且在某些情况喜爱它还为编译器进行优化提供了更好的机会。
类似的逻辑也应用于静态方法,既可以像其他方法一样,通过类创建一个对象来引用该方法,也可以通过过特殊的语法形式CLASSNAME.METHOD()加以引用,定义静态方法的方式也与定义静态变量相似。
public class Main{ public static void main(String[] args){ StaticTest staticTest1=new StaticTest(); System.out.print(staticTest1.i); StaticTest staticTest2=new StaticTest(); System.out.print(staticTest2.i); staticTest2.i++; System.out.print(staticTest1.i); StaticTest.increment(); System.out.print(staticTest1.i); } }
public class StaticTest { public static int i=47; public static void increment(){ i++; } }
输出47474849
从而可以知道在static方法中不像static字段那样更改数据创建的方法,static方法的一个重要的用法就是在不创建任何对象的时候就可以调用它。
相关文章推荐
- LeetCode : Multiply Strings (java)
- Jdk 6260652 Bug
- java 处理系统时间(转载)
- java学习之路之数据库知识总结
- Java中与时间相关的几个类(Date、Calendar、SimpleDateFormat)
- Java语言基础(数组)
- [Java]SerialZable接口的使用
- eclipse 使用gradle构建系统时候报错
- Java 日历的制作 心得 写给自己
- java基础-----2016.4.8
- 海康SDK-javademo实现
- Java 加载配置文件的方式
- eclipse开发环境搭建
- SpringMVC - controller中获取session
- 初识java,编写hello world语句
- Java开发者值得关注的7款新工具
- 5个强大的Java分布式缓存框架推荐
- 21. Merge Two Sorted Lists | Java最短代码实现
- JavaWEB 通过Listener理解域对象生命周期
- Java Math的floor、ceil、round方法