OOP
由类
为组成单位,
类
的内部由成员
构成,
成员包括:成员变量(Field) 与 成员方法(Method)
类
:相当于一个模板/蓝图
- 相同特征事物的抽象描述(抽象上的人)
对象
:通过这个蓝图 创建(new)出来的 “实例
(instance)” 。
- 可以
new
很多实例,每个实例都是独立的。- 对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。
- (具体的人)
- OOP设计 -> 类的设计 -> 类的成员设计
堆 Heap:
new 出来 对象的数据 都放这, 存储对象的数据
栈 Stack:
存放 引用类型 地址(指向堆空间数据)
以及 值类型 的具体值
方法区 Method Area:
常量、静态变量、class字节码…
与类 有关 成员变量
根据类的创建而创建 , 类or 对象 消失而消失
在类内,方法外
与方法 有关 局部变量
方法执行到存在 , 方法执行完毕跟随方法一起消失
在类内的方法内
static
可以将成员变量分为两大类,静态变量
和非静态变量
。
其中静态变量又称为类变量,非静态变量又称为实例变量或者属性。
相同点:
不同点:
方法
是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。方法区
中的字节码文件
(.class)中存储。栈
内存中运行。
入栈
动作,即出栈
,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。方法名相同,参数列表不同(个数、类型),与修饰符、返回值类型无关
重载方法调用:
JVM通过方法的参数列表,调用匹配的方法。
先找个数、类型最匹配的
再找个数和类型可以兼容的,如果同时多个方法可以兼容将会报错
在JDK 5.0 中提供了Varargs(variable number of arguments)机制。
即当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变个数的形参
。
格式:
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String...books);
举例:
需求:n个字符串进行拼接,每一个字符串之间使用某字符进行分割,如果没有传入字符串,那么返回空字符串""
public class StringTools {
String concat(char seperator, String... args){
String str = "";
for (int i = 0; i < args.length; i++) {
if(i == 0){
str += args[i];
}else{
str += seperator + args[i];
}
}
return str;
}
}
//测试:
StringTools tools = new StringTools();
System.out.println(tools.concat('-'));
System.out.println(tools.concat('-',"hello"));
System.out.println(tools.concat('-',"hello","world"));
System.out.println(tools.concat('-',"hello","world","java"));
Java里方法的参数传递方式只有一种:值传递
。
即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
数据值
”传递给形参地址值
”传递给形参new
完对象时,所有成员变量
都是默认值,用构造器
可以为当前对象的某个或所有成员变量直接赋值。
没写构造,java 会提供一个默认的无参构造
构造器的修饰符只能是权限修饰符,不能被其他任何修饰。
比如,不能被static、final、synchronized、abstract、native修饰,不能有return语句返回值。
实现封装性 即 控制类或成员的可见性
具体修饰的结构:
外部类:public、缺省
成员变量、成员方法、构造器、成员内部类:public、protected、缺省、private
一般成员实例变量都习惯使用
private
修饰,再提供相应的public权限的get/set
方法访问。
对于final
的实例变量,不提供set()方法。
对于static final
的成员变量,习惯上使用public
修饰。
is-a 的关系 , 父类与子类 , JAVA是单继承,多实现
多态(Polymorphism) 在继承的前提条件下,实现多态。 即 “ 父类引用指向子类对象 ”
编译时,看左边;运行时,看右边。
1、在类的属性中,可以有哪些位置给属性赋值?
① 默认初始化
② 显式初始化
③ 构造器中初始化
④ 通过"对象.属性"或"对象.方法"的方式,给属性赋值
JavaBean
UML类图
UML
(Unified Modeling Language,统一建模语言),用来描述软件模型和架构的图形化语言。
UML类图
可以更加直观地描述类内部结构(类的属性和操作)以及类之间的关系(如关联、依赖、聚合等)。