Java构造器的实质作用
构造器的本质作用就是为对象初始化,即为实例变量初始化,赋初值; 而不是创建对象,创建对象时通过new关键字来完成的,当使用new 关键字时就会为该对象在堆内存中开辟一块内存,只等构造器来初始化这块内存,为实例变量赋初始值。在未赋初始值之前是默认值。看代码中的构造器和编译后构造器是不一样的,编译后的构造器包含了更多的内容。
非静态代码块一般是初始化实例变量的。编译后,非静态代码块中的代码会提取到构造器中,初始化实例变量的代码也提取到构造器中,他们在构造器中的排列顺序和他们在源码中的顺序一致,并且在构造器中原有代码的前面。
构造器负责初始化实例变量。
示例代码:
package com.usoft7;
/**
* Created with IntelliJ IDEA.
* User: ASUS
* Date: 14-3-29
* Time: 上午1:35
* To change this template use File | Settings | File Templates.
*/
class User {
public String name;
{
System.out.println("非静态代码块---1");
}
public int age;
User() {
System.out.println("User 无参构造");
}
User(String name, int age) {
this.name = name;
System.out.println("name赋值完成");
this.age = age;
System.out.println("age赋值完成");
System.out.println("初始化完成----");
}
{
System.out.println("非静态代码块---2");
}
String getName() {
return name;
}
void setName(String name) {
this.name = name;
}
int getAge() {
return age;
}
void setAge(int age) {
this.age = age;
}
}
class Person {
public User u = new User();
public User user = new User("helo", 12);
public String school;
Person() {
}
User getUser() {
return user;
}
void setUser(User user) {
this.user = user;
}
String getSchool() {
return school;
}
void setSchool(String school) {
this.school = school;
}
}
package com.usoft7;
public class Test {
public static void main(String[] args) {
Person p = new Person();
System.out.println("========" + p.u.getAge());
System.out.println("========" + p.u.getName());
System.out.println("-------------------------");
System.out.println("========" + p.user.getAge());
System.out.println("========" + p.user.getName());
}
}
打印结果,
非静态代码块---1
非静态代码块---2
User 无参构造
非静态代码块---1
非静态代码块---2
name赋值完成
age赋值完成
初始化完成----
========0
========null
-------------------------
========12
========helo
附:javac命令使用utf-8编码
E:\test-java\hh>javac -encoding utf-8 Test.java
总结:通过此实例可以很好的了解构造器的作用,静态块和非静态块。
理解实例变量的初始化(先分配内存再赋值)
====================END====================