private和封装
private关键字
private关键字 就是一个权限关键字 public protected 默认不写
private关键字 表示私有权限 该成员变量或成员函数只能够在类中被访问 外界不可访问
一旦相关属性或者方法被定义为私有化之后,要使用时直接要进行get和set方法(属性)。例如下面这个例子
class Point{
private double x;
private double y;
public Point(){
}
public Point(double x,double y){
this.x=x;
this.y=y;
}
public double getDistance(Point other){
return Math.hypot(x-other.x,y-other.y);
}
public void setX(double x){
this.x=x;
}
public void setY(double y){
this.y=y;
}
public double getX(){
return this.x;
}
public double getY(){
return this.y;
}
}
封装
在类中定义好相应的属性和方法之,在使用时直接进行生成类然后再进行调用相关类中的方法。
成员变量与局部变量的区别
1.存储位置
局部变量存储在栈内存中函数的所属空间里
成员变量存储在堆内存中对象的所属空间里
2.生命周期
局部变量随着函数的进栈而存在,随着函数的弹栈而消失
成员变量随着对象的创建而存在,随着对象的销毁而消失
3.访问范围
局部变量的访问范围仅仅在函数当中
成员变量的访问范围在当前类中
4.初始化值
局部变量必须先进行初始化 之后再能被调用
成员变量在创建时有默认初始化
成员变量的赋值其实经历了三个阶段
默认初始化- 显式初始化 - 针对性初始化
类中成员变量被赋值 构造函数
构造函数
格式为 权限修饰符+类名 (参数列表){
......
}
构造函数的主要作用:
在创建对象之时对成员变量进行赋值操作。
注意点:
- 没有函数类型关键字
- 没有返回值类型(并不意味着没有return)
- 函数名必须是类名
- 但凡创建一个对象 构造函数就执行一次
- 构造函数只在创建对象的时候调用 而且仅仅调用一次
成员函数在创建对象之后调动 可以调用任意次数
成员函数能否调用成员函数 可以
成员函数能否调用构造函数 不可以的
构造函数能否调用成员函数 可以 只不过此时的成员函数不应该当做对象的特有行为而向外界提供的
一般类中构造函数执行流程:
- 在堆内存中开辟一个空间并分配地址
- 对成员变量进行【默认初始化】
- 相应的构造函数进栈 刚开始就对成员变量进行【显式初始化】
- 接着再去执行构造函数中的内容【针对性初始化】
- 构造函数执行完毕 弹栈 将对象的地址赋值给相应变量即可