`

未完 java Static 总结

阅读更多
static可以用来修饰:
字段 Fields
方法 Methods
嵌套类 Nested Classes
初始化块 Initialization Block
import (注意格式为import static,不是static import)



Static Fields:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.3.1.1
常称其为类变量或静态变量。
类变量在类实例化
Static Field在类装载的时候进行初始化;它是class 。。。的,所以如果有类的多个实例存在,他们Static Field
incarnated


Static Methods:



Static Nested Class:
静态嵌套类一般不归入内部类(Inner Class),因为其行为上更像是一个独立的类。详见:
http://wuaner.iteye.com/admin/blogs/573256


Static Initialization Blocks:
静态初始化块见: http://wuaner.iteye.com/blog/1669127





Static Import:
Sources:http://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html
引用
The static import declaration is analogous to the normal import declaration. Where the normal import declaration imports classes from packages, allowing them to be used without package qualification, the static import declaration imports static members from classes, allowing them to be used without class qualification.
两种格式:
1 引入单个静态成员(这里的静态成员指类变量和静态方法)
import static java.lang.Math.PI;
import static java.lang.String.valueOf;
2 引入类的所有静态成员:
import static java.lang.Math.*;
如果当前类中有同名(同名的理解:类变量考虑的就是变量名;静态方法只考虑方法签名中的方法名,不考虑返回值、参数等)的静态成员,优先使用当前类的静态成员。
import static java.lang.String.valueOf;

public class StaticTest {
	
	public static void main(String[] args) {
		int i = 1;
		/**
		 * 下面的方法调用会报错,尽管String.valueOf(int)严格匹配该方法调用
		 * 但根据同名则本类优先原则,使用的是本类中的valueOf(String)方法,出现参数类型不一致的编译错误
		 * 
		 */
		valueOf(i);
	}
	
	static void valueOf(String str) {
	}
}









静态代码的执行与反射
类中的静态代码块会在类(XXX.class)被加载到内存的时候执行;注意此时只是被加载,并不一定有该类的对象实例存在。
如通过反射加载:
Class c = Class.forName("XXX"); 
执行完上句后,XXX.class被加载到内存,并且该类的静态代码块被执行;但是并没有创建该类的对象实例。


Tips about Static:
Static Method中不能使用this。
http://www.velocityreviews.com/forums/t132767-this-compiler-error.html
不能在类的Static Method中访问该类的non-static Method 和 non-static Field。
引用

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

Instance methods can access instance variables and instance methods directly.
Instance methods can access class variables and class methods directly.
Class methods can access class variables and class methods directly.
Class methods cannot access instance variables or instance methods directly—they must use an object reference. Also, class methods cannot use the this keyword as there is no instance for this to refer to.

static不能用来修饰局部变量。


java中没有常量的定义(const为关键字,但未使用)。我们通常结合使用static和final来实现java中的常量:
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html


Sources:
Java Tutorials - Understanding Instance and Class Members:
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html



分享到:
评论

相关推荐

    自考Java语言程序设计一填空题汇总.pdf

    5. 在一个Java应用程序中main方法必须被说明为public static void。 四、变量和数据类型 1. 标识符是Java语言中的一种有效字符序列,用来标识类名、变量名、方法名、类型名、数组名、文件名。 2. Java语言规定...

    java后端初级面试题

    Java 后端初级面试题 在这篇文章中,我们将讨论 Java 后端开发中一些常见的面试题目,涵盖了 Java 基础知识、Java 面向对象编程、Java 集合框架、Java 多线程编程等方面。...本文仅供参考,未完待续...

    Java弱引用实现源码-coding-guide_i3geek:一名JAVA程序员,将自己的编程学习之路做以总结并进行分享。内容包括但不限于数

    一名JAVA程序员,将自己的编程学习之路做以总结并进行分享。内容包括但不限于数据结构、算法、数据库、操作系统、计算机网络等多方面。 博文: 目前先暂列目录,内容在逐渐增加中 JAVA 关键字 void byte int long ...

    2021-2022计算机二级等级考试试题及答案No.10055.docx

    ### 计算机二级等级考试知识点解析 #### 1. 公式的自动填充 - **知识点**: 在Excel等电子表格软件中,用户可以在一个单元格内输入公式后,通过拖动填充柄(位于单元格右下角的小方块)到相邻的单元格,... 未完待续...

    Javac测试题123456

    【Java基础知识】 1. `final`:在Java中,`final`关键字用于声明不可变的变量、方法或类。...8. 未完的代码,但看起来是尝试调用`doSomething()`,应该是`s.doSomething()`,但需要完整代码才能确定是否有其他问题。

    c#学习笔记.txt

    看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说...

    2021-2022计算机二级等级考试试题及答案No.15297.docx

    2. 主函数命名:在程序中,主函数的名字必须是 `main`,不区分大小写,即 `public static void main(String[] args)`。 3. Access 数据排序:在 Access 2003 中,要对数据表进行排序,需要使用“记录”菜单中的命令...

Global site tag (gtag.js) - Google Analytics