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

来源:互联网 发布:graphic 软件 编辑:程序博客网 时间:2024/05/21 22:56

面向对象(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方法执行

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 停!反派总裁不准亲亲抱抱系统 逃荒:嫁给黏唧唧人鱼后吃不消了 荒野直播:影帝的小娇娇藏不住了 限时暗恋 被迫给反派续命后在娱乐圈爆火了 将军夫人你莫走 在源能世界中觉醒全知之眼 我去华娱探探路 带娃虐渣,女将军穿年代后杀疯了 带着妈妈活到末世结束 十八线女配穿进后宫演顶流 斗罗:重生胡列娜在武魂殿当团宠 大景女星官 报!娘娘在种田路上福星高照 靠美食成为星际首富 夫人她每天都想摸鱼摆烂 寒门重生女 穿书:侧妃她要改剧本 作妖小青梅总想遇见我 重生成团宠文炮灰 全师门就我一个人是废柴 反派家的团宠崽崽是神兽 越界臣服 重生之鱼刺救我狗命 修仙:哈哈哈鸡汤来咯 萌宝来袭:带着空间穿九零 快跑,宿主她不对劲 小哭包她软软糯糯 超甜!重生后左相被我撩到腿软 超真实探案推理游戏 惊!霍总怀里的小娇妻失忆后想逃婚 我和暴君有个崽 荒野求生我靠传播非遗爆红全世界 肆意难撩 女尊之夫郎他娇软又呆萌 穿书后,小茶精在疯批怀里撒娇 拯救六界从谈恋爱开始 重生后前世宿敌说要养我 她的沙雕又暴露了 在虐文里绑定了男主系统 我在末世成了领主大人