Java—构造方法、匿名对象

构造方法:

在Java类当中,为了保证程序可以正常的执行,即使用户没有定义任何的构造方法,也会在程序编译之后自动的为类里面增加一个没有参数,方法名称与类名称相同,没有返回值的构造方法。

构造方法的定义原则:方法名称与类名称相同,没有返回值声明。所有的构造方法都在对象使用关键字new实例化的时候要被默认调用。

构造方法只在实例化新对象(new)的时候调用一次,普通方法是在实例化对象后可以随意调用多次。

作用:在类对象实例化的时候要设置属性的初始值,是为属性初始化准备的。

如果定义了一个构造方法,那么不会再自动生成默认的构造方法,一个类中至少保留一个构造方法。

构造方法也属于方法,那么可以针对构造方法进行重载,但是构造方法由于其特殊性,即在进行重载是,只需注意构造方法参数的个数和类型即可。在重载时有要求:按照参数的个数进行升序或降序排列。

遗留问题:在定义一个类时可以为属性直接设置默认值,但是这个默认值只有在构造执行完后才会设置,否则不会设置,而构造方法是属于整个对象构造过程的最后一步,即:是留给用户处理的步骤。

在对象实例化的过程之中,一定会经历类的加载、内存的分配,默认值的设置、构造方法。在没有构造前,各属性都是其对应数据的默认值。

package DuiXiang;

/*构造方法

 * 方法名与类名相同

 * 方法名前无返回值类型

 * 没有使用return返回值

 * Person p = new Person(); 主方法中实例化对象并调用构造方法,有参就就在()中加参数

 * this关键字

 * 明确的访问一个类的成员变量,解决与局部变量名称冲突的问题

 * 只能在构造方法中使用this调用其它的构造方法,不能在成员方法中使用

 * this();只能在在第一行

 * 不能在一个类的两个构造方法中相互调用

 */

public class GouZao {

int age;

public GouZao(){

this(5);

System.out.println("无参的构造方法被调用了!");

}

public GouZao(int age){

//this();          //调用无参数的构造方法,调用时必须在第一行,否则会报错

this.age=age;

System.out.println("有参的构造方法被调用了!");

}

public int getAge(){

System.out.println("今年"+age+"岁了");

return this.age;

}

 

public static void main(String[] args) {

GouZao gouzao = new GouZao();       //实例化对象并调用构造方法

gouzao.age=8;

gouzao.getAge();

}

 

}

 

 

匿名对象:

在构造方法的基础上,可以使用匿名对象,之前定义的都属于有名对象,但是这个名字使用时调用的肯定是堆内存空间,即真实的对象信息都保存在堆内存空间,没有栈指向的对象就称为匿名对象。

 

public class FengZhuang {

private String title ;

private int price;

public FengZhuang(String t,int p){

setTitle(t);

setPrice(p);

}

public void setTitle(String t){

title = t;

}

public String getTitle(){

return title;

}

public void setPrice(int p){

if(p>0){

price = p;

}

}

public int getPrice(){

return price;

}

public void print(){

System.out.println("《"+title+"》的价格为:"+price);

}

}

 

public class Book {

 

public static void main(String[] args) {

new FengZhuang("Java开发",89).print(); 

}

}

 

但是匿名对象没有其它对象进行引用,所以只能使用一次,一次之后该对象空间就成为垃圾,等待回收。

总结:

1、构造方法的定义要求:方法名称与类名称相同,没有返回值声明。

 

2、构造方法是在类对象使用关键字new 实例化的时候被默认调用的,不管你代码如何改变,只要是有了关键字new 就一定需要构造方法。

3、一个类中至少会保留一个构造方法,如果没有明确定义构造方法,那么会自动生成一个无参,什么都不做的构造方法。

4、构造方法的核心功能是在类对象实例化的时候为类中的属性初始化。

5、构造方法重载时,只要求考虑参数的类型及个数即可。

6、匿名对象只能够使用一次。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值