A 封装:类中的成员变量为private(私有),为私有的成员变量提供公有的get()或set()。
封装的好处:
i. 隐藏实现细节,提供共有的访问方式
ii. 提高了代码的复用性
iii. 提高安全性
封装的原则(思想):
i. 将不需要对外提供的内容隐藏起来
ii. 把属性隐藏,提供公共方法对其访问
封装的体现:private是封装的一种体现。
B private:
i. 是一个权限修饰符
ii. 可以修饰成员(成员变量和成员方法)
iii. 被private修饰的成员只能在本类中被访问
C this关键字: 代表当前类的对象引用。
引用当前类中的成员变量与成员方法。
private String name; public static void main(String[] args) { this.name = "zhangsan"; // 错误,主方法是静态的,不能使用this关键字。 } public String getName() { return name; // 这里其实是隐含了this }
D super关键字:代表父类存储空间的标识。(可以理解为父类的引用,通过这个东西可以访问父类的成员)
E static关键字:
1. 可以修饰成员变量和成员方法。静态的成员可以直接使用类名(接口名)直接调用,也可以通过类的对象调用。
修饰成员变量:静态变量。
i. 类所有的对象共用一份静态变量。
ii. 静态变量只在第一次使用类时初始化,从第二次使用类时不再进行初始化。
修饰成员方法:静态方法。
i. 静态方法不能使用this与super关键字。
ii. 静态方法只能直接调用当前类中静态的成员。想要调用非静态成员必须通过类的对象调用(因为静态方法不接受隐含的this)。
private String name;
static String num;
静态方法的直接调用:
调用静态成员:
Test.num = ""; // 通过类名调用
// this.num = ""; // 错误,static修饰的成员方法(即静态方法)不能使用this与super关键字
num = ""; // 是否相当于Test.num = "";
也可通过类的对象调用
调用非静态成员:
// this.name = ""; // 错误,static修饰的成员方法不能使用this与super关键字
// Test.name = ""; // 错误,name不是静态的
// name = ""; // 错误,name不是静态的,因此相当于this.name
只能通过类的对象调用
非静态方法的直接调用:
调用静态成员:
Test.num = "";
this.num = ""; //原理 好像 与上面的相同,this:是当前类的对象引用
num = ""; //调用方式和静态方法直接调用的原理相同
也可通过类的对象调用
调用非静态成员
Test.name = ""; //错误,只有静态成员才可以用类名(接口名)调用
name = ""; //相当于this.name = "";
也可通过类的对象调用
iii. 非静态的方法可以直接调用静态的成员。
2. 静态的特点:
A:随着类的加载而加载
B:优先与对象存在
C:被类的所有对象共享
D:可以通过类名调用:
既可以通过对象名调用,也可以通过类名调用,建议通过类名调用。
3. 静态的内存图:静态的内容在方法区的静态区
4. 静态的注意事项;
A:在静态方法中没有this对象
B:静态只能访问静态(代码测试过)
5. 静态变量和成员变量的区别
A:所属不同
静态变量:属于类,类变量
成员变量:属于对象,对象变量,实例变量
B:内存位置不同
静态变量:方法区的静态区
成员变量:堆内存
C:生命周期不同
静态变量:静态变量是随着类的加载而加载,随着类的消失而消失
成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失
D:调用不同
静态变量:可以通过对象名调用,也可以通过类名调用
成员变量:只能通过对象名调用
原文地址:https://www.cnblogs.com/zhaolanqi/p/9234612.html