Day10
- 面向对象
1.1 传值和传引用
// 基本数据类型 保存值的大小 , 引用数据类型保存内存地址
// 传值 基本类型传递
// 局部变量 属于栈帧私有化 栈帧独享
1.2 区分成员和构造
- 构造方法 :
-
[权限修饰符] 类名(参数) {方法体}
- 作用 : 创建对象,初始化成员属性
- 方法声明 : [修饰符列表] 返回值类型 方法名(参数) {方法体}
- 方法名符合命名规则即可 : 字母,下划线,美元符号,数字,不能数字开头,不能使用关键字和保留字,建议望文知义, 驼峰命名法
- 方法目的 : 代码重用性,提高代码效率
- 问题
-
1 成员方法的方法名可以和类名相同吗?(成员方法可以和构造方法同名吗?)
-
可以和类名相同
-
2 如何区分同名的成员方法和构造方法?
-
看返回值,构造方法木有返回值,成员方法必须有返回值类型,如果没有用void表示
1.3 This
1.3.1 是什么
-
this是每个对象中,保存自身内存地址的一个引用类型的成员变量
-
所以说,this就表示对象自己,相当于我们说 "我" 一样
1.3.2 能干什么
-
this能干什么?
-
1 在成员/构造方法中,能够区分同名的局部变量和成员变量
-
2 在构造方法中,也可以用于重载调用当前类中其他的构造方法(必须在第一行)
-
3 return this 返回当前对象内存地址,可以做到链式调用
1.3.3 怎么用
1.3.3.1 区分局部变量和成员变量
1.3.3.2 重载调用构造方法
- this重载调用当前类的其他构造方法
-
必须出现在构造方法第一行
- 语法 :
-
this(参数);
1.3.3.3 链式调用
- 链式调用 : xxx.方法().方法().方法()…
- 核心点 : 前者方法返回值一定是可以调用后者方法的 引用
1.3.4 注意
This不能出现在静态上下文中
1.4 Static
1.4.1 是什么
static是一个修饰符关键字,用来区别静态和动态属性
1.4.2 能干什么
- static修饰符
-
1 static修饰的类体中的变量是静态变量
-
2 static修饰的方法是静态方法
-
3 static修饰的语句块是静态语句块
1.4.3 怎么用
- static修饰符 1 static修饰的类体中的变量是静态变量 2 static修饰的方法是静态方法 3 static修饰的语句块是静态语句块
- 语法 : static { java代码; }
- 静态语句块是在类加载阶段执行,并且只执行一次,并且是从上往下执行
- 静态变量也是在类加载阶段初始化,并且和静态语句块没有优先级之分,从上向下执行初/初始化,所以 不能再静态语句块中 提前使用静态变量,而在方法中是可以的
- 什么情况下 类加载 : 访问某个类的静态属性的时候,类加载
1.4.4 实例语句块
- 实例语句块
-
语法 : {
-
java代码;
-
}
-
实例语句块等同于成员方法,只是没有名字
- 执行顺序 : 静态语句块 > main方法 > 实例语句块(需要new对象 才会执行)
1.4.5 静态调用
- 静态调用,使用类名调用
- 那么可以使用对象调用吗? 可以
1.4.6 静态和成员的区别及应用场景
- 变量分类 :
-
静态变量 : 类中使用static修饰
-
成员变量 : 类中非static修饰
-
局部变量 : 方法中声明的变量是局部变量,作用域让当前方法使用
- 初始化时机 :
-
静态变量 : 类加载阶段初始化
-
成员变量 : 创建对象的时候初始化(构造方法)
- 应用场景 :
-
静态变量 : 类级别的,是所有对象共享的,比如一个静态变量 age = 10 ,那么说明所有对象都有这个age属性,并且值都是18
-
所有对象共有的属性和值
-
成员变量 : 对象和对象之间有相同的属性,但是可能有不同的值,非对象共享
1.5 封装
封装是把对象的所有组成部分组合在一起,封装使用访问控制符将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
作用
适当的封装可以让代码更容易理解和维护,也加强了代码的安全性。
1.5.1 软件包机制
1.5.1.1 Package
- 目标 : 当前文件的编译和运行
- 软件包机制 :
-
1 为了解决类的命名冲突问题
-
2 在java中使用package语句定义包
-
3 package语句只能出现在java源文件中的第一行
-
4 包命名通常采用公司域名倒叙
-
5 package限制的是class文件的放置位置(编译之后,把class文件放到哪里去)
-
com.tledu.oa.system
-
以上包命名可以体现出来 : 这个项目是天亮教育开发的OA项目,当前处于OA项目中的system模块
-
6 完整的类名 是带有包名的
-
7 带有包名的文件,编译应该是这样
-
javac -d 生成路径 java源文件路径
-
javac -d ./ -encoding utf-8 _01_Package.java
-
8 运行
-
java 包名.类名
- 什么是文件名 : 能够找到这个文件的全路径
1.5.1.2 Import
// 导入单个类
//import _05_Package.com.B;
//import _05_Package.com.C;
import java.util.Date;
// 导入该包下所有类
import _05_Package.com.*;
// 导入该类中所有的静态属性(静态变量/静态方法),让当前类可以不加前缀,直接调用
import static _05_Package.com.B.*;
/**
- import :
-
1 引入其他需要的类
-
2 只能出现在package语句执行,class语句之上
-
3 java核心类不需要导入,可以直接用,其他都不行
-
java.lang
- 语法 :
-
import 包名.类名; 导入单个类
-
import 包名.*; 导入该包下所有的类
- 注意 : eclipse编程过程中,按空格的时候 会自动导包,如果程序没问题,但是报错,可以查看是不是包导错了
- 导入该类中所有的静态属性(静态变量/静态方法),让当前类可以不加前缀,直接调用
-
import static _05_Package.com.B.*;
-
不建议这样使用,在当前类中,不容看出来,这个变量是谁的变量
1.5.2 权限修饰符
- private 私有化权限修饰符 ,除了自己(当前类)之外,都不能访问
- public 公共的权限修饰符 , 谁都能访问
- 不写权限修饰符的时候 : 要么当前类中使用,要么当前包中使用
- protected 受保护的权限修饰符 , 要么同类,要么同包,要么有继承关系