面向对象基本思想

一.面向对象的概念及思考方式

面向对象的理解:是一种编程思想,他将对象作为解决问题的基本元素,利用对象与对象之间的相互作用来设计程序。

2.面向对象的思考方式:(1)首先确定问题域中的对象

                                        (2)确定对象的特征与功能

                                        (3)了解对象与对象之间的关系

例:设计一个五子棋游戏的对象:·黑白双方对象 ·绘制棋盘 ·输赢规则

二.类与对象

1.对象:用来描述客观事物的一个实体,由一组属性和行为构成。

2.类:(1)是一个模板,他描述一类对象的行为和状态。

(2)类定义对象将会拥有的特征(属性)和行为(方法)

(3)类是对象的类型,和int类型不一样

3.对比: · 类是抽象概念

· 对象是实例

三.类与对象的创建

1.定义类的语法:(加static属于类)

格式:[访问修饰符] class 类名{

        放属性和方法的声明

}

例:创建一个person类
package org.west;
public class Person {
int age;
public void say(){
System.out.println(“大家好,我今年”+age+“岁了”);
}
}
电脑类
面向对象基本思想
面向对象基本思想
2.定义成员变量的定义:

(1)成员变量的语法:

格式:[访问修饰符] 数据类型 成员变量名 [=初始值]

(2)成员变量可以使用Java中的任何数据类型(基本类型和引用类型)

(3)在定义成员变量是可以对其进行初始化,若不进行初始化,编译器会用默认的初值进行初始化

(4)成员变量的作用域是整个类体

3.成员变量与局部变量的对比:

比较
成员变量
局部变量
定义位置
直接在类中定义
定义在方法中
声明赋值
可以在声明时赋初始值;若不赋值,会有默认初始值,引用类型的值为null
在使用前需要赋值
作用域
在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类外部使用
仅限于定义它的方法,在该方法外无法访问它
*注意:(1)在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量

        (2)局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级

4.初始化与实例化:

初始化:有之后进行基本操作

实例化:一个从无到有从0~1的过程

5.类种方法的定义:

(1)语法:[访问修饰符] 返回值类型 数据类型(行参列表){

// 实现语句

}

例:在person类中定义一个say方法(红色标记)
package org.west;
public class Person {
int age;
public void say(){
System.out.println(“大家好,我今年”+age+“岁了”);
}
}
6.对象的产生与使用:
(1)根据设计好的类来设计一个对象:利用类关键词调用类的构造方法就可以创建该类的一个对象
例:以上面的程序例子为例创建一个对象

  Person  per=new  Person();

此例中我们就创建了一个Person中的对象per

(2)构造方法:

·构造方法与类名相同,并且没有返回值,不需要加void

·构造方法的作用在于构造并初始化对象

·每一个类中至少包含一个构造方法

(3)构造方法分为:默认构造方法(无参构造,若是不写构造方法,编译器会自动生成一个无参构造,Java都要求有构造方法),带 参 数构造的方法

*注意:若是类中有我们写的构造方法时,编译器就不会在自动生成无参构造

四.方法的重载(overloading)

1.方法重载:同一个类中,方法名相同,参数列表不同(参数类型不同、参数个数不同、参数顺序不同)

2.方法重载与返回值类型无关

例:

1)public void study(String name){}

  public void study(int hours){} 

2)public void study(String name){}

  public String study(String n){}              

3)public void study(String name){}

  public void study(String name, int age){} 

4)public Student(String name){}

  public Student(String name, int age){} 

#重载解析:

方法名相同中参数类型不同,有返回值,所以是方法重载

方法名相同,参数类型相同,返回值类型不同,但是方法重载与返回值类型无关,所以不是方法重载

方法名相同,参数个数不同,有返回值类型,所以是方法重载

方法名相同,参数个数不同,无返回值类型,所以是构造方法重载

This关键字

1.每个类的每个非静态方法(没有被static修饰)都会隐含一个this引用名称,它指向调用这个方法的对象(当前对象)。

2.当在方法中使用本类的非static属性时,都会隐含地使用this名称。

3.this可以看作是一个变量,它的值就是当前对象的引用

4.this关键字的用法

(1)当类中某个非静态方法的参数名跟类的某个成员变量名相同时,为避免参数作用范围覆盖成员变量作用范围,必须明确的使用this关键字来指定成员变量

(2)如果某个构造方法的第一条语句具有形式(this……),那么这个构造方法将调用本类中其他构造方法(调用其他构造方法,需要在其他构造方法中输出)

数组:
数组的定义方法有两种:int[] arr;//第一种
int arr[];//第二种

这两种形式上没有区别,使用效果完全一样。

与C、C++不同,Java在定义数组时并不为数组元素分配内存空间,因此[]中无需指定数组元素的个数,也就是数组长度。

所以我们需要先分配内存空间,才能访问数组中的元素。

而想要为数组分配内存空间可以这样:int[] arr;//定义一个int数组变量arr
arr=new int[3];//为int数组变量arr指定数组元素个数为3,也就时分配内存空间。
int[] arr=new int[3];//这样等于在定义int数组变量的时候,为其分配内存空间。

可以在声明数组的同时进行初始化(静态初始化),也可以在声明以后进行初始化(动态初始化)。
//静态初始化
int[] arr=new int[]{1,2,3};

//动态初始化
String[] strArr=new String[3];
strArr[0]=“Hello”;
strArr[1]=“World”;
strArr[2]=“Hello World”;

数组引用可以通过下标来引用数组:arrName[index];与C、C++不同,Java在数组元素引用要进行越界检查以确保安全性,如果越界,就会抛出数组越界异常(java.lang.ArrayIndexOutOfBoundsException)。每个数组都有可以拿length属性来得到数组的长度。

二维数组

二维数组的声明,初始化和引用和一维数组相似:
int intArray[ ][ ] = { {1,2}, {2,3}, {4,5} };
int a[ ][ ] = new int[2][3];
a[0][0] = 12;
a[0][1] = 34;
a[1][2] = 93;

Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。

例如:
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];

几点说明:上面讲的是静态数组,静态数组一旦被声明,它的容量就固定了,不容改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。如果想在运行程序时改变容量,就需要用到Java集合中的ArrayList或者Vector了。正是由于静态数组容量固定的缺点,实际开发中使用频率不高,被ArrayList或Vector代替,因为实际开发中经常需要向数组中添加或删除元素,而它的元素不好预估。