1.6 Java复习之创建及调用对象
目录
面向对象思想
面向对象的三大特征
- 封装 (Encapsulation)
- 继承 (Inheritance)
- 多态 (Polymorphism)
设计对象方法
完成需求时:
先去找具有所需功能的对象来用。
如果该对象不存在,那么创建一个具有所需功能的对象。
这样简化开发并提高复用。
类对象的内存结构
成员变量
成员变量在堆空间
成员变量定义在类中,在整个类中都可以被访问。
成员变量分为类成员变量和实例成员变量,实例变量存在于对象
所在的堆内存中。
成员变量有默认初始化值。
成员变量的权限修饰符可以根据需要,选择任意一个
局部变量
局部变量只定义在局部范围内,如:方法内,代码块内等。
局部变量存在于栈内存中。
作用的范围结束,变量空间会自动释放。
局部变量没有默认初始化值,每次必须显式初始化。
局部变量声明时不指定权限修饰符
类的方法
修饰符 返回值类型 方法名 ( 参数列表) {
方法体语句;
}
当通过对象调用方法时,将方法的返回值返回给调用的当前对象
return其后不可放置语句
类的访问机制
在一个类中的访问机制:类中的方法可以直接访问类中的成员变
量。(例外:static方法访问非static,编译不通过。)
在不同类中的访问机制:先创建要访问类的对象,再用对象访问
类中定义的成员。
方法的封装
数组方法的封装
封装方法的相同部分
重载
例子:printIn()方法
注释:选中+ctrl+/ (单行注释掉)
选中+Ctrl+shift+/ (多行注释掉)
方法名同,参数列表同---》同一方法
参数列表不同,包括参数顺序,参数个数,参数类型
重载练习
与void show(int a,char b,double c){}构成重载的有:
void show(int x,char y,double z){} //no
int show(int a,double c,char b){} //yes
void show(int a,double c,char b){} //yes
boolean show(int c,char b){} //yes
void show(double c){} //yes
double show(int x,char y,double z){} //no
void shows(){double c} //no
参照上图,注释int类型方法后,则数据自动类型转换,改为调用double类型方
法
创建对象练习
1)类的创建和使用
2)
以上为两种写法,控制最后打印的半径+1
匿名类对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这
样的对象叫做匿名对象。
如:new Person().shout();
可变个数形参的方法
//以可变个数形参来定义方法
public static void test(int a ,String…books);
可变个数形参方法包含零个参数,所以实际包含方法2,方法1,
但调用,时,若无参数,仍优先调用方法2,若无方法2的声明,
则调用可变个数形参
如上图,可变个数形参相当于数组,所以以上两方法为同一方法
如下图,可变个数形参的使用方法同数组,都有.length
参数传递方式
方法,必须有其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
Java里方法的参数传递方式只有一种:值传递。即将实际参数值
的副本(复制品)传入方法内,而参数本身不受影响。
实例:
注意栈的先进后出
方法的形参名为(int i,int j)
上图理解不够清晰,现在改变方法的形参名为int m, int n
(对程序无影响,只是为了便于理解),内存结构如下
值交换成功,内存分析如下
传递的是地址值,所以交换成功(叉号表示方法执行完毕,方法
的局部变量出栈)
回顾:数组的排序
并不能交换两数组元素,因为基本数据类型变量为值的复制,而
改用数组(引用数据类型),即地址值传递,才能真正交换元素
值,正确写法如下
参数传递练习
结果为15 0 20,分析如下