类:
在我们的日常生活中,对于事物的描述无非就是描述事物的属性和行为。如:人的身高,体重,年龄等称为属性,人会说话,会跑步,会做饭等等称为行为。
而对于Java中的类,无非也是如此,包含了属性和行为。
类的定义:
- 属性:对应类中的成员变量
- 行为:对应类中的成员函数
例如:
public class User {
public User() {
}
public User(String username, int age) {
this.username = username;
this.age = age;
}
private String username;
private int age;
public String say(String str){
return str;
}
public void sleep(){
}
}
分析:
首先创建了一个User类,其中用户名(username),年龄(age)是User类的成员变量。说话(say),睡觉(sleep)是User类的行为,而其余两个则是User类的无参构造器和有参构造器。
这里我们提到了一个成员变量,那么这个成员变量跟我们曾几何时学习的局部变量有什么关系呢?
成员变量和局部变量的关系:
成员变量:
- 成员变量直接定义在类中。
- 成员变量在这个类中有效。
- 成员变量随着对象的建立而存在,消失而消失,存在于对象所在的堆内存中。
- 局部变量定义在方法中,参数上,语句中。
- 局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。
- 局部变量存在与栈内存中,随着所属区域的运行而存在,结束而释放。
构造函数定义:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。
特点:
- 该函数的名称和所在类的名称相同。
- 不需要定义返回值类型。
- 该函数没有具体的返回值。
注意事项:一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果在类中自定义了构造函数,那么默认的构造函数就没有了。
一个类中,可以有多个构造函数,因为它们的函数名称是相同的,所以只能通过参数列表进行区分。所以,一个类中如果出现多个构造函数,它们的存在是以重载体现的。
上面具体的介绍了一下构造函数的定义,特点等等。但是同样还有很多疑问,如他和一般函数有那些区别呢和构造代码块有什么区别呢等等问题。
构造函数和一般函数的区别:
- 构造函数是在对象创建时,被调用,用户对象的初始化。而且对象的初始化动作只执行一次。
- 一般函数,是对象创建完成后,需要调用才执行,可以被调用多次。
- 构造函数和一般函数的定义格式不同。
- 构造代码块是给所有的对象进行初始化,也就说,所有的对象都会调用一个代码块。只要建立对象,就会调用这个代码块。
- 构造函数是给与之对应的对象进行初始化,它具有针对性。
以一个简单的案例展示一个它们的执行顺序:
User类:
public class User {
private String username;
private int age;
{
System.out.println("构造代码块");
}
public User() {
System.out.println("无参构造方法");
}
public User(String username, int age) {
this.username = username;
this.age = age;
System.out.println("有参构造方法");
}
}
测试类:
public static void main(String[] args) {
User u = new User();
User user = new User("张三",18);
}
执行结果:
构造代码块
无参构造方法
构造代码块
有参构造方法
结果分析:通过案例的验证,我们确定了 构造代码块在构造方法之前执行。 构造代码块在每次创建对象时都会执行。 构造方法之被调用一次,而且是针对性的。
总结:书读百遍其义自见。只有基础扎实了,才能勇攀高峰。加油!!!加油!!!加油!!!