`
sky_eye
  • 浏览: 4503 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

黑马程序员_java面向对象

阅读更多

                                  黑马程序员_java面向对象

 

 

                 ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

 一、面向对象

         相对于面向过程来说,java是面向对象的。面向过程,是强调的功能行为;面向对象,实际是将功能进行封装,就是把我们需要的功能装在一个盒子里,当需要这个功能的时候,只需要把这个盒子拿过来,让盒子自己进行运行这个功能,而对象就是具有这个功能的盒子。

          宏观上来说,就是万物都是对象,微观上来说就是一个具有一定功能的实体或者虚体,想冰箱,电视,甚至人,都具有一定的功能和技能,我们不必知道他们具体功能是怎么实现的,只需要知道他们有什么功能,让他们做可以了。举例来说,就是我会一些东西,比如会用办公软件,会编程,那么公司就会用我这些技能,而我就以那个对象,公司就是指挥调用的人。

 

面向对象的三个特征:   封装    继承     多态

 

开发其实就是找对象使用,没有对象,就创建一个对象。

找对象,建立对象,使用对象,维护对象。

 

二、类和对象的关系

        按我自己的理解来说,类就是一张二维图纸或者是三维模拟图,对象就是根据这些图纸生产出来的具体实物,如果类是手机图纸,那么对象就是手机。这样来说,类就是描述对象的特征和属性的,对象就是一个具体的实体。

          类:就是对显示生活事物的描述               在java中就是class定义的类

          对象:就是这类事物,实实在在的个体    就是java中在堆内存中用new建立的实体

//类就是描述

class    Car

{      描述事物的属性和行为

       具体java程序一般包括数据类型和函数

      int num = 4;.................................................成员变量

      void   run()

   {     System.out.println(num);}

}

成员变量和局部变量:

1)作用范围:

成员变量定义在类中,作用与整个类中

局部变量作用于函数汇总,或者语句中

 2)内存中未知

成员变量:在堆内存中,因为对象的存在,才在内存中存在

局部变量:存在栈内存中

3)初始化

成员变量:系统默认初始化为0,即我们命名是可以不赋值,成员变量即可参加运算。

局部变量:必须编程时候我们给局部变量初始化,否则参与不了运算。

 

//建立对象用new来表示  具体格式为:  类名  名称  =   new  类名();

内存管理和数组类型建立的时候相似,只是没有相应的角标。

要调用对象里的功能,java里格式为:对象.对象成员   。程序如下:

class  CarDemo
{
     public static void main(String[] args)
     {
             Car c = new Car();................................建立一个对象,c就是一个类类型变量,类类型变量指向对象

            

             c.num = 8;.............................................调用对象里的功能

              new Car() .num=9;...............................匿名调用对象
      }
}

注意上面程序中的匿名对象的应用

new  Car().num=5;

new Car().color='bule';

new  Car().run();

这其实是三个匿名对象,彼此之间没有联系。匿名对象使用方式一、当对对象的方法(此处注意是方法)只调用一次时,可以用匿名对象来完成,这样写比较简化,如果对一个对象进行多个成员调用,必须给这个对象起个名字。二、使用方式二:可以将匿名对象作为实际参数进行传递。

 

三、对象三大特征之一:封装

         1、封装概述

         隐藏对象的属性和实现细节,仅对外提供公共访问方式。

         将变化隔离,便于使用,提高重用性,提高安全性。之前学习的函数就是最小的封装体。

          2、封装,关键字 private

          private  关键字   私有的意思   权限修饰符中的异类,用于修饰类中的成员(成员变量和成员函数)

将类中的成员变量和函数私有化后,类以外即使建立了对象也不能直接访问。

程序例子:

lass Person
{
 private int age ;................................................此处age私有化了,只有在本类中有效
 void speak()
 {
  System.out.println("age="+age);
 }
}
class PersonDemo

{
 public static void main(String[] args)
 {
  Person p = new Person();
  p.age =20;......................................................................此时,对age访问就失效了
  p.speak();
 }
}

想要在访问被私有化的变量时,就要在本类中建立一个函数,可以调用被私有化的成员变量。

一个成员变量通常都会对应两个访问方式:一个设置,一个获取

可以在本来中加入以下程序:

public void setAge(int a )....................................用于设置成员变量的值
 {
  age=a;
 }
 public int getAge()................................................用于获取成员变量值
 {
  return age;
 }

注意:私有仅仅是封装的一种表现形式。

 之所以对外提供访问方式,就因为可以再访问方式中加入逻辑判断语句。对访问的数据进行操作,提高代码的健壮性。即可以在本类的方法中,加入判断或者其他语句,对类外访问数据进行控制。

3、构造函数

      构造函数的名字与类名相同,而且这个函数不需要定义返回值类型,不可以写return语句。其作用是给对象进行初始化。

      对象以建立的时候,就会调用与之对应的构造函数,就像一个物体的基本特性,只要对象产生,构造函数就会运行,起具体的作用就是给对象进行初始化。如果我们在编程的时候,没有定义构造函数,系统就会给与一个默认的空参数的构造函数Person( ){ }  。当我们在类中自定义了构造函数虎,默认的构造函数就没有了。

class Person
{
     Person().......................................................此处就是构造函数
       {
            System.out.println("person run");
        }
}

构造函数可以进行重载,即是在建立对象的时候,给不同的对象进行不同的初始化。一个类可以产生很多对象,可调用相对应的构造函数。就像如下程序:

Person()............................................构造函数Person()
 {
  System.out.println("A");
 }
 Person(String n)   .....................................构造函数 Person(String n)
 {
  name = n;
  System.out.println(name);

 }
 Person(String n,int a)  ................................. 构造函数Person(String n,int a)
 {
  name = n;
  age = a;
  System.out.println(name+","+a);
 }

       此时就可看出一般函数和构造函数的不同:

构造函数在对象一建立的时候就会运行一次,给对象初始化

一般函数是对象调用才会执行,是给对象添加对象具备的功能。

 一个对象建立,构造函数只运行一次。

而一般方法可以被该函数调用多次。

//构造代码块    { System.out.println("ABCD") }        

构造代码块也是给对象进行初始化,对象一建立就运行,而且优先于构造函数执行。相对于构造函数,构造代码块是给所有对象进行统一初始化,而构造函数是给想对应的对象进行初始化。所以,构造代码块是可以给不同对象的共性进行定义和初始化。

4、this关键字

Person(String name)
 {
  name = name;

 }

 这个程序中,name输出为null。就是说局部中定义两个name,都是局部变量,通俗来说就是局部变量现在局部找相对应的局部变量,没有的话,才会到本类中找成员变量。所以,此时就用关键字this区分成员变量和局部变量同名的情况。程序变为:

Person(String name)
 {
  this.name = name;...............加上个this关键字。

 }

 this 代表它所在函数所属对象的引用,就是说哪个对象调用this所在的函数,this就代表这个对象。

this的应用:当定义类中的功能是,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。

 

注意构造函数间的调用只能用this 关键字

Person(String name)
 {
  this.name = name;

 }
 Person(String n,int a)
 {
  this(name);....这个函数间调用语句必须是在第一行,初始化先执行函数自己初始化,再执行自定义初始化
  age = a;
  System.out.println(name+","+a);

}

构造函数间不可以重复调用,就是你调用我,我调用你,否则相当于死循环。

 

 

 

               ---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics