不得不说研究生生活还是比较忙的,停滞了几周的学习,现在我终于又开始了一点点学习进展。
面向对象
- 1.Java类及类的成员:属性、方法、构造器;代码块、内部类
- 2.面向对象的大特征:封装性、继承性、多态性、(抽象性)
- 3.其它关键字:this、super、static、final、abstract、interface、package、import等
面向对象与面向过程的区别
- 面向过程:强调的是问题的解决过程,以函数为最小单位。
- 面向对象:强调的是谁来解决问题,以对象/类为最小单位,将功能封装到对象中,通过调用对象的功能来解决问题。
两个重要的概念
类和对象
- 类:对一类事物的描述,是抽象的、概念上的定义
- 对象:类的实例化,是某个具体的事物,每个对象都包含类的所有特征和属性。
面向对象的实现过程
- 1.创建类,设计类的成员
- 2.创建类的对象
- 3.通过“对象.属性”或“对象.方法”调用对象的结构
- 属性 = 成员变量 = field = 域、字段
- 方法 = 成员方法 = 函数 = method
- 创建类的对象 = 类的实例化 = 实例化类
对象与对象数组的内存解析
对象的内存解析
(注 :图像来自尚硅谷)
对象由类进行实例化,实例化的对象在栈中对应一个地址,该地址指向堆空间的一个区域,该区域包含了对象的一切属性和方法的存储位置。
对象数组的内存解析
(注 :图像来自尚硅谷)
对象数组同样由类实例化所得,对象数组变量名在栈中存储,其地址指向堆空间的数组,每一个数组元素存放的地址均对应一个对象的堆内存区域。
匿名对象
创建的对象未给其赋名,只能调用一次
new Phone().sendEmail();
new Phone().playGame();
属性(成员变量)vs局部变量
相同点:
定义变量的格式:数据类型 变量名 = 变量值
不同点:
- 在类中声明位置不同:
属性直接定义在类的一对{}中,局部变量声明在方法内,方法形参,代码块内,构造器形参,构造器内部的变量。 - 权限修饰符不同
声明属性时,指明其权限,使用权限修饰符。
常用的权限修饰符:private、public、缺省、protected —>封装性
局部变量:不可以使用权限修饰符。 - 默认初始化值不同
属性:类的属性,根据其类型,都默认初始化值。
-
整型(byte、short、int、long:0)
-
浮点型(float、double:0.0)
-
字符型(char:0 (或'\u0000'))
-
布尔型(boolean:false)
-
局部变量:没默认初始化值。意味着,我们在调用局部变量之前,一定要显 式赋值。引用数据类型(类、数组、接口:null)
- 内存中加载的位置不同
属性加载到堆空间(非static),局部变量加载到栈空间
类的创建和声明,方法的创建和声明,对象的创建
例1:
package object_oriented;
/*
* 要求:
* (1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,
* 输出字符串“studying”,调用showAge()方法显示age值,
* 调用addAge()方法给对象的age属性值增加2岁。
* (2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。
*/
public class Persontest {
public static void main(String args[]) {
//创建类的对像ob
Person ob = new Person();
//给对像的属性进行赋值
ob.name = "shenyinhong";
ob.age = 22;
ob.sex = 1;
//调用对像的方法实现特定功能
ob.study();
ob.showAge();
int newage = ob.addAge(2);
System.out.println("更新后的岁数:"+newage);
}
}
//创建person类
class Person{
//创建person类的属性
String name;
int age;
int sex;
//创建person类的方法
public void study() {
System.out.println("name:"+name);
}
public void showAge() {
System.out.println("age:"+age);
}
public int addAge(int i) {
age+=i;
return age;
}
}
例2:
package object_oriented;
/*
* 3.1 编写程序,声明一个method方法,在方法中打印一个10*8 的*型矩形,在main方法中调用该方法。
* 3.2 修改上一个程序,在method方法中,除打印一个10*8的*型矩形外,再计算该矩形的面积,
* 并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
*
* 3.3 修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,
* 并计算该矩形的面积, 将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
*/
public class Matrixtest {
int m;
int n;
public static void main(String args[]) {
Matrixtest ob = new Matrixtest();
ob.m = 25;
ob.n = 12;
int area = ob.method(ob.m, ob.n);
System.out.println("矩阵面积为:"+area);
}
public int method(int x,int y) {
for(int i = 1;i <= x;i++) {
for(int j = 1;j <= y;j++) {
System.out.print("*");
}
System.out.println();
}
return x*y;
}
}