面向对象基础
概述
面向对象介绍
- 并不是一种技术,而是一种编程指导思想
- 以什么形式组织代码;以什么思路解决问题
为什么要用面向对象编程
- 因为生活中,我们解决问题时,就是采用这种指导思想去解决的。所以,我们写程序去解决问题时,如果也能采用这种思想就会使编程变得非常简单,程序也便于人理解。
学习重点
- 学习如何自己设计对象并使用
- 学习获取已有对象使用
类和对象
什么是类
- 类是对现实生活中一类具有共同属性和行为的事物的抽象
- 我们可以将其理解为对象的设计图
什么是对象
- 是能够看的到摸的着的真实存在的实体
- 小结:类是对象的抽象,对象是类的实体
对象的属性和行为
- 属性:对象具有的各种特征,每个对象的每个每个属性都拥有特定的值
- 行为:对象能够执行的操作
类的定义
- 类是什么:是对现实生活中一类具有共同属性和行为的事物的抽象,确定对象将会拥有的属性和行为。
类的组成:属性和行为 - 属性:在类中通过成员变量来体现(类中方法外的变量)
- 行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
类的定义步骤
①定义类
②编写类的成员变量
③编写类的成员方法
public class 类名{
//成员变量
变量1的数据类型 变量1;
变量2的数据类型 变量2;
…
//成员方法
方法1;
方法2;
…
}
例如:
- 类(Phoe):
- 成员变量:品牌(brand),价格(price)
- 成员方法:打电话(call),发短信(sendMessage)
package com.itheima_01;
/*
类的定义
类名:手机(Phone)
成员变量:
品牌(brand)
价格(price)
成员方法:
打电话(call)
发短信(sendMessage)
*/
public class Phone01 {
String brand;
double price;
public void call(){
System.out.println("打电话");
}
public void sendMessage(){
System.out.println("发短信");
}
}
对象的使用
创建对象 | 使用对象 |
---|---|
格式:类名 对象名 = new 类名(); | 使用成员变量:格式:对象名.变量名; |
范例:Phone p = new Phone(); | 范例:p.brand |
使用成员方法:格式:对象名.方法名(参数) | |
范例:p.call() |
package com.itheima_01;
/*
创建对象
格式:类名 对象名 = new 类名();
范例:Phone p = new Phone();
使用对象
1:使用成员变量
格式:对象名.变量名
范例:p.brand
2:使用成员方法
格式:对象名.方法名(参数)
范例:p.call()
*/
public class PhoneTest {
public static void main(String[] args) {
Phone01 ph = new Phone01();
System.out.println(ph.brand);
System.out.println(ph.price);
ph.brand = "小米";
ph.price = 4399;
System.out.println(ph.brand);
System.out.println(ph.price);
ph.call();
ph.sendMessage();
}
}
IDEA小技巧:
分块;
练习
学生类的定义和使用
- 需求:定义一个学生类,然后定义一个学生测试类,在学生测试类中完成成员变量和成员方法的使用。
分析:
- 定义一个学生类:
类名:Student
成员变量:name,age
成员方法:study(),doHomeWork(); - 定义一个学生测试类
类名:StudentDemo
因为要做测试,所以有一个主方法:main方法 - 在学生测试类中通过对象完成成员变量和成员方法的使用。
给成员变量赋值,输出成员变量的值
调用成员方法
package com.itheima_02;
/*
学生类
*/
public class Student {
//成员变量
String name;
int age;
//成员方法
public void study(){
System.out.println("学生在学习!");
}
public void doHomework(){
System.out.println("学生在做家庭作业!");
}
}
package com.itheima_02;
/*
学生测试类
*/
public class StudentDemo {
public static void main(String[] args) {
//创建对象
Student st = new Student();
//给成员变量赋值
st.name="白小春";
st.age=25;
System.out.println(st.name+st.age);
//调用成员方法
st.study();
st.doHomework();
}
}
对象内存图
java内存分配
- java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分。因为每一片区域都有特定的处理数据方式和内存管理方式。
栈(虚拟机栈):所有局部变量都会在栈内存中创建 - 局部变量:定义在方法中的变量或者方法声明上的变量
- 方法执行都会加载到栈中进行
- 局部变量的特点:随着方法的调用而存在,随着方法的调用完毕而消失。
堆:所有对象及其实例变量和数组都将存储在此处
- 简答理解为:new出来的东西,都存储在堆内存。
- 每一个new出来的东西都有一个地址值,使用完毕,会在垃圾回收器空闲时被回收
- 实例变量(成员变量)有初始化值:
基本数据类型:整数:0,浮点数:0.0;布尔:false,字符:空字符
引用数据类型:null
单个对象内存图
package com.itheima_02;
/*
单个对象
*/
public class StudentTest01 {
public static void main(String[] args) {
//创建对象
Student s = new Student();
System.out.println(s);
//使用成员变量
System.out.println(s.name + "," + s.age);
s.name = "张曼玉";
s.age = 28;
System.out.println(s.name + "," + s.age);
//使用成员方法
s.study();
s.doHomework();
}
}
多个对象内存图
package com.itheima_02;
/*
多个对象
*/
public class StudentTest02 {
public static void main(String[] args) {
//创建第一个对象并使用
Student s1 = new Student();
s1.name = "林青霞";
s1.age = 30;
System.out.println(s1.name + "," + s1.age);
s1.study();
s1.doHomework();
//创建第二个对象并使用
Student s2 = new Student();
s2.name = "张曼玉";
s2.age = 28;
System.out.println(s2.name + "," + s2.age);
s2.study();
s2.doHomework();
}
}
多个引用执行相同
package com.itheima_02;
/*
多个引用指向相同
*/
public class StudentTest03 {
public static void main(String[] args) {
//创建第一个对象并使用
Student s1 = new Student();
s1.name = "林青霞";
s1.age = 30;
System.out.println(s1.name + "," + s1.age);
//把第一个对象的地址赋值给第二个对象
Student s2 = s1;
s2.name = "张曼玉";
s2.age = 28;
System.out.println(s1.name + "," + s1.age);
System.out.println(s2.name + "," + s2.age);
}
}