Java面向对象详细介绍(一)

目录

一.面向对象和面向过程的区别与联系

1.面向过程(POP ——> procedure oriented programming)

2.面向对象(OOP ——> object oriented programming)

3.联系:

二.类

1.类的定义:

2.类的结构:   

三.Java对象

1.定义:

2.对象与引用

四.变量

1.成员变量:

2.局部变量

五.方法的分类

1.构造方法

         2.成员方法

六.方法的重载

1.构造方法的重载

2.成员方法的重载

整体总结  创建代码

运行结果:

七.调用方法时参数的传递

1.值传递

2.引用传递


一.面向对象和面向过程的区别与联系

1.面向过程(POP ——> procedure oriented programming)

分析出解决问题所需步骤,将步骤一步一步实现;直接关注流程。

2.面向对象(OOP ——> object oriented programming)

以分类方式进行思考和解决问题;
先对整体关系做出分类,然后根据不同的类深入细节处理;

符合人类认知的习惯。

3.联系:

面向对象无法取代面向过程,它们是相辅相成的。

面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时,仍然采用面向过程的思维方式。

面向对象如果离开了面向过程,就无法实现真正的落地,成为无源之水。

二.类

1.类的定义:

类是一个模板,它描述一类事物的属性和行为的集合. 
类是表示一个客观世界某类群体的一些基本特征抽象.
类的声明格式为:

         [访问权限修饰符] [修饰符] class Car{ }

        访问修饰符有两种public,无(默认)

        修饰符:final,abstract

        关键字class用来定义一个类

(首字母大写)

2.类的结构:   

成员变量:类的属性
方法:事物的行为
构造方法:初始化对象
内部类:在类体中声明的类
代码块:一段无名的代码块

三.Java对象

   1.定义:

是以类为模板在内存中创建的实际存在的实例 。

         同一类的每个对象有不同的成员变量存储空间。

        同一类的每个对象共享该类的方法。

2.对象与引用

Java 语言中除基本类型之外的变量类型都称之为引用类型。

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

//定义如下类:
class Car{
String color;
String name;
String model;
}
Car bm= new Car(); //创建对象
/*
“new Car()”  以Car类为模板,在堆空间里创建一个Car类对象
"Car bm" 创建了一个Car型引用变量,即可用来指向Car对象的对象引用
"=" 使对象引用指向创建的Car对象
*/

代码举例:

public class TestPerson {
    public static void main(String[] a){
         /*
             new Person()  在堆内存空间中创建了一个对象
             Person p1声明一个引用变量
             = 把对象在内存空间的地址赋给了左边的引用变量
         */
        Person p1=new Person();
        p1.name="张三";
        p1.age=18;
        Person p2=new Person();
        p2.name="李四";
        p2.age=15;
        Person p3=p2;//p2 p3指的是同一内存中对象的地址
        p3.name="王五";
        System.out.println(p1.name);//张三
        System.out.println(p2.name);//王五
        System.out.println(p3.name);//王五
    }
}
public class Person {
    String name;
    int age;
    public Person(){

    }
}

四.变量

1.成员变量:

public class Car {
    /*直接定义在类里面的内容,称为类的成员*/
    /*
    成员变量,类的属性,名词
        定义在类中,方法体外
        可以使用java中的任意数据类型(基本数据类型、引用数据类型)
        成员变量可以不为其默认赋值,java会为其默认赋值(构造方法中赋值)
        引用类型默认值 null
        整数   0
        浮点   0.0
        布尔值 false
        char  ' '
        创建对象时,会把成员变量给每个对象空间复制一份
        成员变量可以被成员方法,构造方法,代码块访问
        成员变量作用域为整个类体
        生命周期: 什么时候生(对象被创建), 什么时候销毁(对象被回收)
         */
    String color;
    String name;
    int price;
}

2.局部变量

public class Car{
    public void test(int x){
        /*
         局部变量
           在方法体内(成员方法,构造方法,代码块)
           局部变量可以使用java中任意的数据类型(基本类型,引用类型)
           局部变量不会被默认赋值
           只能作用域所在的代码块内
           生命周期: 什么时候生(方法被调用), 什么时候销毁(方法结束)
           方法的形参 也属于局部变量
        */
        /*
        int a;
        System.out.println(a); 错误,a没有进行初始化
        */
        System.out.println(x);
    }
}

五.方法的分类

1.构造方法

   用来初始化对象的方法

