Java面向对象(1)

一.面向过程和面向对象

面向过程(pop)和面向对象(oop)都是语言设计思想(宏观上)。

1.面向过程语言

面向过程(pop):过程就是操作数据的步骤,如果过程中出现大量冗余的代码那么就把这些代码包装起来形成函数,这样就可以大大减少冗余,便于维护。

典型语言:C语言

代码结构:以函数为组织单位。

2.面向对象语言

面向对象(oop):关注的焦点是“ 类 ”,面向对应设计程序时,从宏观上分析程序有哪些功能,然后对功能进行分类封装,把不同的功能封装在不同的类(eg:造汽车,发动机,轮胎等)中,是一种宏观设计,但到具体实现时,仍然离不开面向过程。

典型语言:Java,C#,C++,Python,Ruby,PHP等

代码结构:以“类”为组织单位,每个事物都具备自己的属性,行为和功能。

是一种设计者思维,适合解决复杂问题,代码扩展性强,可维护性高。

二.类和方法(面向对象的的具体实现)

面向对象的具体实现就是通过类和方法来实现的。

类:是具有相同特征(同一类)事物的抽象描述。(eg:人类,汽车类,动物类等等,是一种抽象概念)

类的结构:①变量:事物属性的描述(名词)②方法:事物的行为(动词)③构造方法(初始化对象,给对象赋初值)④块:一段没有名称的代码块 ⑤内部类:即在类的内部再声明类。

对象:是类的一个具体实例,是实际存在的,可以使用的。(eg:张三,宝马,拉布拉多等,是具体的。)

如何让创建对象?

使用new关键字。

下面是个汽车类的例子:

//汽车类
class Car{

 String name;
 String color;
 int money;

 public void Run(){

  System.out.println("汽车在马路上行驶");

}
 public void Stop(){

 System.out.println("汽车停止");
}
 
}

这里是测试类: 

public class Test {
    public static void main(String[] args) {

    Car c1=new Car();//这里new了一个汽车类的对象
    
    //就可以通过c1对象去给变量赋值和调用类中的方法
    c1.name="宝马";
    c1.color="黑色";
    c1.money=500000;
    c1.Run();
    c1.Stop();

}

通过上述例子就可以了解到类和对象的关系了。

成员变量在类中定义时,可以不给其赋初值,系统会自动初始化赋默认值。

默认值:引用型:null

               int long:0

               float double:0.0

               boolean:false

三.构造方法

构造方法名与类名相同,且没有返回值,不需要void修饰。

构造方法分为:无参构造方法和有参构造方法

作用:在构造方法中为创建的对象成员变量初始化赋值。

特点:每个类都有构造方法,如果在类没有写出构造方法,Java会默认类中有无参构造,且在无参构造方法中赋的初值是默认值,但是,如果类中已经写出有参的构造方法,Java所提供的无参构造就不存在了,想要再次使用无参构造方法就必须在类中重新写出无参构造方法便可再次使用。

//无参构造
public Car(){
 
}
//有参构造
public Car(String n,String c,int m){
   
    money=n;
    color=c;
    money=m;

}

 构造方法在类中有很重要的作用,是非常重要的,一点更要理解其中的含义及作用。

四.方法的重载

方法的重载:指在一个类中,可以存在多个名称相同的方法。

这些重载的方法通过方法参数的个数,类型,顺序来区分。

这里注意:方法的重载和方法的返回值没有任何的关系,不要将返回值的不同也纳入区别重载方法中。

---构造方法和成员方法都可以实现方法的重载。

//重载构造方法(无参构造和有参构造就是方法重载的体现)
public Car(String name,int money,String color){

   this.name=name;
   this.money=money;
   this.color=color;

}
public Car(String name,String color,int money){
   
   this.name=name;
   this.color=color;
   this.money=money;

}

//在类中的方法
public void Run(){

  System.out.println("车在行驶");

}
public void Run(String name){

  System.out.println(name+"车在行驶");

}

五.对象和引用

Java语言中除了8种基本类型之外的都属于引用类型。

Java中的对象是通过引用对其操作的。

类和对象的内存结构图如下:

这里Java虚拟机运行内存空间只画了三部分,包括 栈(主要加载运行方法,首先进栈的肯定是main方法)堆(主要用来存储创建出来的对象) 方法区(主要存储类的信息)。

在main方法中去new一个引用类型的变量时,就会在堆中创建了一个人对象空间,用一个地址去记录这个空间,主方法中new的对象其实赋给的是这个对象空间的地址。

下面给出两个例子:

int a=10;
int b=a;
b=20;
System.out.println(a);
System.out.println(b);

 上述代码的结果为:a=10;b=20;这就是基本类型的赋值情况。

Car c1=new Car("宝马","黑色",520000);
Car c2=c1;
c2.name="奔驰";
System.out.println(c1.name);
System.out.println(c2.name);

 大家想想这个代码的运行结果会是什么呢?

是 宝马 奔驰 吗?

不是的奥,答案其实是 奔驰 奔驰 ,在这段代码中,c2=c1,其实是将c1对应空间的地址赋给c2了,这样c1,c2都是指向那一个对象空间,所以c2.name="奔驰",就是将这个对象空间中的name给重新赋值了,所以最终输出的结果就是两个奔驰了。

你可能感兴趣的:(java,开发语言)