面向对象
面向对象和面向过程
-
面向对象和面向过程都是程序设计的一种思想(风格):
-
面向过程(POP)的思想就是分析步骤,将冗余的过程抽取为一个函数,以便于维护,侧重于分析步骤。适合简单问题
-
面向对象(OOP)的思想是以类为组织单位,且每种事物均有其自身的功能。(类:一类问题/分类 如String、Math、Arrays、Scanner)适合复杂问题。
形象化例子:
动物类{ 动物共有属性与功能(代码复用) } 猫 继承 动物{ 定义自己特有的属性与功能(扩展自己的功能) } 狗 继承 动物{ 定义自己特有的属性和功能(扩展自己的功能) }
注:现在大多数程序的设计中,两种方法均需要使用,所以不要把两种方法对立起来。面向对象可以帮助我们从宏观上把握、从整体上分析整个系统。 但是,具体到实现部分的微观操作(就是一个个方法),仍然需要面向过程的思路去处理。
-
类和对象
类:
具有相同特征事物的抽象描述,是抽象的、概念的定义。
类的结构:
- 变量:事物属性的描述
- 方法:事物的行为
- 构造方法:初始化对象
- 块:一段没有名称的代码块
- 内部类:在类体中声明的类(嵌套)
定义类:
public class Car{
String name;
String color;
float price;//成员变量,在类中定义
public void start(){
System.out.println("汽车启动");
}
public void close(){
System.out.println("汽车关闭");
}
}
使用类:
public static void main(String[] args){
Car car=new Car();//Car(类型)car(变量名)声明一个Car类型的变量
car.name="benchi";
car.color="red";
car.price=11000;
car.start();
car.close();
}
对象:
实际存在的该类事物的每个个体,是具体的,也称为实例。
例如:
人类--->一类群体,概念
张三--->具体的事物,对象
电脑--->一类电脑
我的电脑--->可以使用的,具体,对象
变量的种类
变量按照类型分:
-
基本数据类型(8种);
-
引用数据类型;
变量按照位置分:
-
成员变量(全局变量)(在类中定义):
成员变量未人为初始化的情况下,系统会自动给其赋值为初始值(引言数据类型初始值为null,基础数据类型初始值为0)
-
局部变量(在方法中定义):
java的局部变量则必须在使用前对其初始化。
例1(全局变量):
//全局变量
public class test {
static String a ;
public static void main(String[] args) {
System.out.println(a);//此时a未初始化
}
}
运行结果1:全局变量自动初始化
例2(成员变量):
public class Car {
String name;
String color;
float price;
}//定义的类
//成员变量
public class cardemo {
public static void main(String[] args){
Car car=new Car();
System.out.println(car.name);
}
}
运行结果2:成员变量被自动初始化为null
例3(局部变量):
public class test {
public static void main(String[] args) {
String a ;
System.out.println(a);
}
}
运行结果3:报错
注:方法是类中的功能。
类中的成员变量和成员方法都必须通过创建出来的对象去调用
构造方法
- 定义:名字与类名相同,没有返回值,且不需要void修饰。
- 格式如下:
(1)两种构造方法格式对比:
public car(){
name=null;
color=null;
price=0;
}//无参构造方法
public car(String m,String.n,float c){
name=m;
color=n;
price=c;
}//有参构造方法
(2)两种方法赋值格式对比:
car.name="宝马";
car.color="black";
car.price=20000000;//无参构造方法的赋值
Car car=new Car(m:"宝马",n:"black",c:20000000);//有参构造方法的赋值
-
特点:
(1)类中没有定义时,会默认有一个无参的构造方法。
(2)在无参的构造方法中为成员变量赋初始值,还可以定义有参的构造方法,通过有参的构造方法为成员变量进行初始化赋值。
(3)一旦类中定义了有参的构造方法,那么默认都无参构造方法便会失效。
-
作用:用来为新创建的对象中的成员变量进行初始化。
方法的重载
在一个类中有多个方法名相同,但参数个数不同的方法,称为方法的重载
-
特点:
(1)可以通过参数个数,数据类型,顺序来区分。
(2)方法重载跟返回值没有关系,不能通过返回值来区分。
-
意义:做同一件事,但是可以传入不同的参数以进行不同的处理。
对象与引用
- 创建对象:
Car bm=new Car();//左边是对象引用变量,右边是对象本身。
例:
public class demo {
public static void main(String[] args) {
Car car=new Car("宝马","black");
System.out.println(car.name+car.color);
Car car1=new Car(4000,"black");
System.out.println(car1.price+" "+car1.color);
Car car2=new Car("宝马2","white");
car2=car;//将car2的地址指向car
System.out.println(car2.name+car2.color);
System.out.println(car.name+car.color);//1.car和car2中成员变量数据一样
car.color="red";
car.name="小车";
System.out.println(car.name+car.color);
System.out.println(car2.name+car2.color);//2.car和car2中任一一个成员变量改变数据,另一个也随之改变
car2.name="大车";
car2.color="orange";
System.out.println(car.name+car.color);
System.out.println(car2.name+car2.color);//同2.
}
}
-
参数传递:
(1)值传递(形参类型是·基本数据类型):传值。方法形式中形式参数值的改变不影响实际参数的值。
(2)引用传递(形参类型是引用数据类型):传地址。方法执行中形式参数的改变会影响实际参数。