`
pclfs1983
  • 浏览: 41271 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java解惑–学习总结二

阅读更多
1.静态方法

public class Test {

   public static void main(String[] args) { 

            Super woofer=new Super();

            Super nipper=new Sub();

            Sub c = new Sub();

            woofer.bark();

            nipper.bark();

            c.bark();

    }

}

class Super { 

    public static void bark(){

       System.out.println(”bark”);

    }

}

class Sub extends Super { 

   public static void bark(){

            System.out.println(”cc”);

    } 

}

结果是:bark  bark  cc

原因是:对静态方法的调用不存在任何动态的分派机制。当一个程序调用了一个静态方法时,要被调用的方法都是在编译时刻被选定的,而这种选定是基于修饰符的编译期类型而做出的,修饰符的编译期类型就是我们给出的方法调用表达式中等号左边部分的名称。

2.类初始化顺序

public class Test1 {

    public static int k=0;

    public static Test1 t1=new Test1(”t1″);

    public static Test1 t2=new Test1(”t2″);

    public static int i=print(”i”);

    public static int n=99;

    public int j=print(”j”);

    {

        print(”构造块”);

    }

  

    static{

        print(”静态块”);

    }



    public Test1(String str){

  System.out.println((++k)+”:”+str+”    i=”+i+”    n=”+n);

        ++i;++n;

    }

  

    public static int print(String str){

        System.out.println((++k)+”:”+str+”    i=”+i+”    n=”+n);

        ++n;

        return ++i;

    }

    public static void main(String…strings ){

        Test1 t=new Test1(“init”);

    }

}

输出结果:

1:j    i=0    n=0

2:构造块    i=1    n=1

3:t1    i=2    n=2

4:j    i=3    n=3

5:构造块    i=4    n=4

6:t2    i=5    n=5

7:i    i=6    n=6

8:静态块    i=7    n=99

9:j    i=8    n=100

10:构造块    i=9    n=101

11:init    i=10    n=102

注:类的初始化顺序是(静态变量、静态初始化块)>(变量、初始化块)>构造器。但是当这个类中存在这个类的静态类实例对象的时候(比如: static Test1 t1=new Test1(”t1″)),则这个对象初始化时会先初始化非静态的成员,然后调用构造函数。一个实例对象初始化一次成员变量,而类变量只初始化一次。如果是父子都存在静态变量和变量,则初始化的顺序是: 子类的静态变量和静态初始化块的初始化是在父类的变量、初始化块和构造器初始化之前就完成.

分享到:
评论

相关推荐

    Java解惑(中文版)_java_java解惑_solve65p_

    《Java解惑(中文版)》是一本专为Java初学者设计的学习资料,旨在帮助读者解答在学习Java过程中遇到的各种困惑。"solve65p"可能代表这本书包含65个问题或主题,每个都深入浅出地进行了讲解,旨在解决初学者在编程...

    java 解惑 java 解惑 java 解惑

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    Java学习利器-JAVA解惑

    然而,学习Java的过程中,初学者或经验丰富的开发者都可能会遇到一些棘手的问题,这就是"Java学习利器-JAVA解惑"想要解决的问题。 这份名为"JAVA解惑"的PDF文档,可能是由一位经验丰富的Java开发者或者教育者编写的...

    JAVA 解惑 java经典

    "JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...

    Java解惑 中文版

    《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...

    Java PUZZLE Java 解惑

    Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑

    Java解惑.pdf

    Java编程语言是世界上最流行的开发平台之一,广泛应用于企业级应用、...通过深入学习和理解这些Java知识点,并结合"Java解惑.pdf"文档中的实例和解决方案,开发者可以更好地解决实际开发中遇到的问题,提升编程技能。

    java解惑 PDF版

    文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...

    "java解惑" PDF版本

    "java解惑" PDF版本

    Java解惑 布洛克 著;陈昊鹏 译

    《Java解惑》 布洛克 著;陈昊鹏 译 扫描清晰带目录,仅供参阅,请支持正版

    JAVA解惑.pdf

    《JAVA解惑》这本书主要针对...以上是《JAVA解惑》一书中可能涉及的部分知识点,每一点都值得深入学习和实践。通过掌握这些内容,开发者可以更好地解决Java编程中的各种问题,提升编程技能,写出更高效、更可靠的代码。

    4,JAVA解惑 高清PDF 下载

    《JAVA解惑》是Java开发者领域的一本经典著作,它被广大编程爱好者称为Java四大名著之一,旨在解决初学者及有一定经验的开发者在学习和使用Java过程中遇到的各种困惑。这本书深入浅出地讲解了Java语言的核心概念和...

    java解惑(包括pdf和答案)

    Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和丰富的类库而闻名。...在学习过程中,不断实践和总结是掌握任何编程语言的关键,"java解惑"提供的资源无疑是这样的一个实践和学习的优秀工具。

    java解惑 for all javaer

    讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。

    java解惑java解惑java解惑

    "Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...

    java 解惑

    2. **Oracle存储过程总结.doc**:Oracle数据库的存储过程是Java开发者经常打交道的数据存储技术。文档可能包含了存储过程的创建、调用、优化等方面的总结,对于使用Java进行数据库操作的开发者来说是宝贵的参考资料...

    JAVA解惑(JAVA谜题) 中文版(PDF)

    ### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...

Global site tag (gtag.js) - Google Analytics