目录
1. 面向对象(Object Oriented programming, OOP)
1.1 案例
1.2 面向对象的优缺点
2. Java类
1.1 类
1.2 对象的使用与创建
1.3 变量的分类
1.3.1 成员变量
1.3.2 局部变量
1.3.3 成员方法
1.4 构造方法
1.4.1 无参构造方法
1.4.1 有参构造方法
1.5 方法重载
1. 面向对象(Object Oriented programming, OOP)
面向过程——步骤化
- 面向过程就是分析出实现需求所需要的步骤,通过函数(方法)一步一步实现这些步骤,接着依次调用即可
面向对象——行为化(概念相对抽象,可结合下面的例子理解)
- 面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成类(类实例化后才是对象),创建了对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为,符合人类的认知习惯。
面向对象和面向过程都是语言设计思想,两者相辅相成。
1.1 案例
案例:以五子棋为例
面向过程:开始游戏,黑子先走,绘制画面,判断输赢,轮到白子,绘制画面,判断输赢,继续黑子,循环往复,直到黑方或者白方胜利,最后输出结果。
面向对象:先设计,对现实中客观事物进行分类
1. 黑白双方,这两方的行为是一模一样的。
2. 棋盘系统,负责绘制画面。
3. 规则系统,负责判定犯规及输赢。
玩家对象负责接受用户输入,并告知棋盘对象布局的变化,棋盘对象接收棋子变化就要在屏幕上显示,同时利用规则系统对象对棋局进行判定。
1.2 面向对象的优缺点
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:一般来说性能比面向过程低。
低耦合:简单的理解就是说,模块与模块之间尽可能的独立,两者之间的关系尽可能简单,
尽量使其独立的完成成一些子功能,这避免了牵一发而动全身的问题。
2. Java类
1.1 类
定义:类是对现实事物的抽象。
结构:
成员方法:事物属性的描述。名词
方法:事物的行为,功能。
构造方法:用于创建对象
代码块
内部类
步骤:
第一步:发现类
[ 访问权限修饰符 ] [ 修饰符 ] class 类 {
}
有public 修饰的类,类名与文件名一致。
无public 修饰的类,类名可与文件名不一致。
第二步:定义类的成员变量(共有属性) 成员:类的成员,在类中定义。
例:以Car作为对象
String name;
float price;
String color;
第三步:定义类的成员方法(功能/行为)
例: public void run(){
System.out.println(name + "汽车行驶" );
}public void stop(){
System.out.println(color + name + "汽车停止" );
}
总结类和对象:
类是一个模型,对现实事物的抽象.是模板.
对象时从类这个模型创建出的一个具体实例.
实际生活中,先有对象(具体存在),后有类/概念。
public static void main(String[] args) {
Car bm = new Car();
bm.name = "宝马";
bm.color = "白色";
bm.price = 30000;
bm.run();
bm.stop();
}
//宝马汽车行驶
//白色宝马汽车停止
1.2 对象的使用与创建
对象:具体存在的客观事物,可以拿来使用,万事万物皆为对象。
new : 在堆内存中创建对象,以Car类为模板。
Car() : 构造方法(默认有一个构造方法,方法名与类名相同)
Car bm: 声明一个Car类型的变量
=: 将创建的对象赋给了左边的变量
bm:表示一个具体的对象,可以使用。
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。
1.3 变量的分类
1.3.1 成员变量
定义:在类中,方法体之外。
- 数据类型可以是Java中的支持的任意类型(引用类型和基本类型)
- 成员变量可以初始化,也可以不初始化。
- 不初始化时,Java用默认值:
引用类型默认类型 null
int 为 0; float和double为0.0; boolean:false; char:' '(空格)
引用类型:数组;字符串;自定义的类
基本类型:byte,short,int,long,float,double,char,boolean;
- 创建对象时,会从类中向对象中复制一份成员变量。
- 在构造方法,成员方法,代码块中可以使用成员变量。
1.3.2 局部变量
定义在方法,构造方法,代码块中。
- 使用前必须初始化赋值。
- 数据类型可以是java中支持的任意类型
- 形参也属于局部变量
- 局部变量仅在该方法中调用,方法结束后自动销毁。
1.3.3 成员方法
定义在类中,没有被static修饰的,通过对象调用。
1.4 构造方法
Car bm = new Car();
构造方法:每个类中都有一个默认的构造方法。
作用:用来初始化新的创建对象。
特点:构造方法与类名相同,没有返回值,且不需要void修饰。
1.4.1 无参构造方法
public Car(){
System.out.println( "Car类的无参构造方法" );
}
public Car(){
System.out.println( "Car类的无参构造方法" );
}
在无参的构造方法中为新建的对象用默认值初始化赋值。
1.4.1 有参构造方法
public Car( String n, float p; String c){
name = n;
price = p;
color = c;
System.out.println( "Car类的有参构造方法" );
}
public Car( String n, float p; String c){
name = n;
price = p;
color = c;
System.out.println( "Car类的有参构造方法" );
}
调用:
Car dz = new Car("大众", 20000f,"红色");
- 每个类中至少有一个构造方法,可以定义多个。
- 每创建一个对象时,至少调用一个构造方法。
- 如果类中无构造方法,会默认创建一个无参的构造方法,一旦定义有参的构造方法,则默认的构造方法失效。
1.5 方法重载
定义:在同一个类中具有相同的名字,但参数不同的多个方法。
参数不同有三方面的不同:
- 参数数量不同(stu1,stu3)
- 参数类型不同 (stu4,stu5)
- 参数顺序不同 (stu2,stu3)
public class Student {
String name;
String sex;
int age;
String department;
public Student(){
System.out.println("无参的构造方法!");
}
public Student(int age,String name){
System.out.println("调用int和String类型的两个参数");
}
public Student(String name,int age){
System.out.println("调用String和int类型的2个参数的构造方法");
}
public Student(int age,String name,String sex){
System.out.println("调用int,String和String类型的三个参数");
}
public Student(String department,String name,String sex){
System.out.println("调用String,String和String类型的三个参数");
}
public static void main(String[] args) {
Student stu1 = new Student();
Student stu2 = new Student(11,"张三");
Student stu3 = new Student("王五",15);
Student stu4 = new Student(10,"李四","男");
Student stu5 = new Student("数计","王超","男");
}
}
调用时,程序会根据需要调用不同的方法,成员方法也可以进行重载。
方法重载也可以为程序提供了多样化,提高了程序功能丰富性。
注:方法重载跟方法的返回值类型没有任何关系



