Java基础2面向对象:透析类的加载与初始化 对象的初始化 zongjihengfei
2016-09-17 16:19
204 查看
1.类的加载
什么时候加载类?
编译期,从自动加载java.lang.*到你import的东西
再就是在代码中找出 自定义类名 加载
加载类的过程? ——只是相当于把这些东西的代码引进一个类
静态变量 ——-> 方法区静态区域
非静态方法 ——-> 方法区非静态区域
静态方法 ——–> 方法区静态区域(需要创建对象调用)
普通初始化块 ——>方法区非静态区域
静态初始化块 ——->方法区静态区域
2.类的初始化
什么时候开始类的初始化?
但凡 “初始化” 都是运行期间开始的
类的初始化干了什么?
3.对象的初始化
什么时候开始?
调用构造器初始化,运行期间才能干这事
干了什么?
默认初始化 –>显示初始化 –> 初始化块初始化 –>构造器初始化
1.输出顺序
2.创建Zi()
Fu静态初始化块 Zi静态初始化块 Fu普通初始化块 Fu构造器 Zi普通初始化块 Zi构造器
如果类A中A型变量a什么时候初始化?
d=new Demo()是在初始化完类后进行的,因为其本身是初始化对象,所以所有方法均可以调用
牛刀小试
结果
1
2
3
a=110,b=112
4
什么时候加载类?
编译期,从自动加载java.lang.*到你import的东西
再就是在代码中找出 自定义类名 加载
加载类的过程? ——只是相当于把这些东西的代码引进一个类
静态变量 ——-> 方法区静态区域
非静态方法 ——-> 方法区非静态区域
静态方法 ——–> 方法区静态区域(需要创建对象调用)
普通初始化块 ——>方法区非静态区域
静态初始化块 ——->方法区静态区域
2.类的初始化
什么时候开始类的初始化?
但凡 “初始化” 都是运行期间开始的
类的初始化干了什么?
静态的东西允许使用了: 立即使用静态初始化块一次
3.对象的初始化
什么时候开始?
调用构造器初始化,运行期间才能干这事
干了什么?
默认初始化 –>显示初始化 –> 初始化块初始化 –>构造器初始化
1.输出顺序
class Fu{ Fu(){ System.out.println("new Fu");// 2 } public class Inner{ public Inner(){ System.out.println("Fu.Inner()");//1 4 } public void f(){ System.out.println("Fu.f()"); } } Inner in=new Inner(); public void getInner(Inner in){ this.in=in; } } public class Zi extends Fu{ Zi(){ System.out.println("new Zi");//3 getInner(new Inner()); } public class Inner extends Fu.Inner{ public Inner(){ System.out.println("Zi.Inner()");//5 } public void f(){ System.out.println("Zi.f()"); } } public static void main(String[] args) { Fu f=new Zi(); } }
2.创建Zi()
Fu静态初始化块 Zi静态初始化块 Fu普通初始化块 Fu构造器 Zi普通初始化块 Zi构造器
如果类A中A型变量a什么时候初始化?
public class Demo { static Demo d = new Demo(); int a=3; Demo() { System.out.println("这个d已经被初始化了!"); this.printDemo(); System.out.println(a); } public void printDemo(){ System.out.println("这个方法在初始化类时候调用成功了!"); } static{ // Demo t4 = new Demo(); } public static void main(String[] args) { } }
d=new Demo()是在初始化完类后进行的,因为其本身是初始化对象,所以所有方法均可以调用
牛刀小试
public class Main21 { static{ System.out.println("1"); } { System.out.println("2"); } int a=110; static int b=112; static Main21 ma=new Main21(); Main21(){ System.out.println("3");System.out.println("a="+a+",b="+b); } static void f(){ System.out.println("4"); } public static void main(String[] args) { f(); } }
结果
1
2
3
a=110,b=112
4
相关文章推荐
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- Java基础重温(四)对象初始化加载
- 黑马程序员——Java基础---面向对象(对象的初始化、对象调用成员、单例设计模式)(4)
- Java基础知识之对象初始化过程
- Java基础 构造对象初始化变量的顺序浅见
- JAVA(一)JAVA基础/面向对象基础/高级面向对象
- Java基础巩固:类和对象的初始化顺序
- 黑马程序员_Java基础_面向对象(概述、类与对象关系、成员变量、封装private、构造函数和构造代码块、this关键字)
- Java基础温习 (5)Java类和对象的初始化顺序
- Java基础06:Static;单例设计模式;对象初始化;构造函数;
- Java基础之面向对象(一)--特性、类和对象关系、this、private
- 黑马程序员 java基础复习三之对象初始化,多态和异常等
- java基础---->对象的创建过程(初始化、析构、清理)
- java面向对象12讲 基础一 什么是面向对象
- java基础-面向对象、类与对象的定义
- java学习13-面向对象(final和对象初始化过程)
- Java的Class对象的加载和初始化
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- 黑马程序员_Java基础[7]_面向对象、类、对象、匿名对象
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类