构造方法:一种特殊的方法,能够在**创建对象的同时,完成新建对象的初始化工作,**正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员
特点:
构造方法是与类同名的方法;注意:普通方法的名字也可以和类名一致,但是不推荐;没返回值,也不能写void;主要作用是完成新建对象的初始化工作;一般不能显式地直接调用,而是用new来调用(还存在使用this/super调用);创建一个类的新对象的同时,系统自动调用该类的构造函数,为新建对象的初始化;注意:默认有一个空的构造方法,但是一旦用户自定义了构造方法以后,默认的空的构造方法就会自动消失,如果还想使用,要显式声明出来;定义构造方法的格式:
【访问修饰符】类名(参数列表){
**//执行初始化**}
Java中的默认构造方法:
无参
空方法体,即不执行任何的初始化操作
可以把所有对象都有的相同的内容定义在构造方法中;
构造方法是一种特殊的方法,它也能重载;
构造函数的重载是指同一个类中存在着若干个具有不同参数列表的构造函数,和普通的方法一样,将根据new运算符(反射中有不使用new运算符的方式)后面的参数类型列表判定使用的构造方法版本;
普通方法和构造方法的区别
构造方法普通方法是用在实例化对象的时候调用的分静态方法和非静态方法,静态方法可用类名直接调用,非静态方法要用对象调用没有返回值,连void都没有返回值可有可无,如果没有声明时要加void方法名必须与类名相同方法名最好不跟类名一样不能使用修饰符,包括static、final、abstract可以使用修饰符,包括static、final、abstractJava中的this就是这样一个特殊的引用,它指向了调用该方法的对象自身
this.成员属性
this.成员方法
this(); 对于构造方法而言,this还有一个特殊作用:那就是在构造方法中调用本类的其他构造方法
方法的结构
【访问控制】【方法修饰】 返回类型 方法名称(参数1,参数2,…) {
…(statements;) //方法体:方法的内容
}
方法名和参数列表(合称为“方法签名”)唯一的标识出某一方法
Java中的方法只能作为类的一部分来创建
方法只有通过对象才能被调用(static方法除外),且这个对象必须能执行这个方法调用,如果在某个对象上调用它不具备的方法,那么编译会错误。
方法的特点:
定义方法可以将功能代码进行封装。
便于该功能进行复用。
方法只有被调用才会被执行。
方法的出现提高代码的复用性。
方法若没有返回值,则用关键字void表示,那么该方法中的return语句如果在最后一行可以省略不写。
方法中可以调用方法,不可以在方法内部定义方法。
定义方法时,方法的结果应返回给调用者,交由调用者来处理
方法声明中有一个重要的关键字:return
return的用法包括两方面:
代表“已经做完,离开此方法”
如果此方法产生了一个值,这个值要放在return语句后面
可以定义方法返回任意想要的类型,如果不想返回任何值,可以指示此方法返回void(空)
方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头,例如: sendMessge
参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,应该在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确
成员变量和全局变量的区别
比较成员变量局部变量定义位置直接在类中定义定义在方法中声明赋值可以在声明时赋初始值;若不赋值,会有默认初始值,基本数据类型的值为0,引用类型的值为null需要显式初始化后才能使用作用域在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类外部使用仅限于定义它的方法,在该方法外无法访问它注意(1)在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量 (2)局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级实参和形参
形参就是一个普通的临时变量,位置特殊只是为了跳出方法体的作用域,以便能够获取实参值。方法体中的代码操作的是形参变量,和实参无关,只不过需要借助实参的数据值。可变参数
Java1.5增加了可变参数特性,适用于参数个数不确定,类型确定的情况
Java中可变参数的特点:
Java把可变参数当做数组处理
可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项
可变参数用…代替标识, …位于变量类型和变量名之间,前后有无空格都可以
用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数
public int add(int...nums){ int sum=0; for(int num:nums){ sum+=num; } return sum; }