`
美丽的小岛
  • 浏览: 297558 次
  • 性别: 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基础课程讲义

    static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? 70 继承介绍 70...

    《Java程序设计案例教程》教学课件02Java语言基础.pptx

    2.1 回顾与思考 【例2-1】编写一个Java应用程序,根据所给圆的半径,计算并输出圆的周长。文件名为Example2_1.java,其代码如下。 《Java程序设计案例教程》教学课件02Java语言基础全文共48页,当前为第4页。 2.1 ...

    小学三年级语文课程开发-Java设计练习作文方案代码.docx

    本课程旨在帮助小学三年级学生提高写作能力,通过Java设计练习作文方案代码的方式,让学生在编程中学会思考和表达。 ## 课程目标 - 学习基本的Java语法和编程思想 - 掌握作文的基本要素:主题、结构、内容、语言和...

    Demo02Method.java

    黑马课程,自学代码及思考 /* 方法:就是将一个功能抽取出来,把代码单独定义在一个大括号里,形参一个单独的功能。 格式: public static void 方法名() { 方法体 } public static是修饰符表示公共的静态 void...

    ThinkInJava:在 Java 中思考示例笔记

    思考Java 在 Java 笔记中思考示例。 Java 语言的重要例子。内容 01 - this - statement // how to use "this" in class02 - method - overloading // same method name in same class. Method overloading.03 - ...

    java项目_吃豆豆_源码及文档

    安排本练习的主要目的理解面向对象、能够用面向对象的思路去思考问题,结合Swing和现成的知识完成本项目。 二、 实现要求 使用面向对象的方式,完成本项目。 三、 实现技术 a) 熟练使用if、for等语句进行逻辑操作。 ...

    java认证所有课程

    为了确定可以获取关于某类事件的哪些细节时,你应当查看java.awt.event包中合适的类文档。 9.5.3 多监听者 AWT事件监听框架事实上允许同一个组件带有多个监听者。一般地,如果你想写一个程序,它基于一个事件而...

    跟我学Java面向对象程序设计技术及应用——Java中的面向对象技术(第1部分).pdf

    【课前思考】 1) 什么是对象?什么是类? 2) 面向对象编程的四个基本机制是什么? 3) 你知道 java 语言在面向对象编程方面有何独特的特点吗? 1.1.1 面向对象技术基础 1、面向对象(OO)的基本概念 (1)面向对象的...

    把Java数组转换为List时的注意事项

    当然,我们可以使用Arrays.toList方法,但是如果没有慎重思考随便使用几乎肯定会产生令人讨厌的意外。考虑完下面这段程序并预测其输出你明白我的意思了: package com.wordpress.mlangc.arrays; import java.util....

    面向对象程序设计与实践-Java抽象类和接口[33页].pptx

    5-1案例分析 交流与讨论 结合案例分析,思考一下几个问题: 开发人员——静态属性为姓名、工号、薪水,动态行为为工作 项目经理——静态属性为姓名、工号、薪水,奖金;行为为工作 地区经理——静态属性为姓名、工号...

    动物招领所源码

    static属性,static方法,static块 final属性,final方法,final类 三.面向对象的思考方式 将世界看成一个个对象,对象之间可以分类(包),可以相互有继承。面向对象推荐面向接口进行编程,面向接口的核心思想是抽象(只...

    动物招领所系统

    动物有许多种类别,但是都有一些公有的特征。 系统启动后,动物保护者可以随机发现动物(动物的种类可能不一样),加入动物园,由动物管理员进行照顾。招领所定期的将动物随机的交给领养者领养,领养后动物园动物减少。...

    Head First设计模式光盘

    解决问题的过程中又会产生一些新的问题,再继续思考、继续解决问题,这样可以加深体会。作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店,书中搭配大量的插图(几乎每一页都有图),...

    xmljava系统源码-tomcat-work:tomcat工作原理

    只能算是跟着代码走了一遍,基本上没思考,这次打算把代码再看看,看能不能多悟出点东西。 有一点需要声明,《深入剖析tomcat》是以tomcat4为样本进行分析的,版本老了一点,但大体的设计思想并不会有太大的变化。 ...

    Head First设计模式.pdf

    解决问题的过程中又会产生一些新的问题,再继续思考、继续解决问题,这样可以加深体会。作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店,书中搭配大量的插图(几乎每一页都有图),...

    深入浅出设计模式-中文高清完整版

    解决问题的过程中又会产生一些新的问题,再继续思考、继续解决问题,这样可以加深体会。作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店,书中搭配大量的插图(几乎每一页都有图),...

Global site tag (gtag.js) - Google Analytics