java中的static关键词
以下来自:http://www.cnblogs.com/codc-5117/archive/2011/12/04/2275298.html
Static基本规则:
(1)一个类的静态方法只能访问静态属性。
(2)一个类的静态方法不能直接调用非静态方法。
(3)如果访问权限允许,static属性和方法可以使用对象加’.’方式调用,当然也可以使用实例加’.’方式调用。
(4)静态方法中不存在当前对象,所以不能使用this,当然也不能使用super。
(5)静态方法不能被非静态方法覆盖。
(6)构造方法不允许被声明为static的。
学习笔记,材料来自:
http://www.cnblogs.com/dolphin0520/p/3799052.html
static关键词,可以加在方法上,成员变量上,代码块。 类就不要想了。
1. static方法
static方法可以在类没有实例化的情况话直接访问。 在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。
2. static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
static变量只会有一个内存空间,虽然后多个实例,但这些实例中的static变量会共享同一个内存空间。所以静态变量的值发生变更要格外注意,以免造成不必要的“bug”。
static变量是在类装载的时候就被初始化的。
3. static代码块
可以用来初始化一些成员信息。
public class testClassA {
public static int val = 1;
static {
System.err.println("11:" + val);
val = 2;
System.err.println("22:" + val);
}
public static int getVal() {
return val;
}
}
System.err.println(testClassA.getVal());
结果:
11:1
22:2
2
4. static内部类
以下来自:http://blog.csdn.net/jiangxinyu/article/details/8177326
为何要用内部类?
1). 内部类一般只为其外部类使用;
2). 内部类提供了某种进入外部类的窗户;
3). 也是最吸引人的原因,每个内部类都能独立地继承一个接口,而无论外部类是否已经继承了某个接口。因此,内部类使多重继承的解决方案变得更加完整。
public class ClassA {
public static String val = "1";
public ClassA() {
}
public static class ClassB {//静态内部类
public static int bVal = 2;
}
public class ClassC {
public ClassC()
{
}
private void name() {
System.err.println("abc");
}
}
}
5. static静态导入
静态导包是为了简化代码,提高代码的阅读性,但是如果滥用阅读性会很糟糕。
对于静态导入,一定要遵循两个规则(来自下面的资料):
- 不使用*(星号)通配符,除非是导入静态常量类(只包含常量的类或接口)。
- 方法名是具有明确、清晰表象意义的工具类。
更多static静态导包资料:http://www.weixueyuan.net/view/6101.html
import static java.lang.System.*;
public class testClass {
public static void main(String[] args) {
err.println();//这里就不用system.err.println()了。
}
}
6. 实现单例
参考资料:http://devbean.blog.51cto.com/448512/203501/
public class ClassA {
private static ClassA instance = null;
public static synchronized ClassA getInstance() {//静态方法生成实例 懒汉模式 用到的时候再实例化
if (instance == null) {
instance = new ClassA();
}
return instance;
}
public void test() {
System.err.println(1);
}
}
public class ClassA {
private static ClassA instance = new ClassA();// 饿汉模式,直接生成实例
public static ClassA getInstance() {
return instance;
}
public void test() {
System.err.println(1);
}
}
//使用volatile关键词,单例模式最优解决方案,不支持旧版jdk
public class ClassA {
private volatile static ClassA instance = null;
public static ClassA getInstance() {
if (instance == null) {
synchronized (ClassA.class) {
if (instance == null) {
instance = new ClassA();
}
}
}
return instance;
}
public void test() {
System.err.println(1);
}
}
//静态内部类实现单例模式 兼容旧版jdk
public class ClassA {
private ClassA() { } private static class InstanceClass {
private static ClassA instance = new ClassA();
} public static ClassA getInstance() {
return InstanceClass.instance;
} public void test() {
System.err.println(1);
}
}
ClassA.getInstance().test(); //使用方法
7. 一些注意事项:
1. 静态的成员变量可以被实例化后的类对象访问,静态方法也可以被对象访问,但是会有警告。
2. 局部变量不可以static。
3. static代码块优先于构造函数。
java中的static关键词的更多相关文章
- (转)Java中的static关键字解析
转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...
- 关于Java中的static关键字
Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...
- Java中的static关键字解析
Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...
- java中的static使用--静态变量、静态方法
Java 中的 static 使用之静态变量 大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 s ...
- (转)Java中的static关键字解析
转自http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: “sta ...
- Java中的static的使用
Java中的static使用之静态变量 神话丿小王子的博客主页 1.Java 中被static修饰的成员称为静态成员或类成员.它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享.且优先于对象 ...
- java中的static详解
如果一个类成员被声明为static,它就能够在类的任何对象创建之前被访问,而不必引用任何对象.static 成员的最常见的例子是main( ) .因为在程序开始执行时必须调用main() ,所以它被声 ...
- Java 中的 static 使用之静态变量
大家都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的对象共享同一个成员.此时就是 static 大显身手的时候了!! Java 中 ...
- Java中的static关键字解析 转载
原文链接:http://www.cnblogs.com/dolphin0520/p/3799052.html Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到 ...
随机推荐
- ubuntu删除软件命令
第一步,apt-get remove xxx :就是卸载xxx 或者 apt-get remove --purge xxx :卸载xxx并清除配置. 这两条命令对于依赖则是不管的.因为别的软件可 ...
- linux ls -l命令结果含义解析
ls -l 中显示的内容如下: -rw-r--r--. 1 root root 192 Jan 30 09:55 text.txt - 10个字符确定不同用户能对文件干什么 - 第一个字符代表文件 ...
- excel如何设置输入数字后单元格自动填充颜色
在使用excel的过程中,有时需要在输入数字时,突出显示这些单元格,突出显示可以用有填充颜色的单元格来表示.为了实现这样的效果,需要借助excel的条件格式. 工具/原料 电脑 Excel 2010 ...
- 特征创建:Reference Characteristic、Template
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Adobe Edge Animate CC 不再开发更新!
Adobe Edge Animate CC停止开发更新! http://blogs.adobe.com/edge/2015/11/30/update-about-edge-tools-services ...
- jquery截图插件的使用
首先感谢http://www.htmleaf.com/Demo/201504211717.html这款插件. 使用之初,对于插件的结构很是糊涂,首先文件的核心是cropper.js,其次才是mian. ...
- 习题-第1章了解ASP.NET MVC
一.选择题 1.ASP.NET MVC自2007年首次公布预览以来,作为( )的替代品,普及度已明显提高,现在很多大型Web应用程序都是使用这一技术构建的. A.ASP B.ASP.NET ...
- wireshark过滤使用
过滤器的区别 捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中.需要在开始捕捉前设置.显示过滤器(DisplayFilters):在捕捉结果中进行详细查找.他们可以在 ...
- iOS开发多线程篇—GCD的常见用法
iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...
- JavaScript常见问题整合
一. 基本变化<SCRIPT LANGUAGE="javascript"> <!-- window.open ('page.html', 'newwindow', ...