java学习笔记(二)--(对象编程-类与方法)

面向过程-编程范式-c-行为

面向对象-能进行现实生活的抽象

面向接口编程

面向切面编程

函数式编程范式 -Scala,Koltin

//lamdba表达式

()-> { }

面向对象三大特征:

a.封装

       将客观事物封装为抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏。内部          操作对不可信外部而言不可见(保护性)

b.继承

        继承是指可以使用现有类的所有功能,并且在无须重复编写原有类的情况下对原有类进行功能上的扩展。(可重用)

c.多态(重要)

        多态一个类实例相同方法在不同情况下有不同的表现形式。

        多态机制是具有不同内部机构的对象可以共享外部相同接口。

名词扩展:

OOA:面向对象分析

OOD:面向对象设计

OOP:面向对象编程

UML类图(重要)架构师

2.类与对象的定义和使用

类:指的是共性的概念,而对象是一个具体的,可以使用的事物

首先先要有类(类是生产对象的蓝图),而后才可以产生对象。对象所具有的所有行为与属性,一定是在类中进行了完整           的定义。

人类

类中的组成:

1.方法(操作的行为)

2.属性(操作的数据,每个对象应该具有的特征)

    2.1Java中类的定义语法

         calss 类名称{

         属性类型  属性名称1;

         属性类型  属性名称2;

          ...

         方法1(){};

         方法2(){};

          ...

          }

      

 类中的属性和方法不在由主方法直接调用,而需要通过对象来调用。

          对象声明语法:

          类名称 对象名称 = new 类名称();

          Person per1=new Person();

          Person per2=new Person(“Dyson”,20);

    2.2类与对象内存分析

        new 关键字 - 在堆上开辟了新的空间

        栈内存:存放的是局部变量(包含各种基本数据类型以及对象引用--对象的名称)

        堆内存:保存真正对象(对象的属性数据)

         Person per=new Person();

         内存图如下:

       

对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时异常)

        垃圾空间:没有任何空间指向的堆内存空间

3.private实现封装处理 (仅限于本类中访问)

    让内部操作对外部不可见(在类的外部不能直接使用对象来操作属性)

    可以使用private对属性进行封装,称为类的私有属性。(主类和主方法称为客户端)

    范例:无封装程序

 

Java规范,1.所有私有属性要想访问与设置内容,提供对应getter与setter方法

    setter方法:进行属性内容设置与更改

    getter方法:取得属性内容

范例:扩展Person类的内容

 

类的设计原则:

        1.类中所有属性必须使用private封装

        2.属性若要被外部访问,必须定义相应的getter与setter方法

4.构造方法

    1.任何对象都应该有其对应的类,类是对象的蓝图 2.是一个唯一的标记,引用一块堆内存 3.表示开辟新的堆内 存空间 4.构造方法

(a)Person (b)per1=(c)new(d)Person();

 特点:

    a.方法名称必须与类名称 相同

    b.构造方法没有返回值类型声明 (重要)

    c.每个类必须至少存在一个构造方法(没有明确定定义的话,系统默认自动生成一个无参构造)

    d.若类中定义的构造方法,则默认的无参构造不再生成。(先赋值,再传参)

    构造方法无返回值,为什么没有void声明?

        类的组成:属性,构造方法,普通方法

        1,属性是在对象开辟堆内存时开辟的空间

        2,构造方法是在使用new后调用的

         3,普通方法是在空间开辟了,构造方法执行之后可以多次调用的

      

    编译器是根据程序结构来区分普通方法与构造方法,因此构造方法前没有返回值类型声明

        范例:使用构造方法设置对象属性

  

 javap -c   反编译命令

    构造方法的重载:参数个数不同(参数类型已经被定义)

    范例:构造参数重载

  

  建议:有若干个构造方法,请按照参数个数升序或降序

    进行类定义时遵循以下顺序:

    先定义属性->构造方法(构造方法按照个数大小排列)->普通方法

    匿名对象

    范例:

 

由于匿名对象不会有任何的栈空间所指向,所以使用一次后就成为垃圾空间。

5.this关键字

a.this调用本类属性

        this.属性名 明确表示调用类中的同名属性

        规范:在类的普通方法中访问本类属性,一定要加this关键字

         实例:

     

b.this调用本类方法

        调用普通方法 this.方法名称(参数)(虽然在本类普通方法不需要加this也可以正常调用。但建议加上,加上this的目的可以区分方法的定义来源(在继承中有用))

        调用构造方法 this(参数):(重要)(编译器语言错误)

        范例:this调用普通方法

     

范例:this调用构造方法

        修改前:

    

        修改后:

      

注意:

        a.this调用本类其他构造方法必须放在首行调用

        b.this调用构造方法不允许成环

c.this表示当前对象

        范例:this表示当前对象

    

6.static关键字(重要)

        6.1static属性(类属性)--通过类名调用(与对象无关,无对象可以直接使用)

                a.访问static属性应该使用类名称-属性名(类属性)-描述共享概念

                b.所有的非static属性(实例属性)必须在对象实例化后使用(与对象强相关,必须通过对象使用),而static属性(类属性)不受对象实例化控制

                范例:static属性的内存分析

              

                内存分析图如下:

             

        传统属性所具备的特征:保存在堆内存中,且每个对象独享属性

                描述共享属性,只需在属性前添加static关键字即可

                static属性又称为类属性,保存在全局数据区的内存之中,所有对象都可以进行该数据区的访问

                修改代码:

              

               内存图分析如下:

              

猜你喜欢

转载自blog.csdn.net/ds19980228/article/details/83040772