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

打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

面向对象编程(基础)

类与对象

●使用现有技术解决
张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。
1)单独的定义变量解决
2)使用数组解决
  1. //单独变量来解决=>平利于数据的管理
  2. //第1只猫信息
  3. String cat1Name = "小白";
  4. int cat1Age = 3;
  5. String cat1Color ="白色";
  6. //第2只猫信息
  7. String cat2Name = "小花";int cat2Age = 100;
  8. String cat2Color ="花色";
  9. //数组===>(1)数据类型体现不出来(2)只能通过[下标]获取信息,造成变量名字和内容
  10. //   的对应关系不明确(3)不能体现猫的行为
  11. //第1只猫信息
  12. String[] cat1 = {"小白","3","白色"};
  13. String[] cat2 ={"小花","100","花色"};
复制代码
●现有技术解决的缺点分析
不利于数据的管理
效率低
===》 引出我们的新知识点类与对象哲学,道家思想
java设计者引入类与对象(OOP),根本原因就是现有的技术,不能完美的解决新的新的需求.
●类与对象的关系示意图

●上图说明
注意:从猫类到对象,目前有几种说法:1.创建一个对象⒉.实例化一个对象3.把类实例化...
当然:上面的猫也可是鱼、狗、人... java最大的特点就是面向对象。
  1. public class HelloWorld{
  2.     public static void main(String []args){
  3.         //1. new Cat()创建一只猫
  4.         //2.Cat cat1 = new Cat();把创建的猫赋给cat1
  5.         //3. cat1就是一个对象
  6.         Cat cat1 = new Cat();
  7.         cat1.name ="小白";
  8.         cat1.age = 3;
  9.         cat1.color ="白色";
  10.         //创建了第二只猫,并赋给cat2
  11.         // cat2 也是一个对象(猫对象)
  12.         Cat cat2 = new Cat();
  13.         cat2.name ="小花";
  14.         cat2.age = 100;
  15.         cat2.color ="花色";
  16.         //怎么访问对象的属性呢
  17.         System.out.println("第1只猫信息" + cat1.name +" " +cat1.age + " "+ cat1.color);
  18.         System. out.println("第2只猫信息"+ cat2.name +" " + cat2.age + " " + cat2.color);
  19.     }
  20. }
  21. //使用面向对象的方式来解决养猫问题
  22. //
  23. //定义一个猫类Cat ->自定义的数据类型
  24. class Cat {
  25.     //属性
  26.     String name;//名字
  27.     int age;//年龄
  28.     String color;//颜色
  29.     //行为
  30. }
复制代码
●类和对象的区别和联系
通过上面的案例和讲解我们可以看出:

  • 类是抽象的,概念的,代表一类事物,比如人类,猫类.…,即它是数据类型.
  • 对象是具体的,实际的,代表一个具体事物,即是实例.
  • 类是对象的模板,对象是类的一个个体,对应一个实例.

属性/成员变量
基本介绍

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

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


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

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

●看一个思考题
我们定义一个人类(Person)(包括名字,年龄)。
  1. //我们看看下面一段代码:
  2. Person p1=new Person();
  3. p1.age=10;
  4. p1.name="小明";
  5. Person p2=p1;//把p1赋给了p2, 让p2指向p1
  6. System.out.println(p2.age);
  7. //请问:p2.age究竟是多少?并画出内存图:
  8. //10
复制代码

●Java内存的结构分析
1.栈:一般存放基本数据类型(局部变量)
2.堆:存放对象(Cat cat,数组等)
3.方法区:常量池(常量,比如字符串),类加载信息
4.示意图[Cat (name, age, price)
●Java创建对象的流程简单分析
  1. Person p = new Person();
  2. p.name = "jack” ;
  3. p.age = 10
复制代码
1.先加载Person类信息(属性和方法信息,只会加载一次)
2在堆中分配空间,进行默认初始化(看规则)
3.把地址赋给p,p就指向对象
4.进行指定初始化,比如p.name =" jack"    p.age = 10
●看一个练习题,并分析画出内存布局图,进行分析
  1. //我们看看下面一段代码,会输出什么信息:
  2. Person a=new Person();
  3. a.age=10;
  4. a.name="小明";
  5. Person b;
  6. b=a;
  7. System.out.println(b.name);
  8. b.age=200;
  9. b = null;
  10. System.out.println(a.age);
  11. System.out.println(b.age);
  12. /*
  13. 小明
  14. 200
  15. b.age会出现异常.
  16. */
复制代码

成员方法

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

<ol>添加speak成员方法,输出我是一只好人
添加cal01成员方法,可以计算从1+...+1000的结果
添加cal02成员方法,该方法可以接收一个数n,计算从1+...+n 的结果
添加getSum成员方法,可以计算两个数的和
[code]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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

熊熊出没

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表