深入理解Java中面向对象含义

学习时间:

2020-11-18

学习内容:

面向对象思想

A:面向过程思想概述
我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。
一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。
面向过程的代表语言:C语言
B:面向对象思想概述
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。
可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了。这时就开始思索,
能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。
这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
C:面向对象思想特点
a:是一种更符合我们思想习惯的思想 懒人思想
b:可以将复杂的事情简单化 
c:将我们从执行者变成了指挥者
	角色发生了转换
	
简而言之,面向对象可以简单地理解为,为了实现这个目标“不择手段”,不考虑为什么,只关心是否实现。

类和对象

我们如何描述现实世界事物
举例: 描述学生事物
	 	姓名 , 年龄 , 性别 ....
		学习 , 吃饭 , 睡觉 ....	

属性:	就是该事物的描述信息
行为:	就是该事物能够做什么
我们学习编程语言,就是为了模拟现实中的事物,我们学习的Java语言最基本单位是类,所以,我们就应该把事物用一个类来体现。
由此我们就得到了现实中的事物和类的对应关系
	事物	----------------- 类
	属性	----------------- 成员变量
	行为	----------------- 成员方法
C:定义类其实就是定义类的成员(成员变量和成员方法)
a:成员变量	和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
b:成员方法	和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。
D:类和对象的概念
a:类:是一组相关的属性和行为的集合
b:对象:是该类事物的具体体现
c:举例:
	类	学生
	对象	班长就是一个对象	

在面对一类事物的时候,我们通常用这个类中的某一个具体对象体现。
比如:
电脑这个类,它有它的属性,如品牌,颜色,价格。。。这些东西在某一刻是不可变的,是属于他的属性(Java中将其抽象称为成员变量)。他还有许许多多的功能,比如上网,办公,听音乐。。。。这些是它的功能,就是可以通过它办成的事情(Java将其抽象称为成员方法)。
那么成员变量局部变量有什么不一样呢?

成员变量和局部变量的不同之处:

A:在类中的位置不同
成员变量:在类中方法外
局部变量:在方法定义中或者方法声明上
B:生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
C:在内存中的位置不同
成员变量:在堆内存
局部变量:在栈内存
D:初始化值不同
成员变量:有默认初始化值
局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。

注意事项::	局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

这里用一个电脑类来说明:

public class Computer {
    String symbol;      //成员变量
    String name;
    int price;

    public void Internet(){     //成员方法
        System.out.println("功能一:上网");
    }
    public void Learn(){
        System.out.println("功能二:学习");
    }
    public void Music(){
        System.out.println("功能三:音乐");
    }
}


public class Test {
    public static void main(String[] args) {
        Computer com = new Computer ();
        com.name="电脑一号";
        System.out.println("电脑的名字是"+com.name);
        com.price=10086;
        System.out.println("电脑的品牌是"+com.price);
        com.symbol="联想";
        System.out.println("电脑的价格是"+com.symbol);
        com.Internet();
        com.Music();
        com.Learn();
    }
}

内存图分析:
在这里插入图片描述
匿名对象

A:什么是匿名对象
就是没有名字的对象
B:匿名对象应用场景
a:调用方法,仅仅只调用一次的时候。
b:匿名对象可以作为实际参数传递
public class MyTest {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name="小白";
        dog.eat();
        dog.eat();
        dog.eat();
        System.out.println("====================");
        //匿名对象:没有名字的对象,他可以调用方法,可以成员变量
        //每new 一次都是一个新的对象
        //1.如果这个方法,仅仅只想调用一次,你可以使用匿名对象来调用。
        //2.匿名对象可以作为参数来传递
        new Dog(); //匿名对象1

        new Dog().eat();	//匿名对象2
        new Dog().eat();	//匿名对象3
        new Dog().eat();	//匿名对象4

        new Dog().name="小黑";
        System.out.println("===========================");
        Dog dog1 = new Dog();
        test(dog1,10);
        System.out.println(dog1.name);  //null
        System.out.println(dog1.age); //10

        System.out.println("===========================");
        //匿名对象可以作为参数传递
        Dog dog2 = new Dog() ;
        test(new Dog(), 20);
        test(dog2, 20);
        test(dog2, 20);
        System.out.println(dog1.name);  //null  null
        System.out.println(dog1.age); //20  10
    }

    public static void test(Dog dog,int age){
        dog.age=age;

        System.out.println(dog.name+"====");
        System.out.println(dog.age+"=====");

    }
}
public class Dog {
    String name;
    int age;
    public void eat(){
        System.out.println("狗吃骨头");
    }
}

值得注意的是每new一次,就会出现一个新的匿名对象。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值