面向对象编程(基础)
类与对象
public class Object01 {
public static void main(String[] args) {
//单独变量来解决 => 不利于数据的管理(把一只猫的信息拆解了)
//定义两个变量
//第一只猫的信息
String cat1Name = "小白";
int cat1Age = 8;
String cat1Color = "white";
//第二只猫的信息
String cat2Name = "小黑";
int cat2Age = 9;
String cat2Color = "black";
// 数组 =》 1、数据类型体现不出来 2、cat1[1] 只能通过下标获取信息,
// 造成变量名字和内容的对应关系不明确
// 3、不能体现猫的行为
//第一只猫的信息
String[] cat1 = {
"小白","3","white"};
//第二只猫的信息
String[] cat2 = {
"小黑","4","black"};
//现有技术的缺点分析
//不利于数据管理 效率低
// ====> 引出我们的新知识点 类与对象
//java的设计者 引入类与对象 (OOP)
// 根本原因 现有的技术 不能完美的解决新的需求
}
}
一个程序就是一个世界 ,有很多事物 (对象[属性,行为])
- 类与对象的关系示意图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hayHLdiC-1634096105647)(C:\Users\cxt\AppData\Roaming\Typora\typora-user-images\image-20210925204051672.png)]
- 类与对象的快速入门
public class Object01 {
public static void main(String[] args) {
//单独变量来解决 => 不利于数据的管理(把一只猫的信息拆解了)
//定义两个变量
//第一只猫的信息
String cat1Name = "小白";
int cat1Age = 8;
String cat1Color = "white";
//第二只猫的信息
String cat2Name = "小黑";
int cat2Age = 9;
String cat2Color = "black";
// 数组 =》 1、数据类型体现不出来 2、cat1[1] 只能通过下标获取信息,
// 造成变量名字和内容的对应关系不明确
// 3、不能体现猫的行为
//第一只猫的信息
// String[] cat1 = {"小白","3","white"};
//第二只猫的信息
// String[] cat2 = {"小黑","4","black"};
//现有技术的缺点分析
//不利于数据管理 效率低
// ====> 引出我们的新知识点 类与对象
//java的设计者 引入类与对象 (OOP)
// 根本原因 现有的技术 不能完美的解决新的需求
//使用OOP 面向对象解决
//实例化一只猫【创建一只猫对象】
// Cat cat1 = new Cat();
Cat cat1 = new Cat();
cat1.name="小白";
cat1.age=100;
cat1.color="白色";
cat1.weight = 10;
Cat cat2 = new Cat();
cat2.name="小花";
cat2.age=101;
cat2.color="花色";
cat2.weight=20
//怎么访问对象的属性
System.out.println("第一只猫的信息" + cat1.name+cat1.age
+cat1.color + cat1.weight);
System.out.println("第二只猫的信息" + cat2.name+cat2.age
+cat2.color + cat2.weight);
}
}
//使用 面向对象的方式来解决养猫问题
//定义一个猫类 Cat --> 类 自定义的数据类型
class Cat {
//属性
String name;
int age;
String color;
double weight;
}
- 类是抽象的,概念的,代表一类事物,比如人类 ,猫类 即它是数据类型
- 对象是具体的,实际的 代表一个具体的事物 即,是实例
- 类是对象的模板,对象是类的一个个体 对应一个实例
对象在内存中的存在形式
属性的概念(成员变量)
-
属性/成员变量
-
基本介绍
从概念或叫法:成员变量 = 属性 成员变量是用来表示属性的
-
属性是类的一个组成部分,一般是基本数据类型,也可以是引用类型[对象 、数组]
-
-
属性的注意事项和字节
-
属性的定义语法同变量 示例:访问修饰符 属性类型 属性名
-
访问修饰符1 控制属性的访问范围
修饰符有四种:public ,proctected, 默认, private
-
-
属性可以是基本数据类型,也可以是引用类型[对象 、数组]
-
属性如果不复制,有默认值,规则和数组一致 如果没有赋值,有默认值 int 0 short 0 byte 0 long 0 float 0.0 double 0.0
-
如何创建对象
-
先声明在创建
Cat cat ;//声明对象
cat = new Cat()//创建
-
直接创建
Cat cat = new Cat()
如何访问属性
- 基本语法
对象名.属性名;
示例:
cat.name;
cat1.age;
类与对象的内存分配机制(重点)
public class Object03 {
public static void main(String[] args) {
Person01 p1 = new Person01();
p1.age = 10;
p1.name = "小明";
Person01 p2 = p1; //把p1 赋给了p2 让 p2指向 p1
System.out.println(p2.age);
}
}
class Person01{
int age;
String name;
}
-
类与对象的内存分配机制
-
-java的内存的结构分析
1.栈:一般存放基本的数据类型(局部变量)
2.堆:存放对象、数组 (引用类型)
3.方法去:常量池(常量,比如字符串),类加载信息
4.示意图
-
-
java创建对象的流程简单分析
Person01 p1 = new Person01(); p1.age = 10; p1.name = "小明";
1.先加载Person的类信息在方法区
2.在堆中分配空间 ,进行默认初始化(有默认值 int 0 short 0 byte 0 long 0 float 0.0 double 0.0 ,String null)
3.把地址赋给 p1;p1就指向对象了
4.进行指定的初始化
比如: p1.age = 10;
p1.name = “小明”;
方法
成员方法
在某些情况下,我们需要定义成员方法(简称方法)。比如 人类:除了有一些属性外,我们人类还有一些行为,比如,可以说话,跑步…学习,还可以做算术题,这时要用成员方法才能完成。
- 成员方法的快速入门
- 添加speak成员方法 输出 我是一个好人
- 添加cal01成员方法,可以计算1+…+n的结果
- 添加cal02成员方法,该方法可以接收一个数n,可以计算1+…+n的结果
- 添加getSum成员方法,可以计算两个数的和
import java.util.Scanner;
public class Method01 {
public static void main(String[] args) {
//创建一个对象 类的实例化
Person02 person02 = new Person02();
//方法的使用
// 方法写好了 如果不去调用 ,不会输出
// 先创建 一个对象 ,然后调用方法即可
person02.speak();//调用方法
person02.cal01();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要计算的数字");
int n = scanner.nextInt();
person02.cal02(n);
System.out.println("请输入第一个要计算的数字");
int n1= scanner.nextInt();
System.out.println("请输入第二个要计算的数字");
int n2= scanner.nextInt();
//调用getSum方法
//把 getSum方法返回的值 赋给 returnRes
int returnRes = person02.getSum(n1,n2);
System.out.println("returnRes="+returnRes);
}
}
class Person02 {
String name;
int age;
//方法
//添加speak成员方法 输出 我是一个好人
//public 表示方法是公开的
//void 表示方法没有返回值
// speak 方法名 ()形参列表
// { } 方法体 ,可以写我们要执行的代码
// System.out.println("我是一个好人"); 表示我们的方法输出一句话
public void speak(){
</