自在如风

构造函数(构造方法、构造器)

java构造函数,也叫构造方法,是java中一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值
小细节:

  • 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。这个默认的构造函数的权限和所属类一致。
  • 子类的构造函数默认第一行有一条隐式的语句 super(),用于访问父类中空参数的构造函数。
  • 当在类中自定义了构造函数后,默认的构造函数就没有了。
  • 一个对象建立,构造函数只运行一次。
  • 构造函数名必须与类同名,没有返回值。
public class A{  
   public A(){  
      System.out.println("调用了无参的构造函数");  
   }  
   public A(String mess){  
      System.out.println("调用了有参的构造函数 \n" + "参数内容为:"+ mess);   
 }  

构造代码块

对象一建立就运行,而且优先于构造函数执行。作用是给对象进行初始化。

  • 构造代码块是给所有对象进行统一初始化,
  • 构造代码块中定义的是不同对象共性的初始化内容。

/*
对象一建立就会调用与之对应的构造函数。

构造函数的作用:可以用于给对象进行初始化。

构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。

当在类中自定义了构造函数后,默认的构造函数就没有了。


构造函数和一般函数在写法上有不同。

在运行上也有不同。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,给是对象添加对象具备的功能。

一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。

什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。


*/
class Person {
    private String name;
    private int age;
    {
        System.out.println("person code run");//对象一被调用就运行
    }

    Person() {
        System.out.println("A: name = " + name + ",age =" + age);
    }

    Person(String n) {
        name = n;
        System.out.println("B: name = " + name + ", age =" + age);
    }

    Person(String n, int a) {
        name = n;
        age = a;
        System.out.println("C: name =" + name + ", age =" + age);
    }
}

class PersonDemo2 {
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person("lisi", 5);
    }
}

运行结果
person code run
A: name = null,age =0
person code run
C: name =lisi, age =5

静态代码块

随着类的加载而执行,只执行一次,并优先于主函数。用于给类进行初始化的。

/*
格式:
static{
	静态代码块中的执行语句。
}
*/
class StaticCode {
    //静态代码块
    static {
        System.out.println("c");
    }
    //构造代码块
    {
        System.out.println("d");
    }
    //无参数构造函数
    StaticCode() {
        System.out.println("f");
    }
    //有参数构造函数
    StaticCode(int x) {
        System.out.println("e");
    }
}

class StaticCodeDemo {
    static {
        System.out.println("a");
    }
    public static void main(String[] args) {
        new StaticCode(4);
    }
    static {
        System.out.println("b");
    }
}

主函数中静态代码块——StaticCode中静态代码块——StaticCode中构造代码块——StaticCode中构造函数

运行结果:
a
b
c
d
e

posted @ 2020-03-30 20:00  我是痕  阅读(137)  评论(0编辑  收藏  举报