JavaSE第三章:面向过程和面向对象的设计思想
1.面向过程和面向对象的设计思想
面向过程:procedure oriented programming 缩写 POP
分析出解决问题所需要的步骤,然后把步骤一步一步实现。
面向过程注重于解决问题过程:eg(上公交车过程)
停车();
开公交车门();
上车();
关公交车门();
开车();
面向对象:object oriented programming 缩写 OOP面向对象的编程语言
以分类的方式进行思考和解决问题,面向对象的思维方式适合于处理复杂的问题。面向对象的思想符合人类的认知习惯。
面向对象更注重于对于方法宏观上的设计:
门类
开公交车门();
关公交车门();
人类
操作();
总结:面向过程适合处理简单的事情,直接关注流程,简单有效。
面向对象适合处理复杂的事情,先使用面向对象的方式对整体关系作出分类,然后,根据不同的类深入细节的处理。
面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。面向对象如果离开了面向过程,就无法实现真正的落地,成为无源之水
2.java类
类是一个模板,就像是一个设计图纸,是一类事物的属性和行为的集合;
类的结构
成员变量:对象属性的描述;
方法:对象的行为;(可以做的事情)
构造方法:用于创建对象;
内部类: 即在类体中声明的类。
块:代码块
基本的属性和方法
**变量:**对于类中事物属性的描述(类中的元素属性)
方法: 对某种事物行为的规定(这个类能干什么)
3.java类的定义
(1)发现类
类的声明格式:[访问权限修饰符] +[修饰符] +class+类名{
类的属性和方法
}
**访问权限修饰符:**目前学习到的为public和default( public表示这个类是可以随时随地被访问的,default表示这个类为默认访问模式即只允许在同一个package中访问).
修饰符: final或abstract.
**类名:**符合标识符定义语法要求,类名首字母大写,见名知意,驼峰表示.
例如定义一个公交类:
public class GongJiao{
类中内容
}
(2)发现类的共有属性(成员变量)
汽车类共有的特征:
- 颜色
- 名称
- 型号
… …
public class Car{
//成员变量定义
String name; //名称
String color; // 颜色
float price;//价格
}
声明成员变量的格式为:
[访问权限修饰符] [修饰符] type attr_name [=defaultValue] ;
(3)发现类的方法
public class Car{
//成员变量定义
String name; //名称
String color; // 颜色
float price;//价格
方法声明格式为:
[访问权限修饰符] [修饰符]/ void 方法名(){
System.out.println(“汽车启动”);
[return 返回值;]
}
}
4.java对象
**对象:**对象是类的一个实例,是以类为模板在内存中创建的实实在在存在的实例。
对象的创建和使用
使用 new 关键字创建对象。
Car baomacar = new Car();
Car类就是baomacar的类型
使用对象 . 成员变量来引用对象的成员变量。
baomacar.color
使用对象(引用) . 方法来调用对象的方法。
baomacar. start()
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。
总结类和对象
类是一类事务的抽象概念,是一个模型.
对象是由这个模型所创造的一个一个的具体存在的,是实实在在存在的实例.
所以创建对象的过程也叫实例化对象. 对象==实例
现实生活中先有对象后有类,而编程时先设计类后创建对象
5.变量与方法
(1)变量
一个类可以包含以下类型变量:
成员变量:
成员变量是定义在类中,方法体之外的变量。
成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。
成员变量在创建对象的时候会从类中复制一份到对象中。
成员变量可以被类中方法、构造方法和特定类的语句块访问。
成员变量的作用范围为整个类体。
局部变量:
在方法、构造方法或者语句块中定义的变量被称为局部变量。
局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。
局部变量在使用前必须初始化赋值。
变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
类变量:(也叫静态变量)类变量也声明在类中,方法体之外,但必须声明为static类型。(后面static详细讲)
(2)方法
一个类可以包含以下类型方法:
**成员方法:**成员方法是定义在类中。这种方法在创建对象的时候创建。
语法格式:
修饰符 返回值类型/void 方法名 ( 参数列表) {
方法体语句;
[return 返回值]
}
**构造方法:**用来创建对象的方法
构造方法是定义在 Java 类中的一个用来创建对象的方法。
构造方法名与类名相同,且没有返回值,且不需要使用void修饰。
使用 new + 构造方法 创建一个新的对象。在创建一个对象的时候,至少要调用一个构造方法。
一个类可以有多个构造方法。
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法,但是只要在一个Java类中定义了一个构造方法后,默认的无参构造方法即失效。
例: public class Car{
public Car(){ }
public Car(String name){ // 这个构造方法有一个参数:name }
}
例:创建Car类的对象
Car car1 = new Car();
Car car2 = new Car(“宝马”)
类方法:(也叫静态方法)类方法也声明在类中,但必须声明为static类型(后面细讲)
(3)方法的重载
方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法。
调用时,会根据不同的参数表选择对应的方法。
方法重载
同一个类中
方法名相同
参数不同(可以有三方面的不同)
数量不同
类型不同
顺序不同
注意:方法重载跟方法的返回值类型,访问权限没有任何关系
练习题.定义一个银行类,
属性:账号、密码、存款余额,银行名称。
方法:创建账号、存款、取款、查询。
创建该类对象并测试
例:
创建银行类
package com.ff.javaOPP.homework4;
import java.util.Scanner;
public class yinhang {
//创建4个成员变量
int zhanghao;
int mima;
int yue;
String name;
//账号密码创建方法
public int getZhanghao(int zhanghao, int mima) {
Scanner s = new Scanner(System.in);
System.out.println("输入您的账号");
int z = s.nextInt();
System.out.println("输入您的密码");
int m = s.nextInt();
mima = m;
System.out.println("账户创建成功");
System.out.println("余额:");
return yue;
}
//银行存款方法
public int getcunkuan() {
Scanner s = new Scanner(System.in);
System.out.println("请放入现金:");
int y = s.nextInt();
yue += y;
System.out.println("余额:");
return yue;
}
//银行取款方法
public int qukuan(){
Scanner s=new Scanner(System.in);
System.out.println("请输入您要取的钱数:");
int j=s.nextInt();
if (yue>=j){
System.out.println("余额:");
return yue=yue-j;
}else
System.out.println("余额不足");
return 0;
}
//查询余额方法
public int getYue() {
System.out.println("余额:");
return yue;
}
}
创建一个人员类
package com.ff.javaOPP.homework4;
import java.util.Scanner;
public class persion {
public static void main(String[] args) {
yinhang p = new yinhang();//创建对象
p.name = "工商银行";//成员方法声明
p.yue=0;
p.getZhanghao(p.zhanghao, p.mima);//创建账号方法调用
Scanner s = new Scanner(System.in);
while (true) {
System.out.println("请选择操作:1.存款 2.取款 3.查询余额");
int i = s.nextInt();
if (i == 1) {
System.out.println(p.getcunkuan());//在输出中调用方法
} else if (i == 2) {
System.out.println(p.qukuan());
} else {
System.out.println(p.getYue());
}
}
}
}