JAVA基础(九)面向对象

 引用https://www.cnblogs.com/xue-er/p/9356553.html。

 

 

面向过程、面向对象

 

l  面向过程:可以理解为执行者思考的方式。如何一步步解决问题。

 

l  面向对象:可以理解为分配工作发号施令的人,如何简单方便的完成问题。

 

面向对象的优点

 

l  面向对象思维方式是一种更符合人们思考习惯的思想

 

l  面向过程思维方式中更多的体现的是执行者(自己做事情),面向对象中更多的体现是指挥者(指挥对象做事情)。

 

l  面向对象思维方式将复杂的问题简单化。

 

类,对象

 

 对象是事物存在的实体,如人类,书桌,高楼等。需要使用这些具体的事物,Java使用具体的事物,需要通过new关键字来创建这个事物的具体实例。

 

对象分为两部分,即静态部分与动态部分。

 

1.  静态部分就是不动的,叫做属性,任何对象都具备其自身属性。

 

2.动态部分就是行为(方法),如人这一类,会哭,笑,走,跑等。

 

 

属性和行为封存起来就称为类。

类的实质就是封装对象的属性和行为(方法)的载体。反过来说具有相同属性和行为的一类实体称为类。                                     类就是同一类事物的统称。类也可以说是创造对象的一个模板。

 

类中对象的行为是以方法的形式定义的,对象的属性以成员变量的形式定义的。

 

局部变量和成员变量区别

 

区别一:定义的位置不同

 

定义在类中的,变量是成员变量

 

定义在方法中或者{}语句块里面的变量,是局部变量(有范围)

 

区别二:在内存中的位置不同

 

成员变量存储在堆内存的对象中(属于对象 对象存在堆内存 它就也在堆内存)

 

局部变量存储在栈内存的方法中(属于方法 方法进栈)

 

区别三:生命周期不同

 

成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失(gc垃圾回收机制,命长

 

局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失,命短

 

区别四:初始化不同

 

成员变量因为在堆内存中,所有默认的初始化值

 

局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。

 

 

 

成员变量:有默认初始化值  string 为null,int 为0。

局部变量:没有默认初始化值 必须赋值

只要不是基本数据类型就是引用数据类型;

 

 

举例

 

对面向对象有了了解之后,我们来说说在具体问题中如何使用面向对象去分析问题,和如何使用面向对象。

 

我们把大象装冰箱为例进行分析。

 

在针对具体的需求,可以使用名词提炼的办法进行分析,寻找具体的对象。

 

需求:把大象装冰箱里

 

对象:大象、冰箱

 

分三步:

 

1、打开冰箱门

2、将大象装进去

3、关闭冰箱门

 分析发现打开、装、关闭都是冰箱的功能(方法)。即冰箱对象具备如下功能:

 冰箱打开

冰箱存储

冰箱关闭

代码描述,上述需求中有两个具体的事物 大象   冰箱

public class dxbx {

    public static void main(String[] args) {

    //创建冰箱对象

        bx bx=new  bx();

       //创建大象对象

        dx  dx=new dx();

         dx.color="粉色";

           //方法调用     格式    对象.方法名,调谁用谁

        //打开冰箱

        bx.open();

        //把大象装去//这里的dx是实参; dax形参

;用dx(堆里的地址)给dx ssdax形参赋值

        bx.play(dx); //因为bx是一个地址;类在堆里已经被赋值了;这里直接通过地址dx和门牌号.color就直接取出了黄色

        //关闭冰箱门

        bx.down();

    }

}

 

 

大象类

 

public class dx {

      String  color;

      void speak() {

       System.out.println("我是"+color+"的大象");
    }
}
 

 冰箱类

public class bx {

    //打开功能s

         public void open() {

         System.out.println("打开冰箱门");

         } 

    //放进去功能       dx自己定义的类,声明这个dx类,只能传dx这个类型 dax形参

         public void play(dx dax) {

        // 方法随便写,只是为了看出传的谁

         dax.speak();

         }  

    //关闭功能

         public void down() {

         System.out.println("关闭冰箱门");

         }

}

 

完整的类包含属性和方法;

 

 

类的声明

属性

语法:权限修饰符 class 类名{

       //类体

                               }

说明:

.访问权限修饰符 只能是 public 或者 默认(default)

.类名只要是一个合法的标识符即可 要求首字母必须大写

.尽量使用单个或者多个有意义的单词来命名

注意:

.一个java文件中可以写多个类编译后会生成多个.class字节码文件

.一个java文件中最多只能有一个被public修饰的类 该类的名字 必须和 java源文件名保持一致

.一个java文件中如果只有一个类 并且该类不是用public修饰的类名 和 java文件名可以不一样

  1. 类中成员变量的定义 通过对象引用.成员变量名 的方式进行调用

 

方法

构造方法定义:用来创建对象的 并且可以给对象的属性进行初始化赋值

语法格式:[访问权限修饰符] 类名(形参列表){

                                  方法体

                           }

特点:

.方法名和类名 全相同(大小写都要一模一样)

.没有返回值类型 连void都没有

.没有具体的返回值 return   return; 可以写 但是不能有任何返回值  默认是不写的 完全不推荐写

.在创建对象的时候 系统会帮我们调用构造方法   构造方法 不用 对象的引用.方法名 调用

 

 

 

下方举例

.写在类的方法不要加Static直接写返回值;

 

public 返回值类型方法名(参数列表){};

 

例子

 

publicvoid run(int a) {}

 

.写在方法里面的是局部变量;在调用方法时以局部变量为主就近原则,

 

局部变量;

 

publicclass car {

   // 属性

   String color;

   intgulu;

}

 

 

 

成员变量;

 

    publicvoid run() {

       String color;

       intgulu;}

 

最终的执行结果是局部变量,变量的就近原则;

 

         6.但是加上this就能解决;this是本类变量;代表的是Class car;car类加上this后就和局部变量没有关系了

 

  This 不能写在main里面;

 

 

 

this.关键字

.调用本类中的成员方法

.访问本类的成员变量

.调用本类的构造方法

.this()不能使用在普通方法里  必须在构造方法的第一句

对象   调用方法的格式   对象.方法名

 

 

 

posted @ 2019-07-30 11:31  腊月出去玩  阅读(146)  评论(0编辑  收藏  举报