类与对象
(1)面向对象(简称:OOP,全称:Object Oriented Programming)
面向对象是一种编程思想,相对面向过程而言
面向过程
强调的是功能的过程
面向对象
强调功能的结果,不在乎实现的方法
面向对象特征:封装、继承、多态
(2)类与对象的关系
类是一个抽象的概念;
而对象是类抽象概念的实物表达;
定义一个类表示定义了一个功能模块
例:
生活中有各种水果,水果就是类,而具体的西瓜、桃、苹果就是对象
(3)类的定义
类包括属性和方法
例:
人有身高,体重,说话,打球的行为
Java中用类class来描述事物
属性:对应类中的成员变量
行为:对应类中的成员方法
(4)创建对象,使用对象
class Car{ //对Car类事物进行描述
String color =“red”;
int num = 4;
void show(){
System.our.println("color="+color+"...num="+num);
}
}
class CarDemo{
public static void main(String[ ] args){
Car c = new Car();//创建对象,创建类的实例是通过new关键字来定义的
c.color = "black" ;//调用对象的属性进行修改
c.show();//调用对象的功能(方法)
}
}
(5)成员变量
所谓成员变量就是这个类里定义的一些私有的变量,这些变量是术语这个类的。就好比日常生活中的自行车的大小,即这个车子是26还是28的,这个尺寸就是自行车的成员变量,是描述这个自行车的。下面开始介绍成员变量
(5.1)成员变量的创建
成员变量描述的是这个类的一些属性或状态的,下面通过代码来演示怎么定义成员变量。语法为:变量的类型 变量的名称
//bike类描述的是一个自行车
public class bike{
//这个成员变量描述的是自行车的颜色
String color;
//这个成员变量描述的是自行车的尺寸
String size;
}
在该程序中,定义了一个叫bike的类,在该类中定义了两个成员变量,一个表示自行车颜色的color成员变量,一个表示自行车型号的size成员变量
(通过new关键字来创建这个bike类的对象,用bike类的对象引用b来给其成员变量赋值。因为成员变量是在这个类实例化后才能访问到的。成员变量赋完值后,调用println语句来打印显示结果)
(5.2)成员变量的初始化
通过new关键字来创建一个对象后,会有一个系统默认的初始值。所以说不管有没有在创建成员变量的时候变量一个值,系统都会有一个默认的值
(6)局部变量
局部变量和成员变量很相似都是描述信息的。局部变量和成员变量的不同点就是局部变量是在方法体内创建的,在方法体外是访问不到这个变量的
(6.1)局部变量的创建和初始化
局部变量描述的是方法体的一些属性或状态,下面通过代码来演示怎么定义局部变量。创建局部变量的基本语法为:变量的类型 变量的名称
例:
//test类描述的是基本类型的初始化
public class test{
public static void main(String[ ] args){
//基本类型的局部变量
int size = 123:
boolean b = true;
//打印并显示局部变量
System.out.println(size);
System.out.println(b);
}
}
(6.2)局部变量和成员变量的区别
局部变量描述的是这个方法体内的属性的,而成 员变量描述的是这个对象里的属性的,它们之间 的区别,即访问区别如下
成员变量可以被 public、 protected、 defau|t private、 static、fina|修饰符修饰。
局部变量可以被final修饰符修饰,但不能修饰为 public、 protected、 default、 private、 static。
成员变量是在堆里进行创建的,而局部变量是在 栈里进行创建的。 成员变量是系统默认值。
局部变量没有系统默认值,必须手动赋值。
(7)方法
每个人都有走、吃和睡等动作。在Java中,所谓 方法就好比日常生活中的一个动作,是完成一系 列操作的。在Java中也是如此,方法收到对象的 信息,进行处理的操作。
(7.1)方法的创建和参数
方法的参数是提供外界在执行方法的时候提供给 方法的特殊描述信息的,好比日常生活中的,用 力砸东西,用大力砸东西。而这个用大力就是提 供给这个进行特殊描述的。
创建方法的语法为:
方法修饰符 方法的返回类型 方法名称(方法参数){
( 方法体)
}
方法的定义如下所示。
public void add(int i, int n){
System. out. printin(i+n);
}
代码说明:
方法名为add,有两个参数都是int类型的
方法体是打印i+n的值,并显示处理啊
方法修饰符为public类型的,修饰符可有可无
方法的返回为空(void)
(7.2)方法的返回类型
方法的返回类型有很多种,主要分为如下几类。
方法返回值为Void类型时为无返回值。
方法返回值还可以为任意的类型,如 String Boolean、int。
如果定义了方法的返回类型就必 须在方法体内用 return把返回值进行返回。 方法的返回值可以为nu,但必须是对象类型。 基本类型不能返回null。 在返回值为基本类型的时候,只要能够自动转换 就可返回。 方法的返回类型可以为 object对象 方法的参数也有多种形式,下面是对方法参数的 讨论。 方法的参数可以为基本数据类型,也可以为对象 引用类型。 每个参数都有完整的声明该变量的形式。 方法的参数可以有一个,也可有多个。 Java程序的入口main就为一个方法,参数为 Stringl args,它是个特殊的方法。
(7.3)方法参数的传递
参数的传递是传递的值还是引用呢。下面通过例 子来分别说明,请仔细考虑。
例:
当传递类型为基本类型时,传递的是该 类型的值。
/test类描述的是基本类型的传递
public class test{
//方法add是把传入的参数进行+1,并显示 其结果
public void add(int i) {
i=i+1;
System.out.println(i);
}
//程序的运行方法,即入口方法
public static void main(String[ ] args){
//基本类型的局部变量
int size = 44;
//创建bike类的对象实例,即bike类的对象应用b
test t = new test();
//打印运行后的值
System.out.println(size);
}
}
(7.4)方法的重载
我们假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要针对不同的情况去设计不同的方法。接下来通过一个案例来实现对两个整数相加、对三个整数相加以及对两个小数相加的功能,具体实现如下所示。MethodDemo02.java
public class MethodDemo02 {
public static void main(String[] args) {
// 下面是针对求和方法的调用
int sum1 = add01(1, 2);
int sum2 = add02(1, 2, 3);
double sum3 = add03(1.2, 2.3);
// 下面的代码是打印求和的结果
System.out.println("sum1=" + sum1);
System.out.println("sum2=" + sum2);
System.out.println("sum3=" + sum3);
}
// 下面的方法实现了两个整数相加
public static int add01(int x, int y) {
return x + y;
}
// 下面的方法实现了三个整数相加
public static int add02(int x, int y, int z) {
return x + y + z;
}
// 下面的方法实现了两个小数相加
public static double add03(double x, double y) {
return x + y;
}
}
从上述代码不难看出,程序需要针对每一种求和的情况都定义一个方法,如果每个方法的名称都不相同,在调用时就很难分清哪种情况该调用哪个方法。
为了解决这个问题,Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。
(7.5)重载的注意事项
重载方法参数必须不同:
参数个数不同,如method(int x)与method(int x,int y)不同
参数类型不同,如method(int x)与method(double x)不同g
参数顺序不同,如method(int x,double y)与method(double x,int y)不同
重载只与方法名与参数类型相关与返回值无关
如void method(int x)与int method(int y)不是方法重载,不能同时存在
重载与具体的变量标识符无关
如method(int x)与method(int y)不是方法重载,不能同时存在
(8)this关键字
特点:this代表其所在函数所属对象的引用
什么时候使用this关键字呢?
当函数内需要用到调用该函数对象时,就用this