Java深入学习之--初始化
2015-08-23 00:20
489 查看
目录
1、方法重载
2、默认构造器
3、this关键字
4、static关键字
5、初始化
1、方法重载
java中方法重载的意思是在同一个类中可以存在方法名相同的方法,而方法的参数类型不同,即使两个方法的参数列表完全相同但只要顺序不同也可以,方法的重载适应于构造器,与方法的返回值类型无关。而java就是根据参数列表来区分具体调用哪一个方法。
View Code
由运行结果可以观察到重复创建对象静态代码块只执行了一次,而且是在创建对象或者调用类的方法时才会执行一次,这个也是最先执行的,然后就是非静态实例的初始化了,这个每创建一次对象都会执行一次,然后就是构造器的执行了,其实可以简单的理解因为静态的成员是类公用的嘛,第一次初始化了不就保证了成员不是null嘛,后面就用不着了,但非静态实例初始化和构造器初始化都是每个对象单独的一份,当然每次用都要初始化咯。
总结一下对象的创建过程,假设有个Dog类:
1、当一次创建Dog类的对象或者调用Dog类的静态方法时,java编译器就会查看类路径,查找Dog.Class文件。
2、然后加载Dog.Class,有关静态初始化的过程就在这个时候执行,而且只执行一次,注意:所有的都会执行。
3、当用new Dog()创建对象的,就在堆上给该对象分配的存储空间。
4、然后会对该类的变量进行初始化,全部初始化成默认值,引用设为null。
5、非静态代码块的初始化操作,这时候会把相应的默认值替换掉。
6、执行构造器进行初始化,这不非静态实例、静态实例初始化的值又可能被替换掉嘛。
原文参考自Thingk in java,转载请注明原文出处:/article/5263732.html
1、方法重载
2、默认构造器
3、this关键字
4、static关键字
5、初始化
1、方法重载
java中方法重载的意思是在同一个类中可以存在方法名相同的方法,而方法的参数类型不同,即使两个方法的参数列表完全相同但只要顺序不同也可以,方法的重载适应于构造器,与方法的返回值类型无关。而java就是根据参数列表来区分具体调用哪一个方法。
class M1{ M1(int i){ System.out.println("M1(" + i + ")"); } } class M2{ static{ System.out.println("static 1"); } //new M1(1); M1 m1 = new M1(1); static{ System.out.println("static 2"); } M2(){ System.out.println("M2()"); m3 = new M1(33); } M1 m2 = new M1(2); void f(){ System.out.println("f()"); } M1 m3 = new M1(3); } public class Test2 { public static void main(String[] args) { M2 m = new M2(); m.f(); System.out.println("--------分隔线-------"); M2 m2 = new M2(); } } /* static 1 static 2 M1(1) M1(2) M1(3) M2() M1(33) f() --------分隔线------- M1(1) M1(2) M1(3) M2() M1(33) */
View Code
由运行结果可以观察到重复创建对象静态代码块只执行了一次,而且是在创建对象或者调用类的方法时才会执行一次,这个也是最先执行的,然后就是非静态实例的初始化了,这个每创建一次对象都会执行一次,然后就是构造器的执行了,其实可以简单的理解因为静态的成员是类公用的嘛,第一次初始化了不就保证了成员不是null嘛,后面就用不着了,但非静态实例初始化和构造器初始化都是每个对象单独的一份,当然每次用都要初始化咯。
总结一下对象的创建过程,假设有个Dog类:
1、当一次创建Dog类的对象或者调用Dog类的静态方法时,java编译器就会查看类路径,查找Dog.Class文件。
2、然后加载Dog.Class,有关静态初始化的过程就在这个时候执行,而且只执行一次,注意:所有的都会执行。
3、当用new Dog()创建对象的,就在堆上给该对象分配的存储空间。
4、然后会对该类的变量进行初始化,全部初始化成默认值,引用设为null。
5、非静态代码块的初始化操作,这时候会把相应的默认值替换掉。
6、执行构造器进行初始化,这不非静态实例、静态实例初始化的值又可能被替换掉嘛。
原文参考自Thingk in java,转载请注明原文出处:/article/5263732.html
相关文章推荐
- for(int a:i)在java 编程中的使用
- 从Eclipse转移到IntelliJ IDEA一点心得
- 关于javaSE面向对象的一些小知识
- struts2的优点
- 搭建struts2的开发环境
- java线程中join方法原理,以及守护线程的使用
- 解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法
- 在Controller中通过非注解的方式获取spring和springMVC上下文的方式
- 从Eclipse转移到IntelliJ IDEA一点心得
- eclipse mars4.5安装hibernate开发环境
- Spring架构简单描述
- Eclipse中Maven添加web项目
- Java源码分析之ArrayList
- 【java】itoo项目实战之EJB中的RMI框架
- java-多线程2
- 我是菜鸟:深入java容器内部
- java导出excel java操作文件、文件夹 java制作zip
- LintCode 岛屿的个数
- Java关键字(基础学习用到)
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记