day07面向对象复习+课后练习
第一部分:面向对象上
两个要素:类和对象
- 类是对一类事物的描述,是抽象的、概念上的定义
- 对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
创建Java自定义类
步骤:
- 定义类(考虑修饰符、类名)
- 编写类的属性(考虑修饰符、属性类型、属性名、初始化值)
- 编写类的方法(考虑修饰符、返回值类型、方法名、形参等)
类的结构:属性和方法
类的成员之一:属性
### 变量的分类:成员变量与局部变量
类和对象的创建
- 创建对象语法: 类名 对象名 = new 类名();
- 使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)
对象的创建和使用:匿名对象
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
使用情况
- 如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
- 我们经常将匿名对象作为实参传递给一个方法调用。
类的访问机制:
- 在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。 (例外:static方法访问非static,编译不通过。)
- 在不同类中的访问机制:先创建要访问类的对象,再用对象访问类中 定义的成员
成员变量(属性)和局部变量的区别
对象的内存解析
-
堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象 实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的
对象实例以及数组都要在堆上分配。 -
通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。
-
局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、
long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。 -
方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
方法举例与声明的格式
什么是方法(method、函数):
- 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中 也称为函数或过程。
- 将功能封装为方法的目的是,可以实现代码重用,简化代码
- Java里的方法不能独立存在,所有的方法必须定义在类里。
![](https://img-blog.csdnimg.cn/img_convert/a12b1715469f367bfe2621a21af9e4f1.png
方法的分类:按照是否有形参及返回值
方法使用中的注意点
- 如果方法有返回值,则必须在方法声明时,指定返回值类型,同时方法中需要使用return关键字来返回指定类型的变量或者常量
- 方法被调用一次,就会执行一次
- 没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可 以不必使用return语句。如果使用,仅用来结束方法。
- 定义方法时,方法的结果应该返回给调用者,交由调用者处理。
- 方法中只能调用方法或属性,不可以在方法内部定义方法
课后练习 1:类的设计
定义Person类
package demo04;
public class Person {
String name;
int age;
String sex;
public void study(){
System.out.println("studying");
}
public void showAge(){
System.out.println("age:"+age);
}
public int addAge(int i){
age+=i;
return age;
}
}
定义测试类
package demo04;
/*要求:(1)创建Person类的对象,设置该对象的name、
age和sex属性,调用study方法,输出字符串
“studying”,调用showAge()方法显示age值,调用
addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的
不同对象之间的关系
*/
public class PersonTest {
public static void main(String[] args) {
Person p1=new Person();
p1.name="黄景瑜";
p1.age=29;
p1.sex="男";
p1.study();
p1.showAge(