封装性
- 封装性是面向对象思想的三大特征之一
- 封装就是隐藏实现细节,对外提供访问接口
属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装
优点: 模块化、信息隐藏、代码重用、插件化易于调试、具有安全性
缺点: 执行效率受到影响
/*
如果属性有封装,那么在本类之外创建对象后,可以直接访问属性
private关键字:访问权限修饰符,public表示公有,private表示私有,私有的属性与方法
,只能在本类中访问
公有的属性和方法,可以被类外部的其他类访问,想要在类外部访问私有属性,我们需要提
供公有的方法间接访问
通常在一个类中,属性都私有化,并对外提供get and set方法
*/
public class Qianfeng {
public static void main(String[] args) {
Person p1 = new Person();
//p1.name = " "; //error
//p1.age = 21; //error
p1.setName(" ");
p1.setAge(21);
}
}
class Person{
//属性的封装
private String name; //成员变量
private int age; //成员变量
//对外提供一个设置name属性的方法
public void setName(String name){
this.name = name;
}
//对外提供一个获取name属性的方法
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int setAge(){
return this.age;
}
}
成员变量与局部变量
成员变量 | 局部变量 | |
---|---|---|
类中位置 | 类中定义 | 在方法中定义或者为方法的参数 |
内存中位置 | 在堆内存中(成员变量属于对象,对象进堆内存) | 在栈内存中(局部变量属于方法,方法进栈内存) |
生命周期 | 随着对象的创建而存在,随着对象的销毁而消失 | 随着方法的调用而存在,随着方法的调用完毕而消失 |
初始化值 | 有默认初始化值,引用类型默认为null | 没有默认初始化值,需要定义、赋值才能使用 |
局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
构造方法
class Dog{
private String name;
private int age;
public Dog(){
System.out.println("无参构造");
}
public Dog(String name){
this.name = name;
System.out.println("单参构造");
}
public Dog(String name,int age){
this(name);//调用其他构造方法时,此语句需要在第一句,在构造方法相互调用时必须存在出口(避免双向调用死循环)
this.age = age;
System.out.println("双参构造");
}
}
小结
*值传递与引用传递
-
值传递内存模型
-
引用传递内存模型
-
String传递内存模型1
***写时拷贝技术 -
String传递内存模型2(String对象内置于对象内)