java基础学习笔记—面向对象

 

                                   面向对象

一、概念:面向对象是相对于面向过程而言的,面向对象和面向过程都是一种思想,一种理解方式。但是面向过程强调的是功能行为,而面向对象是将功能封装进对象,强调具备了功能的对象。面向对象是基于面向过程的,面向过程到面向对象的转变,能让复杂的问题简单化,能让我们的角色由执行者转变为指挥者。

例如:冰箱装大象的事情:有三个功能:打开  储存   关闭

 java基础学习笔记—面向对象

如图所示:面向过程强调的是打开冰箱  存储进冰箱  关闭冰箱三个功能,而面        向对象则是把这三个功能存储在冰箱这一对象中,只要找到冰箱这一对象,就可以调用这三个功能。

二、面向对象有三个特征:封装    继承    多态

    程序的开发其实就是找到相对应的对象并使用的过程。如果没有对象就创建一个对象。总的来说就是,找对象、建立对象、使用对象、维护对象的过程。

类和对象的关系:

类就是对现实生活中事物的描述,映射到java中就是class定义的类

对象就是这类事物实实在在存在的实体,映射到java中就是在堆内存中用new建立的实体。

描述事物其实就是描述事物的属性和行为,属性对应类中的变量,行为对应类中的函数,就是方法。定义类,就是在描述事物,就是定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)。

例如:建立一个描述汽车的类,其中包括汽车的颜色 轮胎的数目。 

1
2
3
4
5
6
7
8
9
class Car
{
    String color="红色";//描述颜色
    int num=4;//描述轮胎数
    void run()//运行行为
    {
        System.out.println(color+".."+num);
    }
}   

  

 

内存中的样子:

java基础学习笔记—面向对象

成员变量和局部变量的区别:

1.作用范围:成员变量作用于整个类中,有默认的初始话值。局部变量作用于函数或语句中,需设定初始化值否则不能参与运算。

2.在内存中的位置:成员变量在堆内存中,因为对象的存在,才在堆内存中存在,而局部变量存在在栈内存中。

     匿名对象的使用:

     1.当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化,但如果对一个对象进行对个成员调动,必须给这个对象起名字。   

      2.可以将匿名对象作为实际参数进行传递。

     封装:

 

封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

好处:将变化隔离、便于使用、提 高重用性、提高安全性。

封装的原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。

     private :私有,权限修饰符:用于修饰类中的成员(成员变量 成员函数)。私有只在本类中有效。私有仅仅是封装的一种形式。

例如:创建人这个类

java基础学习笔记—面向对象
class Person

{
   private  int  age;    //把年龄私有
   public void setAge(int a)  // 但对外提供访问的方式,可以加入逻辑性语句,对访问的数据进行操作,极高代码的健壮性
   {                               
       if(a>0 && a<100)
       {
           age=a;
           speak();
       }
       else
           System.out.println("feifa  age");
    }
     void speak(){
        System.out.println("age="+age);
    }
}

class PersonDemo {
     public static void main(String[] args)
     {
          Person p=new Person(); 
          p.setAge(-89);
     }
}
java基础学习笔记—面向对象

 

一个成员变量有两个访问方式:设置和获取。

 

构造函数:

特点:函数名与类名相同、不用定义返回值类型、不可以写return语句。

作用:给对象进行初始化。

注意:默认构造函数的特点、多个构造函数是以重载的形式存在的

例如:

java基础学习笔记—面向对象
class Person
{
    private String name;
    private int age;
      //构造函数
    Person()
    {
         System.out.println("A: name="+name+"   age="+age     );
    }
    Person(String n)
    {
        name=n;
        System.out.println("B: name="+name+"   age="+age  );  
    }
}      
java基础学习笔记—面向对象

 

 

构造代码块:

作用:给对象进行初始化,对象已建立就运行,而且优先于构造函数执行

区别:构造代码块是给所有对象进行统一的初始化,而构造函数是给对应的对象   

      初始化。构造代码块中定义的是不同对象共性的初始化内容。

例如 

java基础学习笔记—面向对象
class{
  {
   cry();
   xiao();
   System.out.println("aaaaaaaaaaaa");//构造代码块   初始化对象的值  优先执行  并且每一个构造函数都执行一遍
   }
}     
java基础学习笔记—面向对象

 

this 的应用:

    用于区*部变量和成员变量同名的情况,this代表它所在方法所属对象的引用。当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象,但凡本类功能内部使用了本类对象,都用this表示。

例如

1.

java基础学习笔记—面向对象
Person(int age)
{
    this.age=age;
    System.out.println("D: name="+name+"   age="+age  );   
}
java基础学习笔记—面向对象

 2.比较两个数是否相同

java基础学习笔记—面向对象
class PersongouDemo {
    public boolean compare(Person p)
    {
         return this.age==p.age;
    }

    public static void main(String[] args)
    {
        Person p1=new Person(23);
        Person p2=new Person(26);
        boolean b=p1.compare(p2);
        System.out.println(b);
    }
}
java基础学习笔记—面向对象

 

 

应用:用于构造函数之间进行调用,this语句只能定义在构造函数的第一行,

      因为初始化要先执行。

例如:

 

java基础学习笔记—面向对象
class Person{
     String name;
     int age;
     Person(String name){
          this.name=name; 
    }
    Person(String name,int age){
          this.name=name; 
          this.age=age;  
    }            
}
java基础学习笔记—面向对象

java基础学习笔记—面向对象,布布扣,bubuko.com

java基础学习笔记—面向对象

上一篇:Spring-Context之三:使用XML和Groovy DSL配置Bean


下一篇:Java函数式编程(二)