Day08 static、this、封装、继承
1.1 传值和传引用
注意 : 传引用,传递的是地址,如果地址传递到另一个地方,则拥有相同地址的变量,可以找到同一个对象,那么操作的数据也是相互的
1.2 This
1.2.1 是什么
this是每个对象中,保存当前内存地址的一个引用类型变量
this代表当前对象的意思
谁调用的当前方法,this就是谁
**1.2.2 能干什么**
在成员方法或者构造方法中,用来区分同名的局部变量和成员变量
this不能出现在静态环境下
return this;返回当前对象的内存地址,可以做到链式调用
用在构造方法中,调用当前类中重载的构造方法this(xxx),但必须在第一行
1.2.3 怎么用
this用法
不能出现在静态上下文中
链式调用
1.3 Static
static 是一个修饰符,用来区别静态和成员属性
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块
静态属性是在类加载阶段执行初始化的
什么时候类加载?访问一个类的静态属性的时候把该类载入静态区
静态变量和静态方法
静态语句块
静态语句块等价于静态方法,只不过它没有名字,不能重复执行
自动执行,并且只执行一次,类加载完直接执行,在main方法被调用之前执行
多个静态语句块按照从上往下执行
执行结果
1.3.1 静态属性调用
1.3.2静态和成员的区别
两个变量的生命周期不同
成员变量随着对象的创建而存在,随着对象的回收而释放
静态变量随着类的加载而存在,随着类的消失而消失
调用方式不同
成员变量只能被对象调用
静态变量可以被对象调用,还可以被类名调用
别名不同
成员变量也称为实例变量
静态变量称为类变量
数据存储位置不同
成员变量数据存储在堆内存的对象中,所以也叫对象特有数据
静态变量数据:存储在方法区(的静态区),所以也叫对象的共享数据
1.3.3 动态语句块
实例语句块语法
{
java代码;
}
等价于成员方法
而成员属性依赖对象
创建对象之后立刻执行,并且每建一个对象就执行一次
1.4 封装
封装就是把对象的所有组成部分组合在一起,使用权限修饰符将数据隐藏起来
控制用户对数据的不合理操作
作用:适当的封装可以让代码更容易理解和维护,也加强了代码的安全性
1.4.1 软件包机制
1.4.1.1 Package
软件包机制目标:文件的编译和运行
文件名:找到这个文件的全路径就是文件名,
1为了解决命名冲突问题(在类名之前,加前缀,package)
2java中使用package语句定义包3package规定class文件的保存位置(并不是, java源文件)
4package语句只能出现在java文件的第一行
5package命名规则一般采用公司域名倒序项目.模块
com.tledu.oa.system;是天亮公司开发的OA系统,当前是system模块
6完整的类名,是带有包名
7带有package语句的java文件编译
javac-d生成路径-encoding编码源文件路径
javac-d./-encoding utf-8 A.java
8带有package语句的class文件运行
java包名.类名
java com.tledu.zrz.A
1.4.1.2 Import
import语句:用于引入当前类中需要的其他包中的类
import语句,只能在class语句之上,package语句之下
java.lang.下面的所有类,使用不需要导入,因为java.lang是核心包
可以使用java.util.;来导入对应包下的所有类
可以使用java.util.Date;来导入指定的类
1.4.1.3 注意
编写代码时,当我们按空格 或者是 回车的时候,会自动导包,需要注意,是否导入的正确
1.4.2 权限修饰
规定一个数据的访问范围
1.5 继承extends
1.5.1 是什么
Java中只支持单继承,不支持多继承,这样使继承关系比较简单,一个类 只有一个父类,易于程序管理,当然为了解决单继承功能变弱的问题,java又提出了接口,一个类可以实现N个接口
如果一个类,没有显示继承几个父类的话,则该类默认继承java.lang.Object
不管如何继承,最终任何类都直接/间接的成为Object的子类
Object是java提供的根类(祖宗)
Private不能被继承,但是可以通过getter/setter对私有属性进行操作
构造方法不能被继承
目的 : 代码重用
最大的功能扩展 : 方法覆写
1.5.2 能干什么
1 代码重用,父类进行编码之后,子类可以直接使用
2 如果父类的功能不能满足子类需求,还可以对功能进行重写
3 使用多态
1.5.3 怎么用
class 子类名 extends 父类名{
}
1.6 Super
1.6.1 是什么
表示父类型特征,不是父类对象引用
This表示当前对象引用
1.6.2 能干什么
1用在成员方法和构造方法中可以通过super去访问父类的属性
可以通过super区别子类和父类同名的属性
2 super不能出现在静态上下文中,尽管在成员方法/构造方法中,也必须是super.xxx的形式
3用在子类构造方法中,使用super(xxx)去调用父类的构造方法
如果子类构造方法中没有显示定义this(xxx)/super(xxx)则默认第一行有个super()调用父类的无参构造
并且this(xxx)和super(xxx)这种写法,都必须出现在构造方法第一行,所以这两种写法不能同时存在
1.6.3 怎么用
类名 : 区分同名的局部变量和静态变量
This : 区分同名的局部变量和成员变量
Super : 区分父子类中同名的变量和方法
1.6.3.2 Super注意事项
1.6.3.3 调用父类的构造方法