第二天
1:方法
1:方法的定义
方法是个“黑匣子”,完成某个特定的应用程序功能,并返回结果
方法定义类的某种行为(或功能), 是功能的实现
记忆:
方法五要素:修饰符,返回值类型,方法名,参数列表,方法体。
public void show(){
System.out.println("姓名:" + name + ",年龄:" + age);
}
方法中返回值介绍:
如果方法有返回值,方法中必须使用关键字return返回某个值,返回值类型为该值的类型,且返回值只能有一个。
return的作用:结束方法,返回结果。
注意:当调用有返回值的方法时,需要定义一个变量接受
如果方法没有返回值,返回值类型为void
有返回值:
public String getName(){
return name;
}
无返回值
public void show(){
System.out.println("姓名:" + name + ",年龄:" + age);
}
2:方法的调用
问:如何调用一个类的方法?
明确:你要调用哪个类的哪个方法?
1:创建这个类的对象
2:对象名.方法名();
3:方法间的调用
方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率
情况 | 举例 |
Student类的方法a( )调用Student类的方法b( ),直接调用 | public void a( ) { b( ); //调用b( ) } |
Student类的方法a( )调用Teacher类的方法b( ),先创建类对象,然后使用“.”调用 | public void a( ) { Teacher t = new Teacher( ); t.b( ); //调用Teacher类的b() } |
2:方法的参数
方法五要素:修饰符,返回值类型,方法名,参数列表,方法体。
无参方法
访问修饰符 返回类型 方法名() {
//方法的主体
}
public void show(){
System.out.println("姓名:" + name + ",年龄:" + age);
}
定义带参数的方法
访问修饰符 返回类型 方法名(<形式参数列表>) {
//方法的主体
}
调用带参数的方法
对象名.方法名(参数1, 参数2,……,参数n)
有参方法的调用:
调用有参方法时,必须要传递对应类型的参数,否则报错。
3:构造方法
//学生类
public class Student {
//属性
String name;
int age;
String sex;
//系统默认的无参构造方法,写和不写他都是存在的
public Student() {
}
//有参构造方法,创建对象的时候就已经给了初始值了
public Student(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
作用:创建对象,初始化对象
特点:
1、无参构造方法,与类同名,不含返回类型。如果类中没有显示的构造方法,系统会给出默认的无参构造方法。
2、构造方法一般都是public的,才能被系统调用。
3、无参构造在给对象属性赋值时比较麻烦,可以定义有参的构造方法。
当成员变量(属性)和方法参数同名时,一般使用this表示当前对象,如:this.name = name;
- 构造方法经常用于程序初始化工作,例如:人出生要“洗澡”,就可以在人的构造方法时加入完成“洗澡”的程序代码,程序就不必每个人出时一个一个地告诉他们要“洗澡”了。
- 当类有了带参构造方法之后,系统不再自动生成默认的无参构造方法,若使用需重新定义
要求:如果一个类中有带参数的构造方法时,必须要定义无参的构造方法
6、构造方法只能用于创建对象时,不能在程序中像调用其他方法一样调用它,但是可以用this()的形式在其他构造方法中调用它,注意this()必须在第一行。
构造方法和普通方法的区别:
构造方法访问修饰符一般是public, 一般方法根据实际情况选择修饰符
构造方法没有返回值类型,一般方法要么无返回值-void,要么有返回值
方法名与类同名,一般方法见名思意,遵循驼峰命名规则
构造方法的方法体是对象的初始化代码,一般方法是功能的实现
调用方式不一致,普通方法需要使用对象来调用,构造方法是new, this, super
4:方法重载:overload
为什么会有方法的重载?
在同一个类中有一些方法的功能相同,仅仅是参数列表不一样,此时如果去定义不同的方法名很麻烦。
于是规定,方法名可以一样,但是参数列表必须不一样。所以就有了方法的重载。
方法重载的判断标准:同类同名不同参,与其他无关。(不同参:不同的参数列表:个数不同,类型不同,顺序不同)
如:构造方法,Arrays的很多方法都是重载的。
求平均值的方法
public double getAvg(int no1 ,int no2){
return (no1+no2)/2;
}
public double getAvg(int no1 ,int no2, int no3){
return (no1+no2+no3)/3;
}
5:成员变量与局部变量
成员变量是属于类的变量,其实就是类中的属性,类中的每一个方法都可以共享;
局部变量就是定义在某个方法中的变量,只能在定义的方法中访问,其他的方法不能共享;
成员变量和局部变量区别:
1:定义位置不同
成员变量:定义在类中的变量,属于类
局部变量:定义在方法中的变量,属于方法
2:作用域不同
成员变量:属于类,类中的每一个方法都可以使用
局部变量:属于方法,只能在某一个方法中使用
3:初始值不同
成员变量:有默认的初始值,在加载类的时候,就会给成员变量赋值(默认值)
局部变量:没有初始值,必须初始化之后才可以使用
4:生命周期不同
成员变量:属于类,随着对象的创建而创建,随对象的消失而消失- 垃圾回收器
局部变量:属于方法,随着方法的调用而创建
注意:
1:在同一个类中,成员变量和局部变量同名时,局部变量具有更高的优先级
2:在方法的参数列表中的参数,也是局部变量
作业:
// 什么是构造方法?
// 作用是什么?
// 构造方法和普通的方法有什么区别 ? - 面试题
区间需要校验
Day3的计划:
- 构造方法
- 成员变量和局部变量
- Java的三大特性之一:封装
1:自己编写代码,测试结果
宠物领养系统
Name, health, lovely, sex
2:使用代码完成下面的运行结果,分析为什么!!!!!!!!
成员变量和局部变量的区别
下面的代码有没有问题?没有问题,结果是多少,有问题的话怎么解决?
3:新建一个学生类,
属性有:姓名,年龄,地址,性别
通过键盘录入,使用有参构造和无参构造分别为对象进行赋值
并给出自我介绍的方法,介绍自己的相关信息