重载、初始化块、this、默认构造函数

import java.util.*;
/*
类加载顺序:首先执行静态字段和静态代码块,然后执行实例字段和普通代码块,然后执行构造函数。
*/
public class Sample
{
    public static void main(String[] args)
    {
        Employee[] staff = new Employee[3];
        staff[0] = new Employee("Harry",40000);
        staff[1] = new Employee(60000);
        staff[2] = new Employee();
        for(Employee item : staff)
        {
            System.out.println("name="+item.getName()+",id="+item.getId()+",salary="+item.getSalary());
        }
    }
}
class Employee
{
    public Employee(String n,double s)
    {
        this.name = n;
        this.salary = s;
    }
    public Employee(double s)
    {
        this("Employee #"+nextId,s);//必须是第一行,否则编译错误,不能与super一起。
    }
    public Employee()
    {
        //如果一个类没有自己定义构造函数,那么系统就会自己的提供一个默认的构造函数。
    }
    public String getName()
    {
        return name;
    }
    public double getSalary()
    {
        return salary;
    }
    public int getId()
    {
        return id;
    }
    private static int nextId;
    private int id;
    private String name = "";
    private double salary;

    {
        //代码块
        id = nextId;
        nextId++;
    }
    static
    {
        //静态代码块
        Random generator = new Random();
        nextId = generator.nextInt(10000);
    }
}

重载、初始化块、this、默认构造函数

时间: 2024-10-14 21:16:54

重载、初始化块、this、默认构造函数的相关文章

Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

随笔- 40  文章- 0  评论- 1 Java的初始化块.静态初始化块.构造函数的执行顺序及用途探究 Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, C三个类用作测试,其中B继承了A,C又继承了B,并分别给它们加上静态初始化块.非静态初始化块和构造函数,里面都是一句简单的输出. 主类Main里面也如法炮制. 1 class A { 2 st

Java:初始化块、静态初始化块、构造方法的执行顺序

1. 静态初始化块 静态初始化块只在类首次加载时执行一次,同时静态初始化块只能给静态变量赋值,不能给普通成员变量赋值. 2. (非静态)初始化块 (非静态)初始化块在每次生成实例对象时都执行一次,可以给任意变量赋值. 3. 构造方法 构造方法在每次生成实例对象时都执行一次 4. 执行顺序:静态初始化块 --> 初始化块 --> 构造方法 测试代码如下: 1 public class Son extends Father { 2 static int sNum = 0; 3 int num =

static之静态初始化块

static之静态初始化块 所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是:    父类的静态初始化块    子类的静态初始化块    父类的初始化块    父类的构造函数    子类的初始化块    子类的构造函数      也就是说程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法.由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块. 比如下面的代码: 运行结果: 需要特别注意:1)静态初

【C/C++】构造函数、默认构造函数、成员初始化列表

常见问题 Q1. 下列关于构造函数的描述中,错误的是( ) A. 构造函数可以设置默认的参数 B. 构造函数在定义类对象时自动执行 C. 构造函数可以是内联函数 D. 构造函数不可以重载 Q2. 下列代码中a.b的各个成员变量值是多少? 1 class Student 2 { 3 public: 4 Student() {} 5 void show(); 6 private: 7 string name; 8 int number; 9 int score; 10 }; 11 Student a

java学习之静态块、显示初始化块、构造函数、this在构造函数中的调用,区别联系与调用顺序

1.静态代码块---给类初始化,随着类的加载而执行,只执行一次(注:仅创建类的引用(即只申明)并不会触动对该类的加载) /** * 静态代码块 * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化 */ static{ System.out.println("a"); } 2.(显示初始化块)构造代码块---给对象初始化, /** * 构造代码块 * 作用:给对象进行初始化 * 对象一建立就运行,而且优先于构造函数执行 * * 和构造函数的区别 * 构造代码块是给所有对象进行统

关于初始化块与构造函数的关系

public class A{ public static int nextID; public static int ID; public String name ; { ID = nextID; nextID++; } public a(){ this.name = ""; } public a(String name){ this.name = name; } } 当我们用构造方法构造对象的时候,比如员工,不管调用哪个构造方法,每new一个对象出来就会自动的给这个员工分配一个ID

Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)

本文链接    http://blog.csdn.net/xiaodongrush/article/details/29170099 参考文章     http://my.oschina.net/leoson/blog/103251 1. 一个类中的初始化顺序 (静态变量.静态初始化块)=>(变量.初始化块.构造器). 2. 两个具有继承关系类的初始化顺序 父类的(静态变量.静态初始化块)=> 子类的(静态变量.静态初始化块)=> 父类的(变量.初始化块.构造器)=> 子类的(变量

初始化数组/容器时,调用默认构造函数还是复制构造函数

当使用数组或容器时,通常会预先分配一定容量.在分配的大小中,都会初始化容器的对象,在初始化第一个时,毫无疑问调用的是默认构造函数,但是当初始化第二个到最后一个时,应该怎么做? 很显然,数组/容器的对象都一模一样,一种方法是:开辟内存,然后在开辟的内存处调用默认构造函数:另一种方法是:开辟内存,构造一个对象,把对象拷贝n份到开辟的内存处(调用复制构造函数).从效率上来说,我认为第二种效率更高,因为调用默认构造的消耗一般大于调用复制构造函数.复制构造函数常常是浅拷贝,这样效率很高. 写代码测试一下,

C++结构体:默认构造函数,复制构造函数,重载=运算符

做leetcode的时候经常看到有结构体的默认构造函数,觉得很奇怪,才发现原来c++的结构体与c语言的结构体不一样,c++的结构体更像是一个类, C++结构体提供了比C结构体更多的功能,如默认构造函数,复制构造函数,运算符重载,这些功能使得结构体对象能够方便的传值. 比如,我定义一个简单的结构体,然后将其作为vector元素类型,要使用的话,就需要实现上述三个函数,否则就只能用指针了. 转:http://blog.csdn.net/fu_zk/article/details/10539705 #