Java 学习(09)--方法重载/构造函数
1 、方法
方法是一组为了实现特定功能的代码块的集合。方法在语法上的功能主要有以下两个:
①:结构化代码
将代码按照功能进行组织, 使代码的结构比较清晰, 容易阅读和修改, 也就是程序的可维护性强。
②:减少代码重复
一个固定的功能, 可能会在程序中多次使用, 在使用时只需要调用写好的方法, 而不用重复书写对应的功能代码。
方法在书写时需要注意以下两点:
①:逻辑严谨
方法实现的一个完整的功能, 所以在书写时要考虑到各种可能的情况, 并对每种情况做出恰当的处理。
②:通用性强(可重复利用)
方法实现的是一种功能, 在实际实现时, 可以根据需要, 使方法具备一定的通用性,除非必要,否则不要写专用的方法。在 Java 语言中,恰当的使用方法,将使程序更加优雅,便于阅读和使用。
我的总结:
方法:一段可重复使用的代码段;
程序中完成独立功能的一段代码的集合
格式:
修饰符返回值类型方法名 (参数类型参数名 1,参数类型参数名 2...) { 方 法 体 语 句 ; return 返回值 ;
}
修饰符:目前就用 public static 。后面再详细讲解其他修饰符返回值类型:就是功能结果的数据类型
方法名:就是起了一个名字,方便我们调用该方法。参数类型:就是参数的数据类型
参数名:就是变量参数分类:
实参:实际参与运算的数据
形参:方法上定义的,用于接收实际参数的变量方法体语句:就是完成功能的代码块
return :结束方法
返回值:就是功能的结果,由 return 带给调用者。
两个明确:
返回值类型:结果的数据类型
参数列表:参数的个数及对应的数据类型
方法的注意事项
A:方法不调用不执行 B:方法之间是平级关系,不能嵌套定义 C:方法定义的时候,参数是用,隔开的
D:方法在调用的时候,不用在传递数据类型 E:如果方法有明确的返回值类型,就必须有 return 语句返回。
示例:
输出:11 (将a,b写固定了,不推荐)
输出:30
(方法重载 overload:在一个类中方法同名不同参----1.方法名相同 2.参数列表不同:数量、类型、顺序不同)
不能根据返回值类型判断方法重载
2.private 关键字
(1)私有的意义,可以修饰成员变量和成员方法
(2)特点: 被 private修饰的后的成员只能在本类中被访问
(3)private 的应用: 以后再写一个类的时候:把所有的成员变量给 private 了 提供对应的 getXxx()/setXxx() 方法
输出:null
输出:林青霞
3.this关键字
(1)代表当前类的引用对象 (哪个对象调用方法,该方法内部的 this 就代表那个对象)
(2)this 的应用场景: A:解决了局部变量隐藏成员变量的问题
当变量一个是成员变量,一个是局部变量时,变量可以重名,就近原则
this 表示该类的一个对象的引用(那个对象调用这个方法,this 就表示那个方法)
this 作用:1.当局部变量和成员变量同名时,通过 this 关键字 调用成员变量
this 作用2:通过 this(),用于构造方法的第一行,用来调用其他构造方法
示例:
输出:null 0
输出:zs 18
4.构造方法
(1)作用:1.用来创建对象 2.用于对对象的成员变量进行数据的初始化
(2)格式: A:方法名和类名相同(包括大小写) B:没有返回值类型,连 void 都不能有,也没有返回值
C:不能通过对象 . 方法名的方式进行调用,而是通过 new 关键字进行调用 new 对象()
思考题:构造方法中可不可以有 return语句呢 ?
可以。而是我们写成这个样子就 OK 了:return; 其实,在任何的 void 类型的方法的最后你都可以写上: return;
(3)构造方法的注意事项
A:如果我们没写构造方法,系统将提供一个默认的无参构造方法
B:如果我们给出了构造方法,系统将不再提供默认构造方法 如果这个时候,我们要使用无参构造方法,就必须自己给出。
C:构造函数也可以重载
推荐:永远手动提供一个无参数的构造方法。
(4)给成员变量赋值的方式(3个) A:定义成员变量时赋值(不常用) B:通过set方法赋值 C:带参构造方法
示例:
输出:林青霞 40
创建一个对象时 (Student s = new Student()),都做了那些事
1.将 Student.class 加载到内存(只有第一次创建时才加载)
2.在栈内存中为变量 s 开辟空间
3.在栈内存中为学生变量开辟空间
4.给学生的成员变量进行默认初始化 null 0
5.给学生类的成员变量进行显示的初始化
6.通过构造方法给成员变量进行初始化
7.对象构造完毕,将对象地址(引用)赋值给 s 变量
(5)标准案例
class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age) {
this.name = name; this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
成员变量赋值的方式:
class StudentDemo {
public static void main(String[] args) {
//方式 1
Student s1 = new Student();
s1.setName("小明");
s1.setAge(18);
System.out.println(s1.getName()+"---"+s1.getAge());
//方式 2
Student s2 = new Student("小刚",19);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}
运行:
4.代码块
(1)用{} 括起来的代码。
(2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率。 B:构造代码块 把多个构造方法中相同的代码可以放到这里, 每个构造方法执行前, 首先执行构造代码块。 C:静态代码块 对类的数据进行初始化,仅仅只执行一次。
(3)静态代码块 ,构造代码块 ,构造方法的顺序问题 ? 静态代码块 > 构造代码块 > 构造方法
static : 静态的意思,可以修饰成员变量和成员方法
特点:1.谈过static 变量修饰的变量是静态变量,所有的该类的对象共享静态变量
2.静态变量随着类的加载而加载(.class)优先于对象而存在的
3.静态的变量和静态的方法可以不用创建该类的对象,直接通过类名通过类名 . 变量名或 类名 . 方法名(实参列表)
4.不能在静态的方法中访问非静态的变量,在非静态的方法中可以访问静态的变量
特点2.静态变量随着类的加载而加载(.class)优先于对象而存在的
static 变量修饰的变量不放在栈中,放在静态编码区
特点3:静态的变量和静态的方法可以不用创建该类的对象,直接通过类名通过类名 . 变量名或 类名 . 方法名(实参列表)
报错(age)
特点 4.不能在静态的方法中访问非静态的变量,在非静态的方法中可以访问静态的变量
报错(age)
输出:50 (需要定义变量)
输出:杨过