java面向对象(一)

这篇文章是稍微总结了一些Java面向对象里面的常见语法,用法及需要注意的地方。

1.类与对象

对象:真实存在的唯一的事物.
类: 同一种类型的事物公共属性与公共行为的抽取。

找对象的方式:
  方式一: sun已经定义好了很多了类,我们只需要认识这些类即可创建对象使用。
  方式二: 我们需要自定义类,通过自定义类创建对象。

自定义类创建对象的三步骤:
1. 自定义类。
        格式:
            class 类名{
                事物的公共属性使用成员变量描述。
                事物的公共行为使用函数描述。
            }

2. 通过自定义类创建对象。
        格式: 
            类名 变量名 =  new 类名();

3. 访问(设置)对象的属性或者调用对象的功能。
    1.访问对象属性的格式:
        对象.属性名.
    2.设置对象的属性:
        对象.属性名 = 数据。
    3. 调用对象的功能
        对象.函数名();


    类体可以由多个属性、方法、构造器组成。
    注意:类的修饰符可以是public、final 或省略这两个。类名只要是合法的标识符.
一个类里可以包含三种最常见的成员:构造器、属性、方法。

2.方法

  方法是类或对象行为特征的抽象,方法是类或对象最重要的组成部分。
  Java里的方法不能独立存在,所有的方法都必须定义在类里。方法在逻辑上要么属于类,要么属于对象。

  **Java语言里方法的所属性主要体现在以下几个方面:
  1.方法不能独立定义,方法只能在类体里定义。
  2.逻辑意义上来看,方法要么属于该类本身,要么属于该类的一个对象。
  3.永远不能独立的执行方法,执行方法必须使用类或对象作为调用者。

**定义方法的格式语法:
[修饰符] 方法返回值类型 方法名(形参列表) {….方法体….}

    方法中的修饰符可以是,publicprotected,private,static,
 final,abstract,其中访问控制符只能出现一个,abstract ,final 只能出现其一.

  返回值类型可以是基本类型和引用类型,如果无返回值,要用void 来声明形参列表,可以由零到多组组成,参数之间用逗号(“,”)隔开.

  static 是一个特殊的关键字,译为”静态”,所有有static 修饰的叫类属性,类方法,类成员.

**方法的参数传递机制
  Java里方法的参数传递方式只有一种:值传递。
  所谓值传递,就是将实际参数值得副本传入方法内,在方法内操作的是这个传入的副本,而参数本身不会受到任何影响。

**方法的重载
  Java 允许在一个类里定义多个同名方法,只要形参列表不同即可.
  所以方法的重载只要满足两个条件(两同一不同):
  1.同一个类中,方法名相同;
  2.形参不同。和返回值类型无关.所以在调用这些方法时要传入不同的参数值.

3.成员变量与局部变量

  成员变量指的是在类范围里定义的变量。
  局部变量指的是在一个方法内定义的变量。
  不管是成员变量还是局部变量都遵守相同的命名规则。
  成员变量分为类属性和实例属性.对于类属性无论通过类还是对象来访问都是访问同一个对象,只要一个对象改变了类属性,那么其他对象对应的类属性也改变了.
  成员变量不用显式初始化,只要定义了一个类属性或实例属性,系统默认进行初始化。

**局部变量可分为三种:
形参
  方法局部变量
  代码块局部变量.
  与成员变量不同的是除了形参外,其他局部变量都必须显式地初始化,
  Java 里允许局部变量和成员变量重名。这样局部变量会覆盖成员变量,这时通过this 来调用实例的属性.

**成员变量的初始化
当类被加载时,类成员就在内存中分配了一块空间。
当对象被创建时,实例成员就在内存中分配了内存空间。
实例变量与实例共存亡;类变量与类本身共存亡。

**局部变量的运行机制
局部变量仅在方法内有效。
当方法执行完成时,局部变量便会自动销毁。

**初始值的区别:
    1. 成员变量是有默认的初始值。
            数据类型     默认的初始值
            int                 0
            float               0.0f
            double              0.0
            boolean            false
            char                 ' '
            String(引用数据类型) null

    2. 局部变量是没有默认的初始值的,必须要先初始化才能使用。

4.封装

面向对象三大特征:
    1. 封装
    2. 继承
    3  多态
封装是面向对象的三大特征之一。

封装包含两方面含义:
 合理隐藏。
 合理暴露

封装的步骤:
1. 使用private修饰需要被封装的属性。
2. 提供一个公共的方法设置或者获取该私有的成员属性。
         命名规范:
            set属性名();
            get属性名(); 

public :  公共的。
  public修饰的成员变量或者方法任何人都可以直接访问。

private : 私有的。
  private修饰的成员变量或者方法只能在本类中进行直接访问。

default 默认的。包访问权限

protected 受保护的。子类中也能访问

封装的好处:
1. 提高数据的安全性。
2. 操作简单。 
3. 隐藏了实现。

