关于面向对象和面向过程:
我们或多或少都听过编程语言的面向对象和面向过程,例如面向对象的Java,C#,PHP,面向过程的C语言。
面向过程:指的是完成一项工作,是通过分析完成所需要的步骤,然后构思思路之后再将思路代码化进行实现的过程,容易理解为完成工作注重的是实现的方法。
举个栗子:雕版印刷,我需要印刷《三字经》时,我只需要将《三字经》,做一份雕版,就可以无限印刷,但是我只能印刷这一本书籍。
面向对象:指的是通过将工作拆分成不同的类别,分别完成所需要的对应功能,最后再根据思路和步骤进行组装从而完成工作。
举个栗子:活字印刷,我需要印刷《三字经》时,我将其分为不同的字,再根据需要拼接起来,就可以印刷,和雕版印刷相比,当我需要印刷别的书籍时,我只需要根据文本组装,就可以印刷不同的书籍。
映射到面向对象和面向过程,可以很容易理解,面向过程的语言适合简单,不需要协作的任务,重点关注如何执行。面向对象的过程由于其协作性和模块化,适合复杂的任务,但是具体到每一个模块的功能,依然还是面向过程的思想。(毕竟模块就是要完成简单的独立的任务)所以两种思想是相辅相成的。
Java类,和实例化对象:
通过对面向对象的了解,接下来就可以了解有关类,对象,方法的内容:
我们可以将类理解为蓝图,创建对象则是根据类(蓝图)创建我们所需要的相同或不同的拥有类(蓝图)所定义出的属性(类成员变量)的对象,所以它们是类似的但是对象之间不相同,所以同一类对象拥有不同的存储空间。
Java类中的构造方法
public class Money {
int income,outcome,all;
String str;
//该方法名必须与类名相同,没有返回值,且不需要使用void修饰
//可以不写出
public Money(){
}
特点:Java会为每一个类提供一个默认的方法叫“构造方法”,该方法的作用是将类成员初始化。但是如果重新定义一个构造方法的话,默认的无参构造方法会失效,且一个类可以有多个构造方法。
public class Money {
int income,outcome,all;
String str;
public Money(){}
//第二个自定义的携带参数的构造方法
public Money(int a){
all=a;
}
注意:当我们在主程序创建该类的对象并初始化时,可以通过向构造方法传递参数来实现自定义类成员的初始赋值,但是必须保留无参的构造方法,否则当我们想要默认初始化时就会报错。
public class Money {
int income,outcome,all;
String str;
//如果删除该方法,会使下图代码报错
public Money(){}
//定义携带参数的构造方法后建议保留默认构造方法
public Money(int a){
all=a;
}
public static void main(String[] args) {
Money money =new Money(10000);
//调用Money类中含参的构造方法
Money money =new Money();
//调用Money类中的默认构造方法
方法的重载
方法的重载指一个类中具有相同名字,但是参数不同的多个方法。
从Java中自带的类我们就可以很容易找到例子:
Math类中的max方法的作用为传入两个数,返回其中较大的一个,由图中我们可以看出可以根据需要 传入不同数据类型的参数,但是都是同一个方法名——max。
其参数可以有3个方面的不同:
1.数量不同 2.类型不同 3.顺序不同
对象与引用
Java中除了基本数据类型外的变量类型称为引用数据类型。其中,对象是通过引用对其操作的。
如上图,Java创建的名称为money的对象的语句中,赋值号右边的语句是以Money类为模板,在堆空间中创造了一个Money类的对象。该对象的类型为Money但是并没有名称,所以我们通过赋值号左边的语句,创建了一个Money类型的引用变量,将该对象的地址赋给该引用变量,也可以看作是money指向了刚创建的Money类对象。所以我们需要通过引用变量来访问对象,需要注意的是创建的实体对象只有一个,但是可以通过不同的引用变量指向它,
Money num1;
Money num2;
Money num1=new Money( );
num2 = num1;
此时,num2和num1都指向同一个对象。
关于Java方法调用中的值传递:
● 形参是基本数据类型:方法调用时,实参将它具体的数值赋值给对应的形参,两者是不同的存储单元,不管形参在方法中如何运算,都不会影响原实参的值。(传值调用)
● 形参是引用数据类型:方法调用时,实参将所指向的地址传递给形参,方法执行时,由于形参访问的就是实参的地址,所以对形参的操作会改变原实参的值。(传址调用)