面向对象

###类与对象
概念: 类(class)和对象(object)是面向对象方法的核心概念。类是对一类事物进行描述,是抽象的、概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例(instance)

1.1 类的语法结构:
Java语言中定义类的语法如下:

[修饰符] class类名{
定义构造方法;
定义属性;
定义方法;
}

注意(类中各成员之间的定义顺序对程序没有任何影响)。

1.2 对象创建和使用
① 在Java语言中创建对象的根本途径是,通过 new关键字调用某个类的构造方法,即可创建该类的实例。创建对象的步骤如下:
(1)声明对象。对象的声明和基本类型的数据声明在形式上是一样的。具体格式如下:
类名 对象名
例如:
Hero hero;
(2)实例化对象。使用new关键字调用类的构造方法实例化对象,具体格式如下:
对象名=new构造方法()
例如:
hero= new Hero()
② 如果访问权限允许,类中定义的方法和属性都可以通过类的实例来调用。调用属性或方法时要使用“.”运算符。
(1)属性的调用,其具体格式如下:
对象名.属性
(2)方法的调用,其具体格式如下:
对象名.方法名(【参数】)

1.3 对象和引用
在这里插入图片描述
(1)由上图Hero对象由多块内存组成,不同内存块分别存储了Hero对象的不同属性,当把该 Hero对象赋值给一个引用变量时,系统不会将这个Hero对象在内存中重新复制一份,而是将引用变量指向该对象即可,引用变量存放的仅仅是对象的内存地址。
(2)类是一种引用数据类型,因此程序中定义的 Hero类型的变量实际上是一个引用,它被存放在栈内存中,指向实际的 Hero对象,而真正的 Hero对象则存放在堆内存中。将一个 Hero 对象赋值给一个引用变量的内存分配,如下图示
在这里插入图片描述
注意:(无论是数组还是对象,当程序访问引用变量的属性或方式时,实际是访问该引用变量所引用的数组、对象的属性或方法)。

1.4方法详解:
方法是类或对象的行为特征的抽象,是类或对象最重要的组成部分,通过方法可以实现对类的属性的操作。此外,其他类也可以通过某个类的方法对其变量进行访问。到目前为止,我们所接触最多的方法就是main()方法。main()方法有别于其他一般的方法,即它不需要声明就可以直接使用。
mian()方法是Java中的一个非常特殊的方法,它的命名格式是由Java内部硬性规定的,我们不能随意修改main()方法的格式。因此,main()方法不需要声明。
1.4.1方法声明
方法(method)的声明包含方法头和方法体两部分,方法的声明格式如下:

<修饰符><返回类型><方法名([参数列表]){方法体}

方法说明如下:
(1)方法声明包括方法头和方法体两部分,其中方法头包括修饰符、返回类型、方法名和参数列表;方法体包括在花括号内的声明部分和语句部分,用于描述方法的功能。
(2)修饰符,表示方法的访问权限。修饰符有private、缺省访问修饰符、protected和public。
(3)返回类型,为该方法返回值的类型,如该方法没有返回值,则方法的返回类型为void。(4)参数列表,指定在调用时,应该传递的参数的个数和类型。参数列表如果包含多个参数,相邻的参数之间用逗号隔开,此处的参数在定义时并没有分配存储单元,只有在运行时间才分配,所以称为形式参数。方法也可以没有参数,称为无参方法。注意无参方法后面的一对圆括号不能省略。
(5)对于有返回值的方法,方法体中至少有一条return语句,形式为return(表达式)。当调用该方法时,表达式的值就是方法的返回值,方法返回值的类型应和表达式的类型一致。(6)方法不能嵌套定义,即不能在方法中再声明其他的方法。在程序中,方法是不可或缺的。通过使用方法可以完成特定的功能,方法一旦定义,就可以在不同的程序中多次调用,这样可以增强程序的可读性和可重用性,提高编程的效率。但对于初学者而言,使用方法时经常出现错误,尤其是在方法的声明和调用以及参数传递方面,下面我们将详细讲解方法的使用。在Hero处声明一个方法,该方法用于计算当前英雄的血量,具体操作见下例代码:

public class Hero//定义英雄战斗方法
public void battle ()// 实现具体的英雄战斗的业务逻辑
    }
}

1.4.2方法调用
由于 main()方法是程序的入口,如果在类中调用指定方法,则按照如下步骤进行操作:
(1)在类的main()方法中创建可以调用方法的实例。
(2)将实例赋值给指定的引用变量,通过引用“变量,方法名”的形式调用方法。调用Hero类中的battle()方法的具体操作见如下代码。

public class Hero{
      String name;
      int age;
public void battle(){
 System.out.println(name+"在肆无忌惮地战斗,他的年龄只有"+age+",可他的血量只有1%了…");
  } 
public static void main(String[] args){
  Hero hero =new Hero()//创建英雄对象
hero.name="暗夜魔王"//为name属性赋值hero.age=15;//为age属性赋值
hero.battle()//使用该对象的battle
    }
}

说明:
如果方法的返回类型为void,说明方法没有返回值,所以在main(方法中调用时,可以将此方法作为一条语句直接在程序中使用。

1.4.3 方法参数传递
*参数的传递是指实际参数向形参值的传递的过程。如果声明方法时包含形参的声明,则调用方法时必须为这些形参指定参数值,调用方法时实际传给形参的参数值被称为实参。那么,实参是如何传递给方法的?这是由Java方法的参数传递机制所控制的,Java中方法参数传递方式只有一种,即值传递。所谓值传递就是将实参的副本(复制品)传递给形参,而实参本身不会受到任何影响。
*
1.5 可变形参方法
可变方法声明格式如下:

[<修饰符>]<返回类型><方法名>(变量类型..变量
名)(方法体]

可变方法的特点:
(1)只能出现在参数列表的最后。
(2)“…”位于变量类型和变量名之间,前后有无空格都可以。
(3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

1.5.1 可变方法调用如下:

public class VarargsTest {
     //定义形参个数可变的方法   
      public static void testVarargs(int x,       String...users){   
       for (String user:users){        System.out.println(user);  
             }
         }
         public static void main(String []args)//采用可变个数形参的方法调用  testVarargs(3,"张小文","王艺儒","李晨生”);  
          }
     }

1.5.2 可变参数与数组参数的区别
1.定义方式不一样(1)采用可变个数形参来定义方法,代码如下:

publicstatic void testVarargs(String. users);

(2)采用数组形参来定义方法,代码如下:

publicstatic void testArray(String[] users);

2.调用方式不一样
(1)采用可变个数形参的方法调用,代码如下:

testVarargs("张小文""王艺儒""李晨生")

(2)采用数组形参的方法调用,代码如下:

testArray(new String [] {"张小文","王艺儒","李晨生"} )

3.参数位置不同
如果有多个形参,数组形式的参数可以处于形参列表的任意位置,但是个数可变的形参处于形参列表的最后,即一个方法中最多只能有一个个数可变的形参。对比区两种方法,很显然第一种形式上更加图洁。实际上,即使是采用形参个数可变的形式来定义万法,调用方法时也一样可以为个数可变的形参传递一个数组。

1.6 构造方法
*
定义:在类定义中有一类特殊的方法,此类方法的名称与类名完全一致,在创建对象时用于对成员变量进行初始化,此类方法被称为构造方法。
*
作用:构造方法是在类中定义的特殊方法,该方法的名称与类名完全一致。构造方法的作用是创建实例对象。
如果在类中没有创建用户自定义的构造方法,Java会提供一个缺省的默认无参构造方法。利用“new构造方法([参数列表])”用于创建对象实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值