封装的概述:隐藏对象的属性和功能的实现,仅对外界提供公共访问方式(封装本质是访问权限修饰符)
(封装就是对容器进行权限控制,通过访问权限修饰符【private、static…】实现)
对封装的成员添加private关键字
// 1.对需要封装的成员添加private关键字修饰 private String name; private int age; private String address;添加对成员的读写(get / set)
// 自动生成get/set方法 // alt + shift + s 再按R键 public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }在读写方法中添加逻辑业务代码或者数据校验代码
当局部变量 & 成员变量重名时,需要用this关键字进行区分
this本质就是一个引用、变量、实例,是当前类的对象(变量:this)
this可以理解成 “自己的”
public void setAuthor(String author) { this.author = author; //指的author不是参数列表的author,是成员变量author }this只能出现在类的内部
类的成员在内部访问可以忽略this
public String getAuthor() { return author;// return this.author; //author是成员变量,但在栈区调用时没有创建对象 //原因是因为已经有对象指向堆区(省略的this) }每次创建一个对象默认都会创建一个this引用指向自己对应的那个堆区的空间,相互独立互补影响
谁new或者谁调用某个方法,this就代指谁
静态环境(static)下不能够出现this 和 super
this除了可以访问本类的成员变量和成员方法以外还可以访问构造方法
多个对象共享同一份数据时,可以使用static关键字修饰
访问静态成员的方式
//通过类访问 (推荐) Student.nationality = "中国"; //通过对象访问静态成员 (不建议) s1.nationality = "中国";静态变量属于类的,不属于具体的对象
public Student(String name, int age, String address, String nationality) { this.name = name; this.age = age; this.address = address; Student.nationality = nationality; //this.nationality = nationality; //The static field Student.nationality should be accessed in a static way //虽然对象也可以调用静态变量,但系统建议使用类对静态变量进行调用 }静态变量又称:“类变量” ( 因为属于类的 ),没有使用static的变量为:非静态变量
静态变量可以修饰成员变量,也可以修饰方法(多用于工具类编写Arrays Object【所有成员变量&构造方法私有】外界只能调用)
静态环境下不能够访问非静态变量,非静态环境下可以访问静态变量
public static void staticMethod() { System.out.println("staticMethod"); // System.out.println(name); //报错:Cannot make a static reference to the non-static field nam } //1.static的方法在加载class时已经完成了,在创建对象之前 //2.static是类,而非静态变量是对象,用static引用对象,系统不知道引用明确的对象静态修饰的变量在类加载的时候加载到方法区的静态区
static还可以修饰 代码块 和 类(内部类)