面向对象的封装性
封装:把类内部的信息统一保护起来,防止外包随意修改内部数据,保证数据的安全性,保证外部尽可能正确地使用这个类
封装性包括属性的封装,方法的封装,类的封装,组件的封装
优点:模块化,项目可以分工合作,也便于项目的维护;安全;代码利用率高
缺点:效率低
未封装的类
class Person {
String name;
int age;
}
访问输出
public static void main(String[] args) {
Person p = new Person();
p.name = "meng";
p.age = 20;
}
如果属性没有封装,那么在本类之外创建对象后,可以直接访问修改属性
封装属性后的类
class Person{
//属性的封装
private String name ;//成员变量,在类中定义
private int age ;
//getter and setter
public void setName(String name){
this.name = name ;
}
//对外提供一个获取name属性的方法
public String getName(){
return name ;
}
public void setAge(int age){
this.age = age ;//当前对象的age等于传进来参数的age
}
//对外提供一个获取age属性的方法
public int getAge(){
return age ;
}
封装后的访问输出
public static void main(String[] args) {
Person p = new Person();
p.setName("meng") ;
p.setAge (20);
}
想要在类外部访问私有属性,我们需要提供公有的方法来间接访问
通常在一个类中,属性都私有化(private),并且对外提供getter and setter方法
封装性小结:
- 如果属性没有封装,那么在本类之外创建对象后,可以直接访问修改属性,不安全。
- .private 修饰符 : 访问权限修饰符,public表示公有的,private表示私有的,私有的属性或方法,只能在本类中访问,公有的属性和方法,可以被类外的其他访问 ,想要在类外部访问私有属性,我们需要提供公有的方法来间接访问
- 通常在一个类中,属性都私有化,并对外提供getter and setter 方法
成员变量和局部变量
1.在类中的位置不同
成员变量:在类中定义
class Person{
private String name;//成员变量
}
局部变量:在方法中定义
public void run(int len){ //参数也是局部变量
int m = len; // m也是局部变量
System.out.println("我跑了"+m+"米");
}
2.在内存中的位置不同
成员变量:在堆内存中(成员变量属于对象,对象进堆内存)
局部变量:在栈内存(局部变量属于方法,方法进栈内存)
3.生命周期不同
成员变量:随对象创建存在,对象销毁消失
局部变量:随方法的调用存在,随方法使用完毕消失
4.初始化值不同
成员变量:有默认初始化值,类型为null
局部变量:没有默认初始值,必须定义赋值,然后才能使用
注意:局部变量可以和成员变量名称一样,在方法中使用的时候,采用就近原则