`

Static那些年你没有搞懂过的静态

阅读更多

【前言】:

之所以今天回来再讲一次Static,是因为确实当年学的也是稀里糊涂,对于java来说不要说精通,还远远达不到熟练,所以如果硬要形容自己的java水平,就如同一门语言一样,仅限于交流。沟通无障碍,所以这段时间重新梳理一下,捡一下,生活丢丢捡捡是正常的,毕竟我们不能像走路一样熟悉来熟悉某些事物。

===================================================================================

【static变量】:

         我们从本质理解,就是java声明了一个全局变量,尽管全局变量是存在于C和C++的,(就像有着天敌关系似得,每次作比较,C,C++总会出现,这一对好基友一直在为java一些知识体系的解释做着贡献)然而在java里static声明的变量,我们可以把它理解成全局变量。

                         ===========================================

                代码层面的理解:

                                        

package Test;

public class StaticExample {
	    public static int counter;
	    

}

 

此时counter就已经成为了全局变量,在代码执行之前,counter这个变量就存在内存中了,作为Test类唯一实例。

这个实例是不管Test类中建了多少个实例,counter也只是一个,而且就当Test里面其他实例被gc,被虚拟机垃圾回收机制回收,counter也仍然存在于内存中。

这种静态变量的特性,经常被用于单实例中:

    (什么是单实例:单实例设可能是使用最广泛的设计模式。其思想意图是保证一个类只有一个实例,并且提供类对象的全程访问。

public class StaticExample {
	    //单实例
	    public static StaticExample staticExample=null;
	    //构造函数声明为private,这样避免类的外部用new创建对象;
	    private StaticExample(){};
	    //外界调用方法
	    public static StaticExample getStaticExample(){
	    	if(null==staticExample){
	    		staticExample=new StaticExample();
	    	}
	    	
	    	return staticExample;
	    }
	    

}

 

==================================================================================

【static方法】:

Java修养:

一个方法,如果仅依赖方法的传入参数,其他的static变量,这样看来,这个方法不依赖于类实例,则这样的方法应该被声明为static。表示此方法是类方法,而非实例方法。

代码举例:

public class UtilDemo {
	public static int toInt(String s){
		return Integer.parseInt(s);
	}
//	int value=UtilDemo.toInt(str);

}

 

这一种则直接int value=UtilDemo.toInt(str);就可以调用,没必要实例化一个对象再去调用,创建这样的对象纯粹是浪费。
=================================================================================
【static类嵌套类】:
可惜的是java类是不能用static修饰的,因为是非法的,而在C C++里如果一个类被static修饰,则里面所有成员变量和方法都是静态了。
嵌套类可以用static修饰。但又有另外的含义。
分享到:
评论

相关推荐

    几行代码带你彻底搞懂Java内部类

    - 成员内部类不能有静态变量、静态初始化块或静态方法,但可以有常量(final static)。 4. **局部内部类** - 局部内部类定义在方法或代码块内,仅在该方法或代码块可见。 - 局部内部类不能有静态变量、静态初始...

    PHP中的self关键字详解

    前言 ...要想将彻底搞懂self,要与parent、static以及this区分开。以下分别做对比。 parent self与parent的区分比较容易:parent引用父类/基类被隐盖的方法(或变量),self则引用自身方法(或变量

    彻底搞懂Python数据成员和成员方法

    静态方法以`@staticmethod`修饰器定义,如`@staticmethod def static_method()`。它们不依赖于类实例,也不需要`self`参数,可以直接通过类名或对象名调用,常用于与类关联但与实例状态无关的函数。 类方法以`@...

    linux下C++动态链接C++库示例

    所有非静态(non-static)函数在二进制文件中都是以“符号(symbol)”形式出现的。 这些符号都是唯一的字符串,从而把各个函数在程序、库、目标文件中区分开来。 在C中,符号名正是函数名:strcpy函数的符号名就是...

    JSP经典学习笔记(包含各种入门常用语法)

    声明的变量和方法遵循Java的访问控制规则,可以使用`public`, `private`, `protected`, `static`等修饰符。但需要注意,声明部分不能包含`abstract`方法,因为这会导致生成的Servlet变为抽象类,无法实例化。 **JSP...

    C#微软培训资料

    11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 结.137 第十二章 域 和 属 性 .139 12.1 域 .139 12.2 属 性 .143 12.3 小 结 .146 第十三章 事件和索引指示器 .148 ...

Global site tag (gtag.js) - Google Analytics