【JAVA之三】类与对象扩展.构造方法

来源:互联网 发布:淘宝代码怎么用的 编辑:程序博客网 时间:2024/06/06 03:58

【JAVA之三】类与对象扩展.构造方法

写在前面:这是对第一节的问题的必要的补充,以后会有很多类似的补充,原因很简单,接触的越多,我们才可以理解的越深入。

知识循序渐进,由浅入深。

零.类的复习

<1>类的编写

格式如下:

public class 类名 { 属性的编写:

访问修饰符 (public,private, ,protected) 数据类型 属性名

public int longth;

private int logth;

int logth;

pritected int logth;

他们都是表示一个属性(logth),但是他们的访问修饰符不一样。对于访问修饰符的问题我们以后再讲。

public String ; public int width; //规定了这个phone的所应具有的特征(类的属性)

方法的编写:

访问修饰符 返回值类型 方法名(数据类型 参数名,…){

方法内容

}

public void call(String x){ System.out.println(name+”正在拨打”); } // 规定了这个phone的所应具有的特征 (类的方法) }

一.构造方法

复习的时候我们提到了方法。这个突然冒出的方法是从哪里来的呢?

回答这个问题,我们需要提到对象的建立:

格式如下:

类名 对象名 = new 类名();

其实 ‘new 类名();’的另一种写法是‘new 构造方法();’

你看,构造方法出现在了我们的面前;其实构造方法一直都在,当我们在类中没有写构造方法时,其实JVM已经帮我们写了一个构造方法,且这个方法没有参数。

其实我们也可以自己去写构造方法:

格式为:

访问修饰符 构造方法名【类名】(数据类型 参数名,…){

}

学到这里是我们来总结一下:

1.如果你没有在类中定义构造方法,那么JVM会默认给你提供一个构造方法(无参数的构造方法);

2.如果你在类中定义了构造方法,则JVM不会提供默认

3.3.方法所带的参数(参数个数、参数类型、参数顺序)必须要不同。

二.构造方法的用法

那么构造方法是来做什么的呢?

我们来看下面的程序

1.

public class J0710 {
private String name;

public void study(){    System.out.println("在学习");}

public static void mian(String [] args){
J0710 J = new J0710();
J.study();
}
}
输出结果:

2.
public class J0710 {
private String name;
public J0710(String name){
this.name = name;
}

public void study(){    System.out.println(name+"在学习");}public static void main(String [] args){J0710 j = new J0710("安东");j.study();

}
输出结果:

安东在学习

这样我们可以更好的了解了构成对象的结构:类名 对象名 = new 构造方法名();

这里可以知道构造方法的其中之一的作用是:将对象实例化。

那么我们来稍稍比较一下构造方法和其他对象的区别:

1.数据类型不同(构造方法后面没有数据类型)

2.方法名不同(构造方法的方法名就是类名)

3.作用不同(构造方法是为了实例化对象)

4.构造方法每使用一次就会实例化一个新的对象;普通方法使用时会根据对象不同而调用不同对象的方法。

三.方法重载

对于方法的的重载,我在第一篇[Java之一]类与对象 中已经写过普通方法的部分。

其所有的方法重载的条件是一样的:

1.必须在同类中或者是有继承关系的类中;

2.方法名必须要完全一致;

3.方法所带的参数(参数个数、参数类型、参数顺序)必须要不同。

对于构成方法的重载和普通方法的格式一样,改变其参数,改变其方法内容

例如:

public J0710(){}public J0710(String name){    this.name= name;                                         //就是重写,是有参的构成方法}public void study(){    System.out.println(name+"在学习");}public static void main(String [] args){J0710 j = new J0710("安东");j.study();J0710 j1 = new J0710();j1.study();

}
}
输出结果:

安东在学习

null在学习

那么我们来理解构成方法的重载是为了什么:由例子可以知道,我们为的是让我们对象实例化的时候,根据不同的对象我们来,给他赋予属于这个对象的参数和方法。

四.最后的小问题

我们注意到,其中在上面的一个例子中有一个情况:

“this. name = name;”这句代码表示了什么意思呢?

如果没有这句代码,我们的输出是什么?

public J0710(){}public J0710(String name){    this.name= name;                                         //就是重写,是有参的构成方法}public void study(){    System.out.println(name+"在学习");}public static void main(String [] args){J0710 j = new J0710("安东");j.study();J0710 j1 = new J0710();j1.study();

}
}

输出结果:

null在学习

null在学习

也就是无法将类的属性赋予内容

看这句代码:

public J0710(String name){
name= name;
}
因为Java中有就近原则,name的和如他最近的name有关也就是

这个name,可是,这句代码name不是类的属性,也就是说,我们没有将我们的参数,传给我们的类的属性。那么我们对这个问题的解决方法是:

this.name = name;

这里的this就是指我们对象的的属性,他表示:

1.this表示当前调用方法的对象;.如果是a对象在调用方法,那么方法中this就表示a对象。

2..this类似于生活中”我”这个词的意思

还有:this的用法

调用构造方法的格式:this(参数值,…);

调用普通方法的格式:this.普通方法名(参数值,…);

值得注意的是:调用构造方法的:this(参数值,…);可以将方法移到拥有这个参数的另一个重写的构造方法中。

原创粉丝点击