1、封装
- 封装:隐藏实现细节,提供公共的访问方式
- 好处
- 隐藏实现细节,提供公共的访问方式
- 提高代码的复用性
- 提高代码的安全性
- 设计原则:把不想让外界的实现细节隐藏起来,提供公共的访问方式
- private只是封装的一中体现
- 封装:类、方法、private修饰的成员变量
- 成员变量和局部变量的区别
成员变量 | 局部变量 | |
---|---|---|
类中的位置 | 类中方法外 | 方法定义中或者方法声明上 |
内存中的位置 | 堆内存 | 栈内存 |
生命周期 | 随着对象的创建而存在 | 随着方法的调用而存在,调用完毕消失 |
初始化值 | 有默认值 | 没有默认值,赋值后才能使用 |
- 类作为形式参数的问题?
- 如果一个方法需要的参数 是一个类,那么这个方法需要的实际参数就是这个类的对象
- 匿名对象
- 没有名字的对象
- 应用场景
- 调用方法,仅仅只调用一次的时候
- 餐椅作为实际参数传递
2、Private关键字
- 私有,可以修饰成员变量和成员方法
- 特点:
- 被private修饰后的成员,只能在本类中被访问
- private的应用
- 以后在写一个类的时候, 将所有的成员变量private
- 通过对应的getter和setter方法
3、this关键字
- 代表当前类的引用对象
- 记住:哪个对象调用方法,该方法内部的this就代表哪个对象
- this的应用场景
- 解决了局不变量隐藏成员变量的问题
4、构造方法
-
作用:用于对象的数据进行初始化
-
格式
- 方法名和类名相同
- 没有返回值类型,连void都没有
- 没有返回值
- 注意:构造方法中可以有return,要这样子写:return;,用于结束该方法
-
构造方法的注意事项
- 如果我们没有写构造方法,系统将提供一个默认的无参构造方法
- 如果我们给出了构造方法,系统将不在提供默认的构造方法
- 如果这时候我们要使用无参构造放,就必须自己手动给出
-
给成员变量赋值的方法:
- setter方法
- 带参构造
-
案例
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; } }
-
面向对象的练习题
- 标准的手机类的定义和测试
- 长方形案例
- 员工案例
- MyMath案例:自己提供加减乘除
-
student s = new student();做了什么事情
- 吧student.class文件加载进内存
- 在栈为s开辟空间
- 在堆为学生对象开辟空间
- 给学生的成员变量进行默认初始化
- 通过构造方法给成员变量初始化
- 把对象构造完毕,把地址赋值给s变量
5、static关键字
-
静态,可以修饰成员变量和成员方法
-
静态的特点
- 随着类的加载而加载
- 优先于对象存在
- 被类的所有对象所共享,这也是我们该不该使用静态的依据
- 饮水机和水杯的举例
- 可以通过类名调用,也可以通过对象名调用
-
静态的内存图
- 方法区中的静态区
-
静态的注意事项:
- 在静态方法中,没有this
- 静态只能访问静态
-
静态变量和成员变量的区别
静态变量 成员变量 所属不同 属于类:类变量 属于对象:实例变量 内存位置不同 方法区的静态区 堆 生命周期不同 随着类的加载而加载 随着对象的创建而存在 调用不同 对象名、类名 对象名
6、main方法
public static void main(String[] args) {
}
public:权限最大
static:不用创建对象就可以调用,有jvm调用
void:无返回值, 返回给jvm没有意义
main:就是一个常见的名称
String[] args:可以通过控制台接收字符串数组的数据
我们用Scanner类