您的位置:首页 > 职场人生

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

2015-02-17 14:03 134 查看
面向对象(Object Oriented)简称OO,使软件这几中一种比较流行的思想或思维模式。与此不同的模式还有面向过程。在java中,一切都是对象。“万物皆对象”。要理解OO,需要先理解对象和类的概念。

类和对象的概念:

在现实生活中,我们通常用事物具备的各种特征来描述事物(对象)。也称为事物的属性。对于对象来说每个属性都有特定的值。

类就是类别也叫数据类型。类就是对象的数据类型。编程语言的主要作用是用来描述现实生活中的事物,例如:计算机并不知道什么是整数,什么是字符,因此编程语言创造出了数据类型告诉计算机10是整数,a是字符,这就是数据类型的作用。

定义类:

世间万物都有类别(数据类型),编程语言无法提供的数据类型需要我们自己去定义。

创建和使用对象:

  创建对象:

  类名   对象名  = new  类名();     Book     book = new   Book();

  对象的使用:(属性和方法属于对象需要通过“.”进行操作)。

  调用属性:     对象名.属性名              book.price = 12.9    book.name = “java”

  调用方法:     对象名.方法名()    book.sail();

  当执行Person p = new Person(“小强” , 35); 时,到底在内存中做了什么?

1,将Person.class文件加载进内存。

2,p是对象句柄(变量),那么在栈内存中开辟一个变量空间p。

3,在堆内存中给对象分配空间,并分配内存地址值

4,属性进堆内存,并进行默认初始化。

5,调用对应的构造方法进行对象初始化,对象初始化完毕。

6,将对象内存地址赋值给p变量,让p变量指向该对象。

成员变量和局部变量:

1.   作用范围

成员变量:定义在类中,可以被类中的任意方法访问。

局部变量:只在它所属的局部大括号中有效,一般出现在某个方法中。

2.   存储情况

成员变量(非静态):存储在堆内存中,随着对象的存在而存在。随着对象的回收而消失。(静态成员变量会在方法区中加载,不依赖于对象存在)

局部变量:存储在栈内存中,当方法被调用,或者语句被执行的时候才存在。

当方法运行完毕,或者语句运行完毕时,局部会被自动释放,所以成员变量也称为实例变量。

3.   初始化情况

成员变量:在堆内存中有默认初始值。

局部变量:必须手动初始化后,才能被使用。

封装:

封装的概念:  将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的好处:    隐藏类的实现细节;方便给加入控制语句;方便实现修改;只能通过规定方法访问数据。

封装的实现:   

1.   使用private修饰符使属性私有化

2.   给属性提供公有的getter/setter方法

public  class Home {

  private String  address;     //家庭地址

  private double deposit;     //家庭存款

  public String getAddress() {

         return address;

  }

  public void setAddress(String  add) {

         address = add;

  }

  public double getDeposit() {

         return deposit;

  }

  public void setDeposit(double  de) {

         deposit = de;

  }

}

       Private修饰符

     是一个访问权限修饰符;用于修饰类中成员(属性和方法);被私有化的成员只能在本类中有效访问;当成员私有化后,提高了安全性。但是访问权限降低了。这时可以通过对外提供公有的getter/setter方法间接对其进行访问。好处是:可以在方法中队成员变量的访问进行控制。

构造方法:

      构造方法可以在创建对象时给属性赋值。分为无参构造方法和有参构造方法。通过无参构造方法创建出来的对象都是一样的,于是可以通过有参构造方法来对对象灵活地赋予初始值。

public class Person

{

    private String name;

    private int age;

    public Person(String name,int age){

            this.name = name;

            this.age =  age;

    }



public static void main(String[]  args){

      Person  p1=new Person("张三",22);



构造方法和普通方法的区别:

      功能上:构造方法是给对象初始化的;普通方法是为对象满足的某种功能而存在的。

      执行上:构造方法是在创建对象时自动调用;普通方法在调用的时候执行。

      语法上:构造方法不需要返回类型,包括void,方法名跟类名一致。普通方法必须具备返回值。

 

This关键字:

This关键字只能用于方法体内。而且只能在非静态的方法中使用。当一个对象创建后,虚拟机JVM就会给这个对象分配一个引用自身的指针。就是this。This只和特定的对象关联,而不和类关联,同一个类中的不同对象有不同的this。简单来说:哪个对象调用this所在的方法,this就代表哪个对象。

public Person(String name,int age) {   //有参构造方法

           this.name= name;

           this.age= age;

    }

方法参数或者方法中的局部变量与成员变量(属性)同名的情况下,成员变量(属性)会被屏蔽,此时要访问成员变量(属性)则需要使用“this”关键字。

每个子类构造方法的第一条语句,都是隐含地调用super(),Java要保证先初始化父类。

this()和super()不能同时出现在一个构造方法里面,因为this必然会调用其它的构造方法,其它的构造方法必然也会有super语句的存在,相当于调用了两次父类的构造方法,这是不允许的。

this()必须放在第一行,否则就会隐含地调用super()。

匿名对象:

       匿名对象是对象的简化形式,没有名字。由于没有名字,所以一般应用于那种只需要调用一次方法的场景。

Static关键字

      static是静态修饰符。用于成员变量和成员方法;可以通过类名直接调用。随着类的加载而加载。生命周期最长,优先于对象存在。静态属性被类的所有对象共享。

静态的利弊:

利处:随意对象的共享数据提供单独空间的存储,节省空间,没有必要每一个对象都存储一份。可以被类名直接调用,比较方便。

弊处:生命周期过长,访问出现局限性。

代码块

代码块就是被{ }包裹的部分,Java中的代码块分为:

1.普通代码块,又称为局部代码块,存在于方法体中

2.构造代码块,又称为初始化代码块,在使用new关键字创建对象时执行,且先于构造方法执行

3.静态代码块,被static直接修饰的代码块,在类被加载时就执行,只执行一次,且先于main方法执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: