Java类初始化


成员变量的初始化和构造器

  • 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值
    1. 对于  char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false)
    2. 对于引用类型的变量,会默认初始化为null
  • 如果类内没有显示的定义构造器,则编译器会自动创建一个无参构造器,但是如果类内显示定义了构造器,则编译器不会再自动创建无参构造器

类初始化的顺序

  • 当程序需要生成一个类对象时,Java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象,如果已经加载,则直接生成对象
  • 在类的加载过程中,类的static成员变量会被初始化,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次
public class Main {

    /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person();
Person p2 = new Person();
} }
class Person {
static{
System.out.println("Person");
}
public Person(){
System.out.println("It is a person");
}
} //输出
Person
It is a person
It is a person
  • 在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。即类中的变量会在任何方法(包括构造器)调用之前得到初始化
public class Main {

    /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p = new Person();
} }
class Person {
private Pet p = new Pet();
public Person(){
System.out.println("It is a person");
}
}
class Pet {
public Pet(){
System.out.println("The person's pet");
}
} //输出
The person's pet
It is a person

Java类初始化的更多相关文章

  1. Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序

    静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public H ...

  2. 【知识总结】Java类初始化顺序说明

    微信公众号:努力编程的小猪如有问题或建议,请公众号留言 Java类初始化顺序说明 一个类中包含如下几类东西,他们前后是有顺序关系的 静态属性:static 开头定义的属性 静态方法块: static ...

  3. [读书笔记] java类初始化

    以下内容来自周志明的<深入理解java虚拟机>: 类初始化阶段是类加载过程的最后一步,前面的类加载过程中,除了在加载阶段用户应用程序可以通过自定义类加载器参与之外,其余动作完全由虚拟机主导 ...

  4. Android(java)学习笔记136:Java类初始化顺序

    Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: 静态变量 静态初始化块 变量 初始化块 构造器 由此得出Java继承类初始化顺序结论:     1 .继承体系的所有静态成员初始化( ...

  5. 转!!关于java类初始化顺序

    原文地址:http://www.cnblogs.com/luckygxf/p/4796955.html 1.没有继承 静态变量->静态初始化块->变量->变量初始化块->构造方 ...

  6. Android(java)学习笔记78:Java类初始化顺序

    1. Java类中初试化的顺序: 由此得出Java普通类初始化顺序结论: (1)静态变量 (2)静态初始化块 (3)变量 (4)初始化块 (5)构造器 由此得出Java继承类初始化顺序结论: (1)继 ...

  7. Java类初始化执行流程

    测试代码: package com.test.ClassLaoderTest; public class test1 { public static String s_variable = " ...

  8. java类初始化顺序

    一.概述 了解类的初始化顺序,可以更灵活.方便的构造一个类. 二.类初始化顺序 2.1 示例 public class InitialOrderTest { public static void ma ...

  9. java类初始化,使用构造方法

    public class test { /** * java类的初步学习: *   学会使用和类名相同的两种构造方法,对公共类方法的调用: */ public static void main(Str ...

随机推荐

  1. call和bind改变的上下文环境

    这周自我学习的时间很宽裕.正巧一直对call和apply不甚理解(虽然bind还经常用到,仅仅是知道这么用有这个效果= =,而不知为何有这个效果),下午就自己写写demo,帮助自己理解. functi ...

  2. Raid 介绍以及软raid的实现

    RAID: old Redundant Arrays of Inexpensive Disks (廉价磁盘冗余阵列) new Redundant Arrays of Independent Disks ...

  3. js中的caller和callee属性

    caller返回一个对函数的引用,该函数调用了当前函数. functionName.caller functionName 对象是所执行函数的名称. 说明对于函数来说,caller 属性只有在函数执行 ...

  4. PHP基础知识之常量

    定义: define("FOO",     "something");

  5. radio相关

    radio 按钮组, name=”sex”. <input type="radio" name="sex" value="Male"& ...

  6. XML数据的解析

    XML数据的解析 相比于JSON数据解析而言,XML数据解析可能会让更多的童鞋感觉到吃力,对我来说,同样认为JSON数据好像让人感觉比较友好,不过对于程序开发者来说,无非就是这两种数据解析占比较大的部 ...

  7. C#_技巧:真伪随机数

    使用 Random 产生随机数.(这是一种伪随机数,需要seed,同一个seed后,采用某种算法产生的数字序列都是一样的) 两种写法 错误 for(int i=0;i<100;i++) {    ...

  8. 基于Deep Learning 的视频识别方法概览

    深度学习在最近十来年特别火,几乎是带动AI浪潮的最大贡献者.互联网视频在最近几年也特别火,短视频.视频直播等各种新型UGC模式牢牢抓住了用户的消费心里,成为互联网吸金的又一利器.当这两个火碰在一起,会 ...

  9. WebForms VS. MVC(翻译)

    (本文翻译自CodeProject上阿三写的一篇文章,原文地址:http://www.codeproject.com/Articles/528117/WebForms-vs-MVC,讲了有关ASP.A ...

  10. Functional Programming without Lambda - Part 1 Functional Composition

    Functions in Java Prior to the introduction of Lambda Expressions feature in version 8, Java had lon ...