1.封装
广义: 类 方法 包 的定义本身就是一种封装 狭义: 在设计一个类的时候 将所有的属性设置为私有的 并对各个私有的属性设计相应的 存/取方法 来完成对属性的使用私有化只能代表封装的特性
可以说私有是封装的一种 不能说封装即是私有 封装的好处: 隐藏实现细节 提供公共的访问方式 提高了安全性 封装的原则: 将不需要对外提供的内容都封装起来 把属性隐藏 提供公共的方法进行访问private关键字***** 关键字的特点: 1.私有的意思 2.是一个权限修饰符 3.可以修饰成员变量 和 成员方法 4.被其修饰的成员 只能在本类中被访问封装的步骤: 1.把成员变量用private修饰 2.提供相应的 存/取方法 setXxx() 和 getXxx();2.this关键字
this关键字指的是 当前对象的引用 作用: this.属性 访问本类的成员变量 用来区分 成员变量 和 局部变量 重名的问题 this.方法 访问本类的成员方法 this() 访问本类的构造方法 ()中可以有参数的 如果有参数 就是调用指定的有参构造注意事项: 1.this() 不能使用在普通方法中 只能写在构造方法中 2.必须是构造方法中的第一条语句3.static关键字(静态) 特点: 1.static静态 可以用来修饰共有的属性/行为 2.static与类相关 和对象无关 随着类的加载而加载 优先于对象而存在 3.被类的所有对象共享 例如 空调 就是静态 水杯 就是非静态 4.被static修饰的成员 多了一种调用方式 可以通过 类名.成员名 调用 方法区: 类信息被存储在一个称为方法区的内存空间中 类信息就是由类加载器在类加载时从文件中提取静态(类)变量 也存储在方法区中
静态和非静态的区别***** 1.所属不同 静态属于类 非静态属于对象 2.内存中位置不同 静态 存在方法区的静态区中 非静态 存在堆内存中 3.内存中出现的时间不同 静态随着类的加载而加载 随着类的消亡而消亡 存活时间长 不建议定义过多 非静态随着对象的创建而存在 随着对象的消亡而消亡 语法: 修饰成员 (成员变量 / 成员方法)修饰成员变量的时候
[访问权限修饰符] static 类型 属性名; 修饰成员方法的时候 [访问权限修饰符] static 返回值类型 方法名(参数列表){ 方法体 }静态修饰方法: 被静态修饰的方法 为静态方法 1.只能直接访问 静态成员 包括成员变量和成员方法 不能直接访问 非静态成员 包括成员变量和成员方法 必须创建该类对象 才能调用非静态成员因为静态优先于对象存在 在静态方法加载进内存时
非静态的还没进入内存中2.在静态方法中 没有this/super 关键字
非静态方法 可以访问静态成员 也可以访问非静态成员 总结: 静态虽好 不能乱用 利: 将对象共享的数据 进行单独存储 节省内存 可以直接用类名.调用 弊: 生命周期过长 访问出现局限性 静态只能直接访问静态静态的内存图
main方法梳理: public static void main(String[] args){ } 主函数 是一个特殊的函数 可以被jvm直接调用 作为程序的入口 public 最大权限 static 静态的 在当前方法中会创建对象 需要在创建对象之前 先将main方法加载进内存 void 不确定的返回值 jvm不需要这个返回值 main 一个通用的名称 不是关键字 jvm会识别它 String[] 传入 存储String类型数据的数组 args 参数列表 名 整个main方法中 只有这个能随便写代码块: 静态代码块 , 局部代码块 , 动态代码块 以{}包裹起来的代码 被称为一个代码块局部代码块: 声明在方法中的代码块 执行时机与声明的位置相关静态代码块: 使用static关键字修饰的代码块 在类加载时执行 并且 只执行一次 在类中 方法外定义 格式: static{ 执行内容 } 用于给类中的数据进行初始化 一般用于加载驱动 jdbc驱动 动态代码块: 又称为构造代码块 声明在类中的代码块 在创建对象是执行一次 每创建一个对象 就会执行一次动态代码块 在类中 方法外定义 格式:{ 执行内容 } 执行顺序: 静态代码块>动态代码块>构造方法