Java构造器的实质作用

Java构造器的实质作用

构造器的本质作用就是为对象初始化,即为实例变量初始化,赋初值; 而不是创建对象,创建对象时通过new关键字来完成的,当使用new 关键字时就会为该对象在堆内存中开辟一块内存,只等构造器来初始化这块内存,为实例变量赋初始值。在未赋初始值之前是默认值。看代码中的构造器和编译后构造器是不一样的,编译后的构造器包含了更多的内容。

非静态代码块一般是初始化实例变量的。编译后,非静态代码块中的代码会提取到构造器中,初始化实例变量的代码也提取到构造器中,他们在构造器中的排列顺序和他们在源码中的顺序一致,并且在构造器中原有代码的前面。

构造器负责初始化实例变量。

示例代码:

1package com.usoft7; 2 3/** 4 * Created with IntelliJ IDEA. 5 * User: ASUS 6 * Date: 14-3-29 7 * Time: 上午1:35 8 * To change this template use File | Settings | File Templates. 9 */ 10class User { 11    public String name; 12 13    { 14        System.out.println("非静态代码块---1"); 15    } 16 17    public int age; 18 19    User() { 20        System.out.println("User 无参构造"); 21    } 22 23    User(String name, int age) { 24        this.name = name; 25        System.out.println("name赋值完成"); 26        this.age = age; 27        System.out.println("age赋值完成"); 28        System.out.println("初始化完成----"); 29    } 30 31    { 32        System.out.println("非静态代码块---2"); 33    } 34 35    String getName() { 36        return name; 37    } 38 39    void setName(String name) { 40        this.name = name; 41    } 42 43    int getAge() { 44        return age; 45    } 46 47    void setAge(int age) { 48        this.age = age; 49    } 50} 51 52class Person { 53    public User u = new User(); 54    public User user = new User("helo", 12); 55    public String school; 56 57    Person() { 58    } 59 60    User getUser() { 61        return user; 62    } 63 64    void setUser(User user) { 65        this.user = user; 66    } 67 68    String getSchool() { 69        return school; 70    } 71 72    void setSchool(String school) { 73        this.school = school; 74    } 75} 76 77package com.usoft7; 78 79public class Test { 80    public static void main(String[] args) { 81        Person p = new Person(); 82        System.out.println("========" + p.u.getAge()); 83        System.out.println("========" + p.u.getName()); 84        System.out.println("-------------------------"); 85        System.out.println("========" + p.user.getAge()); 86        System.out.println("========" + p.user.getName()); 87    } 88}

 打印结果,

1非静态代码块---1 2非静态代码块---2 3User 无参构造 4非静态代码块---1 5非静态代码块---2 6name赋值完成 7age赋值完成 8初始化完成---- 9========0 10========null 11------------------------- 12========12 13========helo

附:javac命令使用utf-8编码

E:\test-java\hh>javac -encoding utf-8 Test.java

总结:通过此实例可以很好的了解构造器的作用,静态块和非静态块。

理解实例变量的初始化(先分配内存再赋值)

====================END====================

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java成员变量的初始化

类变量(static变量,不需要实例化对象也可以引用)实例变量(非static变量,需要实例化对象)局部变量(类的成员函数中的变量)初始化方式:构造函数初始化变量声明时初始化代码块初始化java自动初始化(在构造函数执行之前执行) java保证所有变量被使用之前都是经过初始化的(声明并且定义过,被赋值

一文了解 Java 中的构造器

一文了解Java中的构造器C引入了构造器(constructor,也叫构造函数)的概念,它是在创建对象时被自动调用的特殊方法。Java也采用了构造器,并且还提供了一个垃圾收集器(garbagecollector),当不再使用内存资源的时候,垃圾收集器会自动将其释放。构造器定义在Java中,可以通过编写构造器来确保每个对象的初始化。但是这

C++中构造函数和析构函数

构造函数定义它是一种特殊的方法。主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。另外,一个类可以有多个构造函数,我们可以根据其参数个数的不同或参数类型的不同来区分它们(这就是构造函数的重载)特点1.构造函数的命名必须和类名完全相同;2.构造函数的功能主要用于在类的对象创建时定义