5.构造器

  **构造器的作用:在创建对象时执行初始化,系统会默认的进行初始化。 
  **构造函数的定义的格式:

修饰符  函数名(形式参数){
    函数体...
}

**构造器要注意的细节:
1. 构造器 是没有返回值类型的。
2. 构造器的方法名必须要与类名一致。
3. 构造器并不是由我们手动调用的,而是在创建对应的对象时,jvm就会主动调用到对应的构造器。
4. 如果一个类没有显式的写上一个构造方法时,那么java编译器会为该类添加一个无参的构造方法的。
5. 如果一个类已经显式的写上一个构造方法时,那么java编译器则不会再为该类添加 一个无参 的构造方法。
6. 构造函数是 可以在一个类中以函数重载的形式存在多个的。


**构造方法与普通方法的区别: 
1. 返回值类型的区别:
    1. 构造方法是没有返回值类型 的,
    2. 普通方法是有返回值类型的,即使方法没有返回值,返回值类型也要写上void。
2. 方法名的区别:
    1. 构造方法的方法名必须要与类名一致,
    2. 普通方法的方法名只要符合标识符的命名规则即可。
3. 调用方式的区别:
    1. 构造方法是在创建对象的时候由jvm调用的。
    2. 普通方法是由我们使用对象调用的,一个对象可以对象多次普通的方法,
4. 作用上的区别:
    1. 构造方法的作用用于初始化一个对象。
    2. 普通方法是用于描述一类事物的公共行为的。

**构造器的重载:
  构造器的重载和方法的重载一样,都是方法名相同,形参列表不相同。
  在构造器中可通过this来调用另外一个重载的构造器。

6.类的继承

**继承的特点:
  Java通过关键字extends来实现,实现继承的类称为子类,被继承的类称为基类、超类、父类。父类是大类,子类是小类。
  Java的继承是单继承,每个子类最多只有一个直接父类。

**子类继承父类的语法格式如下:

修饰符 class subclass extends superclass {
。。。。。。

子类扩展了父类,将可以获得父类的全部属性和方法,但不能获得父类构造器
Java里的继承都是单继承,也就是只能有一个直接的父类,但可以有n个间接父类。

7.方法重写

方法重写的前提: 必须要存在继承的关系。

方法的重写: 子父类出了同名的函数,这个我们就称作为方法的重写。

什么是时候要使用方法的重写:父类的功能无法满足子类的需求时。

方法重写要注意的事项:
1.方法重写时, 方法名与形参列表必须一致。
2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。
4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。
        Exception(最坏)
        RuntimeException(小坏)

方法的重载:在一个类中 存在两个或者两个 以上的同名函数,称作为方法重载。

方法重载的要求:
1. 函数名要一致。
2. 形参列表不一致(形参的个数或形参 的类型不一致)
3. 与返回值类型无关。

8.this关键字

this关键字代表了所属函数的调用者对象。

this关键字作用:
1. 如果存在同名成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据。
2. 在一个构造函数中可以调用另外一个构造函数初始化对象。

this关键字调用其他的构造函数要注意的事项:
1. this关键字调用其他的构造函数时,this关键字必须要位于构造函数中 的第一个语句。
2. this关键字在构造函数中不能出现相互调用的情况,因为是一个死循环。

this关键字要注意事项:
1. 存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java 采取的是“就近原则”的机制访问的。)
2. 如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么java编译器会在该变量的 前面添加this关键字。

9.super关键字

super关键字代表了父类空间的引用。

super关键字的 作用:
1. 子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
2. 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。

super关键字调用父类构造方法要注意的事项:
1. 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法上面加上super()语句。
2. super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。
3. super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。

super关键字与this关键字的区别:
1. 代表的事物不一致。
        1. super关键字代表的是父类空间的引用。 
        2. this关键字代表的是所属函数的调用者对象。
2. 使用前提不一致。
        1. super关键字必须要有继承关系才能使用。
        2. this关键字不需要存在继承关系也可使用。
3. 调用构造函数的区别:
        1. super关键字是调用父类的构造函数。
        2. this关键字是调用本类的构造函数。

10.多态

  多态:Java 引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。两个相同类型的引用变量,由于它们实际引用的对象的类型不同,当它们调用同名方式时,可能呈现出多种行为特征,这就是多态。
  简而言之多态就是一个对象具备多种形态。(父类的引用类型变量指向了子类的对象或者是接口 的引用类型变量指向了接口实现类的对象)

多态的前提:必须存在继承或者实现关系。

例如:
动物  a  = new   狗();

多态要注意的细节:
1.  多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
2.  多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
3.  多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
4.  多态情况下,不能访问子类特有的成员。

总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。

多态的应用:
  1. 多态用于形参类型的时候,可以接收更多类型的数据 。
  2. 多态用于返回值类型的时候,可以返回更多类型的数据。

多态的好处: 提高了代码的拓展性。





jdk提供了一个java开发工具(javap.exe)给我们进行反编译的。
    javap 反编译工具的使用格式:
    javap -c -l -private 类名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值