面向对象之类

---------面向对象
概述:java编程语言是纯粹的面向对象思想的语言。

现在程序开发有两个主流的方法:
(1)结构化程序设计,也叫面向过程程序设计


    结构化程序设计主张以功能/步骤来进行软件设计。
    如在解决问题时,主要是思考的是解决问题的步骤思路:
    围棋游戏:
    1.游戏开始,2,黑棋执行,3,绘制图片,4,判断输赢,
    5,白棋执行,6,绘制图片,7,判断输赢,8,返回2. 
    9,游戏结束
  结构化程序设计是以函数为程序单元 ,从一个函数开始,调用其他
  普通函数,进行一些数据处理,一直调用下去。
    设计思想:自顶而下,逐步精分,模块化
   此种方式的编程语言有C,Basic,Pascal
(2)面向对象程序设计。


       面向对象编程思想逐渐成熟起来。
      它使用类,对象,继承,封装,消息等概念来进行程序设计。
      主要从现实世界的客观事物(即对象)出发来进行开发软件系统,
      尽可能的运用人的自然思维方法 ,从客观事物来思考问题,
      认识问题。 从这些事物的本质特点,来抽象出系统所需要的类,
      作为程序的基本单元。 
      围棋游戏:
           黑白棋子及其行为,棋盘, 输赢规则    
     类是面向对象编程的基本单元,类含有一类事物的共同特征,
     类可以产生多个对象,这些对象构成了程序中所需要的数据。
     从图中我们可以看出,软件系统是由多个类组成的。
     类是一类事物的抽象体现,而这些事物都有一些状态数据。
     即Field ,如,人,有身高,体重,姓名,性别,爱好等(
      程序设计时,只关心业务所需要的数据
   )

   Field,我们称之为成员变量,有些资料称之字段,也有些资料
      称之为属性,java有property关键字 是属性的。
    类除了封装了一些事物的状态数据外,还提供了操作这些状态数据的
    方法(Method),实现逻辑。
   
    从上述内容可以总结出
            成员变量(状态数据)+方法(行为)定义=类的定义
  此类方法的编程语言:C++,java,C#, Ruby          
            
  ==================================
    完成一个“猪八戒吃西瓜”这样的逻辑
    面向过程:
    核心思想:自顶向下,逐步细分,模块化
    程序的基本单元:函数
        针对于函数来说,会接收一些数据进行处理
        然后再输出一些数据
        主函数
    函数1
       函数2    函数3
    猪八戒吃西瓜:  吃(猪八戒,西瓜)
面向对象:相对面向过程简单好学
    核心思想:使用类,对象,封装,消息,动态绑定等进行程序设计
    程序的基本单元:类。
    如:猪八戒吃西瓜。 
        首先设计猪妖类型
        然后实例化一个猪妖
        其次再初始化信息
        使用:猪八戒.吃(西瓜)
  组装电脑:  
            如果是主板,硬盘,内存条这样的大件,容易组装
      ---面向对象              
            如果是二极管,三极管,电路板这样的小件进行组装,
            很难 ---面向过程          
 面向对象要比面向过程的粒度要大,相对来说容易,简单。
 面向过程要比面向对象的性能要高,因为面向对象要进行对象的实例化,
 比较吃内存,吃性能。  

===========================================
抽象数据类型:用一堆不同类型的状态数据来描述的一种新的事物。
          
   reg:  描述电脑,
                         颜色,     尺寸,  型号,      主板,              内存,    硬盘,显卡                         
           0xFF00FF  15.6  thinkpadT460  华硕      三星       希捷 , inter
            0xFF00FF  15.6  lenovoE40    三星      三星       西数 , inter
    
    这些事物的共同行为:
                       办公
            playGame
            play
            
     用状态数据(成员变量)总结一类事物的共同特征,
     用方法总结一类事物的共同行为。
类的定义:   =成员变量+方法

    格式语法:
      修饰词  class  类名{
      type  field1;
      type  field2;
      .....
      
            修饰词 返回值类型  method1(形参){}
            修饰词 返回值类型  method2(形参){}
      .....     
   }
=====================================
   定义一个类型:Person    

需要注意的是:在类中的方法没有static,有static在使用时是:方法名(有参传参)

而没有static修饰的,调用方法为变量名.方法名(有参传参)
       成员变量(状态数据-共同特征):
         name,gender,age,birth,idcard,isMarry
       方法(行为)
         eat()
         sleep()
         work()
         sport()   
   对象:类的实例化,即类中的个体        
            如何创建对象(实例化):使用关键字new
         类名   引用变量  = new 类名();
         
  引用变量,简称引用,存储的是对象的地址信息   
  注意:测试时一定要在main方法中测试,没有main方法不能开启虚拟机运行字节码文件
  成员变量的调用:
         引用.成员变量名
 方法的调用:
         引用.方法名(有参传参)    

public class Person {
    String name;
    char gender;
    int age;
    String birth;
    String idcard;
    boolean isMarry;
    public void eat(String food) {
        System.out.println(name+"喜欢吃"+food);
    }
    public void sleep() {
        System.out.println("生日是"+birth+"的,性别是"
                            +gender+",名字叫"+name
                            +"喜欢睡觉");
    }
    public void work() {
        System.out.println(name+"特别喜欢上班");
    }
    public void sport() {
        System.out.println("婚姻状态为"+isMarry+"的"
                + "女孩特别喜欢去健身房");
    }
    /**用来描述成员变量*/
    public String info() {
        String str =   "[name="+name+
                       ",gender="+gender+
                       ",age="+age+
                       ",birth="+birth+
                       ",idcard="+idcard+
                       ",isMarry="+isMarry+"]";
        return str;
    }

//测试Person类

/* 创建一个名叫张三的对象*/
        Person p = new Person();//创建对象后,成员变量有默认值
        String info  = p.info();//方法的调用
        System.out.println(info);
        /* 成员变量的调用*/
        p.name="张三";
        p.gender = '男';
        p.age = 23;
        p.birth = "1995-11-11";
        p.idcard = "222222199511110000";
        p.isMarry = true;
        String info1 = p.info();
        System.out.println(info1);    
        p.eat("面包");
        p.sleep();
        p.work();
        p.sport();
        //创建一个叫李四的女人 
        Person p1 = new Person();
        p1.name = "李四";
        p1.gender  = '女';
        p1.age = 18;
        p1.birth = "2000-11-11";
        p1.idcard = "000000000000000000";
        p1.isMarry = true; 
        p1.eat("大米");
        p1.sleep();
        p1.work();
        p1.sport();        
        System.out.println("p1的详细信息:"+p1.info());
    }
   类与对象的关系:
             类是对象的模板,对象是类的实例化
            
 内存管理机制:
     jvm将其管理的内存分成三大主要区域:方法区,堆,栈
     方法区:当程序运行时,将所需要的class文件(类的信息)加载到此区间
     堆: 用于存储引用类型所产生的对象,如果对象有成员变量,会给成员变量分配空间
     
     栈:方法内的变量(局部变量)是在栈中开辟的
     
     

成员变量与局部变量的区别:
    成员变量(类中的,也可以叫属性):
        定义位置:在方法外,类体中
        默认值:有默认值,构造器中可以不对成员变量初始化
        内存位置:在堆内存中
        生命周期:从对象的实例化开始出现,到对象消失
    局部变量(在方法中,使用方法是所用的变量):
        位置:在方法内(包含小括号内的形参)
        默认值:没默认值,必须初始化使用
        内存位置:在栈帧中
        局部变量:从声明时开始,到方法结束后,栈帧消失时。
基本类型的变量与引用类型的变量:

   值传递: 
       基本数据类型的变量里存储的是基本类型的数据,
       int a = 5;
       int b = a;//将a里的5复制了一份,传递给了b
   
   址传递:
       引用类型的变量里存储的是对象的地址信息
       Car c = new Car();
       Car d = c;//将c里的地址信息复制了一份,传递给了d     

       两个地址指向同一个数据,所以数据改变,两个变量也发生改变
 
 
空指针异常:
   java.lang.NullPointerException
   在程序运行时,可能会出现此异常,出现的原因:
 
   null:是引用类型的默认值
   用没有地址值的变量.方法或者成员变量时,出现空指针异常,指向的东西不存在。

如何产生的?
        当引用变量没有指向任何对象时
        调用了类行中的成员变量或者方法
        reg:
            Person p =null;
            p.eat("面包");
            p.name="张三";

猜你喜欢

转载自blog.csdn.net/qq_38787854/article/details/81274248
今日推荐