public class Car{
 /*构造方法名与类名相同,没有返回值,不需要void修饰。
     new  Car();  类中默认是有一个无参的构造方法的,在默认的无参构造方法中为成员变量初始化        赋默认值。              
     一个类中可以定义多个构造方法.
        一旦类中定义了有参的构造方法,那么默认无参构造方法将不存在,除非显示定义无参构造方法   
     类中出现了多个名称相同的方法这一特征,称为方法重载.
     调用方法时如何区分这些名称相同的方法?
     可以通过参数的个数,类型,顺序来区分调用的具体是哪个方法
     注意: 方法的返回值与重载没有任何关系。
    */
    public Car(){
        System.out.println("无参构造方法");
    }
}

2.成员方法

public class Car{
    String color;
    String name;
    int price;
/*成员方法  类的行为  动词
    成员方法也可以重载*/
    public void run(){
        System.out.println(name+"以30km/s行驶");
    }
}

六.方法的重载

(1) 方法的重载是指同一个类中具有相同的名字,但参数不同的多个方法。

(2) 以参数的不同来区分: 数量不同、类型不同、顺序不同

(3)方法重载和 访问权限修饰符、返回值类型 没有任何关系

1.构造方法的重载

public class Car{
     String color;
     String name;
     int price;
    public Car(){
        System.out.println("无参构造方法");
    }
    public Car(String a,String b,int c){
        System.out.println("3个参构造方法");
        name=a;
        color=b;
        price=c;
    }
    public Car(String a,String b){
        System.out.println("2个参构造方法");
        name=a;
        color=b;
    }
    public Car(int c,String a,String b){
        System.out.println("3个参构造方法");
        name=a;
        color=b;
        price=c;
    }
}

2.成员方法的重载

public class Car{
     String color;
     String name;
     int price;

    public void run(){
        System.out.println(name+"以30km/s行驶");
    }
    public void run(int speed){
        System.out.println(name+"以"+speed+"行驶");
    }
    public void stop(){
        System.out.println(name+"停止");
    }
}

整体总结  创建代码

package Day1;
public class Car {
   //成员变量  构造方法为其默认赋初始值 
    String color;
    String name;
    int price;
    //构造方法及重载
    public Car(){
        System.out.println("无参构造方法");
    }
    public Car(String a,String b,int c){
        System.out.println("3个参构造方法");
        name=a;
        color=b;
        price=c;
    }
    public Car(String a,String b){
        System.out.println("2个参构造方法");
        name=a;
        color=b;
    }
    public Car(int c,String a,String b){
        System.out.println("3个参构造方法");
        name=a;
        color=b;
        price=c;
    }
    //成员方法及重载
    public void run(){
        System.out.println(name+"以30km/s行驶");
    }
    public void run(int speed){
        System.out.println(name+"以"+speed+"行驶");
    }
    public void stop(){
        System.out.println(name+"停止");
    }

    public void test(int x){
        
        /*
        int a;  局部变量
        System.out.println(a); 错误,a没有进行初始化*/
        System.out.println(x);
    }
}
public class TestCar {
    public static void main(String[] args) {
        Car bm = new Car();   //在内存中开辟了一块空格,存储对象
        bm.name = "宝马";
        bm.color = "白色";
        bm.price = 4000000;
        bm.run();
        bm.stop();
        System.out.println(bm.price);
        Car bc = new Car();
        bc.name = "奔驰";
        bc.color = "黑色";
        bc.price = 8000000;
        bc.run();
        bc.stop();
        System.out.println(bc.price);
        //无参构造为成员变量赋默认值
        Car dz =  new Car();
        System.out.println(dz.name);    //null
        System.out.println(dz.color);   //null
        System.out.println(dz.price);   //0
        dz.test(10);
    }
}

运行结果:

无参构造方法  //验证了 类中默认有一个无参的构造方法,为成员变量进行初始化赋值
宝马以30km/s行驶
宝马停止
4000000
无参构造方法
奔驰以30km/s行驶
奔驰停止
8000000
无参构造方法
null  //无参构造方法赋值的结果
null
0
10

七.调用方法时参数的传递

基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身

1.值传递

(形参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是 两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

创建代码:

//值传递———— 基本类型作为参数
public class TestValue {
    public void test(int x){
        x=20;//x的值发生改变,和a无关
    }
    public static void main(String[] arg){
        TestValue t=new TestValue();
        int a=10;
        t.test(a);
        System.out.println(a); //10
    }
}

2.引用传递

(形参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下 来,所以方法执行中形式参数的改变将会影响实际参数。

/*引用传递 (本质上也是值传递,只是为了和基本类型区分,称为引用地址传递)*/
public class TestRef {
    public void test(Person p){//p=p1=1001  指的是同一个对象
        p.name="李四";
    }
    public static void main(String[] args) {
        TestRef t=new TestRef();
        Person p1=new Person();//p1=1001  一个地址
        p1.name="张三";
        p1.age=20;
        t.test(p1);//引用类型  只是将对象的引用地址值传递
        System.out.println(p1.name); //李四
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谭同学ha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值