`
美丽的小岛
  • 浏览: 308153 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

关于static的一些思考(java)

    博客分类:
  • java
 
阅读更多

     当有时候回忆JAVA的基础的时候,有些东西一下子会变得十分的模糊,不是很清楚一个JAVA类从硬盘中怎么到内存,内存后又是怎样就得执行了。

      今天理了一下思路:一个类经过加载,连接(检查、准备、解析),初始化。初始化后这个类就可以随便被使用了。使用也就是可以调用它的静态方法,创建它的实例。

     不过,这里想思考一下初始化点,什么情况会被初始化,什么时候不会被初始化。

     一般来讲,一个类被首次使用的时候会初始化,首次使用有6种情况(创建新例,调用类中声明的静态方法,操作类或接口中声明中声明的非常量静态字段,调用API中的特定反射方法,初始化一个类的子类,指定一个类作为java虚拟机启动的初始方法)。

     看一个有不是首次使用的例子(读一读,看看输出是怎样的?):

interface tested{
	String greeting = "tested" ;
	int a = T.show() ;
}
class P implements tested{
	static{
		System.out.println("p's static") ;
	}
}

class T{
	static int i  = 999 ;
	static final String greeting = "TTTTTTTT" ;
	static{
		System.out.println("T's static") ;
         }
	static int show(){
	 	System.out.println("show method") ;
		return 1 ;
         }
}

class Tson extends T{
	static{
		System.out.println("Tson's static") ;	
	}
}
public class Test{
	static{
		System.out.println("Test's static") ;
	}
	public static void main(String arg[]){
		System.out.println(tested.greeting) ;
		System.out.println(T.greeting) ;
		System.out.println(P.greeting) ;
		System.out.println(Tson.greeting) ;
		System.out.println(Tson.i) ;
}
}

输出结果为:

 

  • 大小: 6.9 KB
0
3
分享到:
评论
2 楼 美丽的小岛 2012-10-07  
w156445045 写道
问下博主 为什么调用
System.out.println(T.greeting) ; 

T.greeting的时候,
class T{  
12.    static int i  = 999 ;  
13.    static final String greeting = "TTTTTTTT" ;  
14.    static{  
15.        System.out.println("T's static") ;  
16.         }  
17.    static int show(){  
18.        System.out.println("show method") ;  
19.        return 1 ;  
20.         }  
21.}  

为什么不初始化
static {
          syso("T's static");
}
呢?同理:System.out.println(Tson.greeting); 谢谢。

因为这里的greeting为常量静态字段,调用的时候类不会被初始化的。后面那个是一个子类调用父类的常量静态字段,也不会被初始化的。初始化是在首次调用的时候会被初始化(前面的6种情况),其它的情况不会。
1 楼 w156445045 2012-10-06  
问下博主 为什么调用
System.out.println(T.greeting) ; 

T.greeting的时候,
class T{  
12.    static int i  = 999 ;  
13.    static final String greeting = "TTTTTTTT" ;  
14.    static{  
15.        System.out.println("T's static") ;  
16.         }  
17.    static int show(){  
18.        System.out.println("show method") ;  
19.        return 1 ;  
20.         }  
21.}  

为什么不初始化
static {
          syso("T's static");
}
呢?同理:System.out.println(Tson.greeting); 谢谢。

相关推荐

    java 编程入门思考

    引言 1. 前提 2. Java的学习 3. 目标 4. 联机文档 5. 章节 6. 练习 7. 多媒体CD-ROM 8. 源代码 9. 编码样式 10. Java版本 ...1.11 Java和因特网 ...1.13 Java还是C++?...附录E 关于垃圾收集的一些话 附录F 推荐读物

    java基础知识思考题+答案(个人整理)

    ### Java基础知识思考题详解 #### 1. 缩写JDK的含义是什么? JDK,全称Java Development Kit,即Java开发工具包。它是Java软件开发的基础,包含了编写、编译和运行Java程序所需的所有工具。JDK不仅包括Java编译器...

    java程序练习及思考题

    ### Java程序练习及思考题知识点解析 #### 练习题概览 本套Java程序练习题旨在帮助学习者提升Java编程技巧与逻辑思维能力。题目覆盖了基础算法、字符串处理、数学运算等多个方面,适用于初学者及进阶学习者。 ####...

    Java复习---思考题

    Java 复习资料中的思考题涵盖了Java的基础知识,包括JDK的含义、Java跨平台技术、垃圾收集机制、J2SE、J2ME、J2EE的区别、包的作用、J2SE类库的主要包以及Java编程规范和程序结构。下面将详细解答这些知识点。 1. ...

    《Java程序设计》上机实验.doc

    在每个实验中,思考和验证部分鼓励学生探索Java语言的更多特性,例如循环结构的灵活性,输入/输出的处理,以及如何优化代码以适应不同需求。通过这些实验,学生将全面了解Java程序设计的基础和实践,为后续的高级...

    对Java的思考(Thinking in Java) Java入门 java与C++对比 深入浅出

    此外,本章还介绍了类的定义,包括字段和方法,以及构建Java程序的基本步骤,如命名规则、可见性和使用static关键字。 第3章"控制程序流程"详细阐述了Java中的控制结构,包括各种运算符的用法,如赋值、比较、逻辑...

    java编程题目 有答案

    对于Java编程题目,一些常见的知识点可能包括但不限于以下几个方面: 1. 基本语法:这是编程的基础,涉及到变量声明、运算符使用、控制流程(如if-else语句、循环等)。 2. 类和对象:Java是面向对象的编程语言,...

    java开发实习周记12篇.doc

    java开发实习周记12篇是关于java开发实习的周记文章,共有12篇文章,从实习第一周到实习第十二周,每篇文章都记录了实习生的实习经历和java开发知识点。下面是每篇文章的知识点总结: 实习第一周 了解公司背景、...

    《Java语言程序设计(一)》课后习题答案(课程编号04747)

    根据上下文判断,这里可能列出了一些具体的数值,要求判断它们属于哪种类型: - 整型常量:10、-20、077、0x1F - 浮点型常量:10.5、-3.14f - 其他:不属于整型也不属于浮点型的,可能是字符串或非法表示。 ### ...

    Java实习周报通用25篇

    这一阶段,他们熟悉了工作环境和Java编程的环境配置,强调了“多看、多问、多观察、多思考”的学习态度。 第二周,实习生专注于Java的基础语法学习,如类之间的关系(关联、聚合、继承、实现和多态),基本数据类型...

    java与模式的思考

    【Java与模式的思考】 Java设计模式是一种在特定场景下解决软件设计问题的模板,它提供了在编程中遇到常见问题的可复用解决方案。这里主要讨论三种创建模式:简单工厂模式、工厂方法模式和抽象工厂模式,它们都属于...

    java实习周记.docx

    在第二周实习中,作者主要学习了java的基础语法,包括类之间的关系、基本数据类型、常用逻辑语句和循环语句、修饰符、Static关键字、Final关键字、This关键字、string和stringBuffer等。作者总结了学习的要点,包括...

    java设计模式之单例模式.zip

    视频文件的命名似乎按照理解的深入程度来组织,从“初识”到“继续理解”再到“思考”。这些视频可能涵盖了单例模式的基本概念、实现方式、优缺点、适用场景以及可能遇到的问题,如序列化时如何保持单例、如何在多...

    java中文转拼音

    #### 进一步思考 1. **性能优化**:对于大规模的数据集,可以通过缓存或其他技术手段进一步提高转换效率。 2. **多音字处理**:中文中存在多音字现象,如何准确地识别并处理多音字是实现高质量拼音转换的关键之一。...

    简单的JAVA四则运算

    #### 六、扩展思考 - **性能优化**:可以通过更高效的数据结构(如栈)来优化括号匹配过程。 - **异常处理**:增加对除数为零等异常情况的处理机制。 - **用户交互**:改善用户输入的提示信息,提高用户体验。 - **...

    java程序的编译及运行实验说明

    Java 程序的编译及运行实验... public static void main(String[] args) throws java.io.IOException { // ... } } ``` 这个实验程序使用继承系统类 Thread 实现多线程,每个线程分别完成 1~100 个自然数的求和工作。

    Java理论与实践再研究.pdf

    Java类的高级特性章节进一步加深了对类的理解,包括继承、方法覆盖和重载、多态、Static和Final修饰符的作用、内部类以及Java内存分配的知识。这些高级特性是编写高效和可复用Java程序的关键。 数据结构和枚举是...

    Java基础思考之数据传递Java系列2021.pdf

    在Java编程语言中,数据传递主要分为两种方式:按值传递(Pass by Value)和按引用传递(Pass by Reference)。这两种方式的理解对于深入理解Java对象和方法调用机制至关重要。 首先,我们要明确一点,Java中所有的...

Global site tag (gtag.js) - Google Analytics