黑马程序员----java基础之面向对象

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

  面向对象

一、面向对象思想:在Java的学习过程中,面向对象几乎贯穿始终。

面向对象思想概述:当需求单一,或者简单时,我们一步一步的去实现没有问题,而且效率也很高,但是随着需求的增加,功能的增多,我们就会发现面对每一个步骤都很麻烦。我们就开始思考,能不能把这些功能进行封装,封装时根据不同的功能进行不同的封装,功能累死的封装在一起。当我们使用时,只需要找到对应功能的类就可以了,这就是面向对象的思想。

特点:1、是一种符合我们思想习惯的思想

           2、可以复杂的事情简单化

           3、讲文明从执行者变成了指挥者,角色发生了变化

二、类与对象概述

1、言:我们学习编程就是为了模拟现实世界的事物,现实信息化。我们如何描述现实世界的事物呢?

举例:描述学生事物

       姓名,年龄,性别

       吃饭,学习,睡觉

属性:  就是该事物的描述信息

行为:  就是该事物能够做什么

Java语言中最基本的单位就是类,所以我们可以把事物用作类的一个体现,这样我们就得到了类和事物的实现的对应关系

事物                               类

   属性------------------------成员变量

   行为------------------------成员方法

2、成员变量和成员方法

成员变量:和定义变量一样,只不过位置发生了变化,在类中,方法外

成员方法:和定义方法一样,只不过把static去掉

3、类和对象

类:是一组相关的属性和行为的集合

对象:是该类事物的具体体现

举例:类-----------学生

           对象--------班长(班长是一名学生,就是学生类中的一个据图体现)

4、创建对象

创建对象格式:类名   对象名 =   new  类名();

使用成员方法:对象名.方法名(.........)

使用成员变量:对象名.变脸名

下面我们代码说明:

 class Student
{
 
      String name;
      nt age ;
      public void eat(){
              System.out.println("班长吃饭了。。。。。。。。");
         }
      public void sleep(){
                System.out.println("班长睡觉了。。。。。。");
     }
 
}

我们首先创建一个学生类,成员变量为姓名和年龄,这是学生的属性,而每个学生都要吃饭和睡觉,这是学生的行为,用方法来实现

class Test{

               public static void main(String[] args){
                       Student s = new Student();
                       s.name = "小明";
                       s.age = 22;
                       s.eat();
                       s.sleep();
                      System.out.println(s.name+"-----"+s.age);
               }
}

运行结果为:

班长吃饭了。。。。。。。。
班长睡觉了。。。。。。
小明------------22

我们来测试一下这个类,创建一个学生对象,将名字定义为小明,将年龄定义为22,然后再调用学生共有的方法,吃饭和睡觉。这样就实现了一个类的具体体现,以后再需要学生的描述,就可以调用这个类,创建对象。

我们将相似的功能封装在学生类中,用的时候只要找到学生类就可以使用了,这就是面向对象的思想

5、成员变量的局部变量的区别

在类中的位置:成员变量在类中方法外,局部变量在方法定义中和方法声明上

在内存中的位置:成员变量在堆内存中,局部变量在栈内存中

生命周期:

成员变量随着对象的创建而存在,随着对象的消失而消失

局部变量随着放啊分的调用而存在,随着方法的调用完毕而消失

初始值不同:

成员变量有默认的初始值

局部变量没有默认的初始值,必须定义,赋值,然后才可以使用

注意:局部变量和成员变量的名称可以一致,在方法中使用的时候会采用就近原则。

6、参数传递问题

在Java中,只有值传递,没有址传递。

形式参数:

基础数据类型:形式参数的改变不影响实际参数,因为在内存中基础数据类型是实际的数据,在传递的时候是实际参数的值,并不是实际参数本身。

引用数据类型:形式参数的改变直接影响实际参数的值,对于引用数据类型,传递的是其地址值,这里相当于指向了那个地址,然后对于那个地址内的数据进行操作,原数据会被覆盖

7、匿名对象

匿名对象就是没有名字的对象,其应用场景在与调用方法,仅仅值使用一次的时候。

同时匿名对象可以作为实际参数传递

格式为:new  对象名();

解释:顾名思义,不用对其赋予名称,并且只是用一次,使用之后就会等待垃圾回收机制回收。

如果再次创建一个匿名对象,这并不与仅仅使用一次冲突,因为虽然没有名字,但同样用到了new关键字,在内存中同样新开辟了一个空间,属于两个对象。

三、封装

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

封装的好处:隐藏了实现细节,提供了公共访问方式

                      提高了代码的复用性

                      提高了代码的安全性

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

private关键字:

      1、是一个权限修饰符

      2、可以修饰成员变量和成员方法

      3、被其修饰的成员只能在本类中被访问

this关键字:

封装大多都会使用private关键字,而被private修饰之后只能在本类中使用,所以我们就需要定义方法来对成员变量进行操作,这是又会有问题,当我们的成员变量和局部变量名称相同时,局部变量就会将成员变量隐藏,就近原则。

而使用this关键字就是用来区分局部变量和成员变量,this代表本类的引用,简单说,就是谁调用我,我就代表谁

下面我代码实现一下:

class Student
{
  private String name;
  private int age ;
  public  void  setName(String name){
   this.name = name ;
  } 
  public String  getName(){
   return this.name;
  }
  public void setAge(int age){
   this.age = age;
  }
  public int getAge(){
   return this.age;
  }
  public  void eat(){
   System.out.println("班长吃饭了。。。。。。。。");
  }
  public void sleep(){
   System.out.println("班长睡觉了。。。。。。");
  }
}

将属性隐藏,把name和age用private修饰,这样外部想要访问就只能创建对象,再调用其setName和setAge方法在对其操作,保证了安全新。

class Test{

 public static void main(String[] args){
  Student s = new Student();
  s.setName("小白");
  s.setAge(18);
  s.eat();
  s.sleep();
  System.out.println(s.getName()+"-----"+s.getAge());
 }
}

只能其方法对其赋值,也只能调用其方法显示其值。

这就是封装的思想。

 

 

 

 

 

本人也在学习之中,我将博客作为我的一种交流方式,也看作是一种学习笔记,其中有很多知识在我书写过程中会有疏漏,也有很多不足,其他朋友访问的时候如果发现请不吝赐教,学习编程过程是艰苦的,希望其他朋友指出我的不足之处,我会加以改正,大家共同进步

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

你可能感兴趣的:(面向对象)