面向对象(封装)
1.成员变量与局部变量
成员变量: 在一个类中方法外的变量
局部变量: 在一个类中方法中的变量
区别:
①位置不同: 成员变量在方法外,局部变量在方法内或者方法声明上(参数)
②内存中的位置不同: 成员变量在堆内存里面;局部变量在栈内存里面
③生命周期不同: 成员变量随着对象的存在而存在,消失而消失;局部变量是随着方法调用的。
④初始化值不同: 成员变量有默认的初始值;局部变量没有,须先定义和赋值才能使用
2.封装
概述: 面向对象的三大特征(封装,继承,多态)之一,是面向对象编程对客观世界的模拟,客观世界里成员变量是隐藏在对象内部的,外界无法直接操作。
原则: 将类的某些信息隐藏在类内部,不允许外部直接访问,而是通过提供的方法来实现对隐藏信息的访问和操作(可以理解为:在类中用private修饰成员变量,然后定义成员方法(public),外界通过调用成员方法来访问成员变量)
好处: ①提高代码的安全性 ②提高代码的复用性
3.构造方法
概述: 是一种特殊的方法,用来创建对象和对类中的属性赋值,如:
Student s = new Student();//new后面的Student()就是一个构造方法
格式:
public 类名(无惨/有参){
方法体;
}
注意事项
①: 如果类中没有定义构造方法,系统会给出一个默认的无惨构造方法,如果定义了,系统就不会提供默认的构造方法
②: 如果定义了带参数的构造方法,还要使用无参数的,那么久必须写一个无参数的构造方法
③: 在定义有参数的构造方法时,参数的数据类型要与成员变量的数据类型一样
范例(封装):
package practice;
public 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;
}
}
package practice;
public class Demo01 {
public static void main(String[] args) {
//创建student类对象
//调用无惨构造方法
Student s = new Student();
s.setName("张三");
s.setAge(15);
System.out.println(s.getName()+s.getAge());
//创建对象,调用有参构造函数
Student s1 = new Student("李四",18);
System.out.println(s1.getName()+s1.getAge());
}
}
执行结果: