java之旅 (第七天)面向对象与面向过程 类 局部变量与成员变量 构造方法 匿名对象

面向对象:
    面向过程(PO):
    一种非常古老的编程思想,顾名思义就是该思想是站在过程    的角度去思考问题,
    强调的是功能的行为,指的是先完成什么功能,后完成什么    功能,而每一个功能都使用函数(方法)把
    这些步骤一步一步的进行实现,需要使用的时候就依次调用    对应的功能就可以了。
    说人话:
    提倡和注重的是每一个功能都来使用方法进行操作,而继续    使用某一功能的时候就继续挨着方法就可以了
    面向过程的最大的问题在于随着系统的膨胀,面向过程根本    没有办法应付,最终很有可能导致系统崩溃
    为了解决这样的一个问题,有人提出了面向对象的编程思    想。

    面向对象(OO):
    是一种基于面向过程的编程,顾名思义,该思想是站在面向    过程的基础上去改善为面向对象
    原则是将多个功能合理的放到到一个对象当中,然后指挥对    象来做事。强调的是具备某些功能的对象。

    1.面向对象的优势和特点:
    面向对象是一种更加符合我们思想的思维方式,稳定性好,    可重用性强,易于开发大型架构的软件,具备非常良好的可    维护性
    
    2.点说,面向过程就是每实现一个功能都得去调用子方    法,而面向对象的编程,就是把功能都封装在一个类中,当    创建一个对象时,对象自己能完成一系列的功能

    3.面向对象的三大特征:
    封装:
    封装是指将对象的细节和实现隐藏起来,然后通过公共的    访    问方式对外提供对象的功能
    继承:
    是实现面向对象代码复用的重要手段通过子类继承父类的方    法,子类可以是一种特殊父类,可以继续扩展也可以反复的    使用父类的方法
    多态:
    是可以直接把子类对象赋值给父类对象,但运行的时候依然    表现出子类的行为特征,这也就意味着同一类型的对象在运    行的时候可以表现出不同的姿态(行为特征)

    4.面向对象和面向过程的举例:    
    买电脑:
    面向过程:想清楚需要什么电脑-->百脑汇-->对比品牌-->确    定参数-->讨价还价-->电脑买回家
    面向对象:想清楚需要什么电脑-->交给班长(给钱)-->班长买    回来
    洗衣服:
    面向过程:买个筒子-->装水-->脱衣服-->放水-->放84-->脚    踩两下-->倒脏水-->放清水-->飘两下-->拿出来-->拧干-->    晒
    面向对象:找班长-->班长完成

    注意:
    千万不要误解为面向对象就一定会优于面向过程
    面向对象本质上还是基于面向过程,如果你的项目非常非常    小 那么面向过程的开发能力甚至优于面向对象

    

 

类:
    类:类是一组相关的属性(成员变量)和行为(成员方法)的集    合,是一个抽象的概念
    对象:是该类事物具体表现的存在,也是具体存在的个体(类    的实例化)
    成员变量:和之前的变量的定义的格式是一样的,但是位置不    同,在类中方法外
    成员方法:和之前的方法的定义格式是一样的,只不过我们想    去掉static
    
    创建对象:
    类名 对象名 = new 类型();  //加括号表示构造函数
    
    用对象的成员方法:
     对象名.方法名();

    对象的比较:
    每一次new出来的东西,都会有新的地址值 新的空间
    对于对象来说,而"==",比较的是地址值是否相同,而不是内    容是否相同,因此所有的引用类型都需要用.equal()方法比    较
    注:
    String类型的equal方法直接调用就可以(s.equal("ni"))
    数组的equal()方法需import java.util.Arrays 
    Arrays.equal(str1,str2);
    自定义的类型需要自己重写equal()

    对象的生命周期:
    从new出来的时候开辟空间,到垃圾回收器回收的时候结束生    命
    垃圾:内存当中的某一块空间没有被一个栈内存引用的时候,    才是垃圾
    垃圾产生时,不一定会运行GC,GC是自动调度 我们没有办法    进行干预(garbage collection )

    补充:
    1.在C++中,成员变量(数据成员)  方法成员(成员函数)
    2.在C++中,class类是独立于main方法之外的,可以不执行    类。但是java中的main函数是在类中,因此至少执行一次    类。但是两种语言都是先从main函数开始执行。
    3.栈内存:存放Java语言的所有局部变量(方法内)以及自      定义对象的引用
      堆内存:存放Java中所有new出来的东西
      方法区:方法区中包含的都是在整个程序中永远唯一的元            素,如class,static变量。
    4.C++中,数据成员不可以直接在定义时赋初值,而java中成      员变量是可以在定义时赋初值的。
           5.目前无法定义对象数组:Student []arr=new Student [5]
    arr[0].name="nihao";  //编译器会报错,说空指针
    因此,目前只能:
    Student stu=new Student();
    Student stu1=new Student();
    Student [] arr={stu,stu1};

    

局部变量 成员变量:
    在类中的位置不同:
    成员变量 类中方法外
    局部变量 方法内或者方法声明上 (main方法也在class中)
    
    在内存中的位置不同:
    成员变量 堆内存
    局部变量 栈内存

    生命周期不同
     成员变量 随着对象的存在而存在,随着对象的消失而消失
    局部变量 随着方法的调用而存在,随着方法的调用完毕而消    失
    
    始化值不同
    成员变量 有默认的初始化值
    局部变量 没有默认的初始化值,必须先定义,赋值,才能使    用。

    注:
    1.局部变量的命名可以和成员变量的命名一致,但是调用    遵    循就近原则
    2.在C++中,在函数中,有局部变量与全局变量之分(在同一    函数内,允许同名变量,在类中也允许名变量,但是需要用    this->a来区分数据成员与形式参数)在java中,同一方法中    不允许同    名变量,但是类中就允许成员变量与局部变量同    名(需用    this.来区分成员变量与局部变量)
    区分:
    C++中this是指针,装载对象的地址,需要this->,(*this)l    来访问
    java中this是对象的引用,直接this.方法就可以访问
    3.new 出来的对象只是给成员变量在new中分配空间,但是类    的方法中的局部变量都是在栈中分配内存的,并且引用也是


构造方法:
    构造方法: 
    给对象进行数据初始化(定义及初始化,需传参)
    
    格式:
    a.方法名和类名一致
    b.没有返回值类型,甚至连void也没有
    c.没有具体的返回值    
    
    举例:
    class Student{
    private String name ="toobug";
    private int age=18;
    public Student() {
        name = "刘飞龙";
        age=30;
        System.out.println("我是构造");
    }
}

    注:
    1.java中,成员变量(成员方法)默认为public,需要手动    加上private,而且必须每一个都写上属性关键字
    C++中,数据成员,成员函数默认属性为private,并且可以    用 private: 表示一堆东西(数据 函数)共一个属性
    2.java中的成员变量允许赋初值,C++不允许(只能在构造函    数以及成员函数中赋值以及改变)
    3.在栈中与方法区都有一个main,并且它们的地址都是一样      的(相关联)
    4.在我们之前的所有代码当中,其实都有使用构造方法,但    是我们从来没自己去定义过构造(系统自带的无参构造函    数)
    5.如果我们手动给出了任意构造方法,系统将不再提供默认    的无参构造。如果这个时候还想继续使用无参构造,就必须    自己手动给出,而且建议永远提供无参构造


匿名对象(临时变量):
     a.调用方法,仅仅只使用一次的时候进行使用    
    注:
    1.如果使用多次,这种定义变量的方式不适合 因为会产生    多个对象,而且是垃圾对象        
    2.好处:匿名对象使用完毕之后就是垃圾,垃圾可以被垃圾    回收器进行回收
    举例:
    Student s = new Student();
    s.show();
    s.show();
    System.out.println("--------------------");
    new Student().show();
    new Student().show(); 
    //其实这里是一个新的内存地址,没有赋值给栈内的变量,    用完一次就成了垃圾,等着被回收

    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值