熊熊出没 发表于 2022-8-27 06:39:12

Java学习-第一部分-第一阶段-第六节:面向对象编程(基础)

面向对象编程(基础)

类与对象

●使用现有技术解决
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。
1)单独的定义变量解决
2)使用数组解决
//单独变量来解决=>平利于数据的管理
//第1只猫信息
String cat1Name = "小白";
int cat1Age = 3;
String cat1Color ="白色";
//第2只猫信息
String cat2Name = "小花";int cat2Age = 100;
String cat2Color ="花色";
//数组===>(1)数据类型体现不出来(2)只能通过[下标]获取信息,造成变量名字和内容
//   的对应关系不明确(3)不能体现猫的行为
//第1只猫信息
String[] cat1 = {"小白","3","白色"};
String[] cat2 ={"小花","100","花色"};●现有技术解决的缺点分析
不利于数据的管理
效率低
===》 引出我们的新知识点类与对象哲学,道家思想
java设计者引入类与对象(OOP),根本原因就是现有的技术,不能完美的解决新的新的需求.
●类与对象的关系示意图
https://img2022.cnblogs.com/blog/2592433/202207/2592433-20220714212000772-917207525.png
●上图说明
注意:从猫类到对象,目前有几种说法:1.创建一个对象⒉.实例化一个对象3.把类实例化...
当然:上面的猫也可是鱼、狗、人... java最大的特点就是面向对象。
public class HelloWorld{
    public static void main(String []args){
      //1. new Cat()创建一只猫
      //2.Cat cat1 = new Cat();把创建的猫赋给cat1
      //3. cat1就是一个对象
      Cat cat1 = new Cat();
      cat1.name ="小白";
      cat1.age = 3;
      cat1.color ="白色";
      //创建了第二只猫,并赋给cat2
      // cat2 也是一个对象(猫对象)
      Cat cat2 = new Cat();
      cat2.name ="小花";
      cat2.age = 100;
      cat2.color ="花色";

      //怎么访问对象的属性呢
      System.out.println("第1只猫信息" + cat1.name +" " +cat1.age + " "+ cat1.color);
      System. out.println("第2只猫信息"+ cat2.name +" " + cat2.age + " " + cat2.color);
    }
}
//使用面向对象的方式来解决养猫问题
//
//定义一个猫类Cat ->自定义的数据类型
class Cat {
    //属性
    String name;//名字
    int age;//年龄
    String color;//颜色
    //行为
}●类和对象的区别和联系
通过上面的案例和讲解我们可以看出:

[*]类是抽象的,概念的,代表一类事物,比如人类,猫类.…,即它是数据类型.
[*]对象是具体的,实际的,代表一个具体事物,即是实例.
[*]类是对象的模板,对象是类的一个个体,对应一个实例.
https://img2022.cnblogs.com/blog/2592433/202207/2592433-20220714212011778-1477993093.png
属性/成员变量
基本介绍

[*]从概念或叫法上看:成员变量=属性= field(字段)(即成员变量是用来表示属性的,授课中,统一叫属性)。例如: Car(name,price,color)
[*]属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义猫类的int age就是属性。
●注意事项和细节说明

[*]属性的定义语法同变量,示例:访问修饰符属性类型属性名;
[*]属性的定义类型可以为任意类型,包含基本类型或引用类型
[*]属性如果不赋值,有默认值,规则和数组一致。
如何创建对象


[*]先声明再创建
Cat cat ;
cat = new Cat();
[*]直接创建
Cat cat = new Cat();
如何访问属性

●基本语法
对象名.属性名;
案例演示赋值和输出
cat.name ;
cat.age;
cat.color;
类和对象的内存分配机制(重要)

●看一个思考题
我们定义一个人类(Person)(包括名字,年龄)。
//我们看看下面一段代码:
Person p1=new Person();
p1.age=10;
p1.name="小明";
Person p2=p1;//把p1赋给了p2, 让p2指向p1
System.out.println(p2.age);
//请问:p2.age究竟是多少?并画出内存图:
//10https://img2022.cnblogs.com/blog/2592433/202207/2592433-20220714212028503-1455702491.png
●Java内存的结构分析
1.栈:一般存放基本数据类型(局部变量)
2.堆:存放对象(Cat cat,数组等)
3.方法区:常量池(常量,比如字符串),类加载信息
4.示意图[Cat (name, age, price)
●Java创建对象的流程简单分析
Person p = new Person();
p.name = "jack” ;
p.age = 101.先加载Person类信息(属性和方法信息,只会加载一次)
2在堆中分配空间,进行默认初始化(看规则)
3.把地址赋给p,p就指向对象
4.进行指定初始化,比如p.name =" jack"    p.age = 10
●看一个练习题,并分析画出内存布局图,进行分析
//我们看看下面一段代码,会输出什么信息:
Person a=new Person();
a.age=10;
a.name="小明";
Person b;
b=a;
System.out.println(b.name);
b.age=200;
b = null;
System.out.println(a.age);
System.out.println(b.age);
/*
小明
200
b.age会出现异常.
*/https://img2022.cnblogs.com/blog/2592433/202207/2592433-20220714212039155-361995601.png
成员方法

基本介绍
在某些情况下,我们要需要定义成员方法(简称方法)。比如人类:除了有一些属性外(年龄,姓名..),我们人类还有一些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用成员方法才能完成。现在要求对Person类完善。
●成员方法快速入门

<ol>添加speak成员方法,输出我是一只好人
添加cal01成员方法,可以计算从1+...+1000的结果
添加cal02成员方法,该方法可以接收一个数n,计算从1+...+n 的结果
添加getSum成员方法,可以计算两个数的和
public class HelloWorld{    public static void main(String []args){      //方法使用      //1方法写好后,如果不去调用(使用),不会输出      //2.先创建对象,然后调用方法即可      Person p1 = new Person();      p1.speak();//调用方法      p1.cal01();//调用cal01方法      p1.cal02(5);//调用cal02方法      //调用getSum方法,同时num1=10, num2=20      //把方法 getsum返回的值,赋给变量 returnRes      int returnRes = p1.getSum(10,20);      System.out.println("getsum方法返回的值=" + returnRes);    }}class Person {    String name;    int age;    //方法(成员方法)    //添加speak成员方法,输出“我是一个好人”    //解读    //1.public 表示方法是公开    //2.void :表示方法没有返回值    //3.speak() : speak是方法名,()形参列表    //4.方法体,可以写我们要执行的代码    //5.System.out.println("我是一个好人");表示我们的方法就是输出一句话    public void speak(){      System.out.println("我是一个好人");    }    //添加cal01 成员方法,可以计算从1+..+1000的结果    public void cal01(){      //循环完成      int res = 0;      for(int i = 1; i
页: [1]
查看完整版本: Java学习-第一部分-第一阶段-第六节:面向对象编程(基础)