Java基础<五>---> 面向对象与类(匿名对象、构造函数、this、静态等)

第一 面向对象

一、面向对象的概述:

         java是一种面向对象的编程语言。面向对象就是把面向过程封装在对象中,从关注过程过度到关注对象,这是一种思想,贯穿于整个java,面向对象让编程更加简单易学。例如面向过程中关注冰箱的打开、存储、关闭,而面向对象关注的是冰箱这个对象,冰箱.打开,冰箱.存储,冰箱.关闭。

         面向对象: 人开门,名词提炼法 人 { 开门(门) { 门.开 } } 门 { 开(){门打开} }。

         那么将这种思想提升到一种境界就是:万物皆对象。

1、对面向对象的理解:

①、面向对象是相对面向过程而言的,且基于面向过程的。

②、面向对象是一种思想。

③、面向对象将功能封装进对象中,强调了具备功能的对象,主体是对象,将过程简化

④、在实际开发中,以对象为核心,先明确好对象,再实现具体功能。简单说来,有对象拿过来用,没有对象建立对象,封装方法,然后用对象。

⑤、面向对象的三个特征:封装性,继承性,多态性。

2、举例说明:

         公司招人就是一个面向对象的例子,公司找人来为公司工作,就是在调用这个人的工作能力的方法。

第二 类与对象

一、类与对象概述

1、类(class):可以理解为是构造对象的一个蓝图或者模板,是抽象的概念;反过来说,对象是以类为模型创造的具体实例,是对类的一种具体化、形象化。

类:对生活中事物的描述

对象:对类的具体实现,是实实在在存在的实体。

2、例如:汽车的设计

类:指的是汽车的设计图纸

对象:指实际生产出来的汽车。

二、成员变量与局部变量:

在类中的不同位置定义变量,作用范围是不同的,下面简单区分一下,两种变量的不同:

1)作用范围:

   a.成员变量:作用于整个类中

   b.局部变量:作用于函数中,或者作用于语句块中。

2)在内存中的位置:

   a.成员变量:在堆内存中,因为对象的存在才在内存中存在。

   b.局部变量:在栈内存中,随着函数的结束而消亡

3)初始化方式:

   a.成员变量:随着对象建立而初始化,在堆内存中被加载,有默认值

   b.局部变量:随着方法的加载而加载进栈内存中,无初始化值,必须被初始化才能参与运算

三、匿名对象:

使用方式一:当对对象方法只调用一次,可以用匿名对象,这样写简化new Car().run();不能调用成员变量,这样的操作没有意思; 

使用方式二:可以将匿名对象作为实际参数进行传递

第三 对象与函数

一、主函数(main):

public static void main(String[] args)主函数是一个特殊的函数,作为程序入口可以被jvm调用

1、主函数的定义:

1.1、Public代表该访问权限是最大的。

1.2 、  Static代表该主函数随着类的加载就已经存在

1.3 、 Void主函数没有具体的返回值

1.4、  main不是关键字,但是是一个特殊单词能被jvm识别

1.5 、  String[] args主函数的参数,是一个字符串的数组

1.6、   Jvm调用主函数时,传给主函数的参数是new String[0]

二、构造函数:

构造函数与类名相同,不用定义返回值类型,不可以写return语句。对象一建立就会调用相对应的构造函数

作用:可以给对象进行初始化。

小细节:当一个类中没有定义构造函数时,系统会默认给加一个空参数的构造函数,当在类中自定义了构造函数,系统就不再添加默认的构造函数。

构造函数在对象一建立就运行,给对象初始化,构造函数只运行一次。而一般方法是对象调用才执行,一般方法可被对象调用多次。一些对象初始化就需要具备一些属性或功能就需要定义在构造函数中

class Demo{
    Demo(){}//这就是构造函数,需要初始化的在此定义
}
三、构造代码块:

class Demo{
    {构造代码块}
}

构造代码块,是给对象进行初始化的对象一建立就执行且优先于构造函数执行。

和构造函数的区别:构造代码块是对所以对象进行统一初始化,构造函数是给对应的对象初始化。

四、关于this关键字:

 This关键字:代表当前对象,构造函数之间的调用只能用this(参数),this语句只能放在构造函数的第一行,因为初始化要先执行。一般函数不能调用构造函数

五、关于静态static:

静态static:是一个修饰符,用于修饰成员(成员变量,成员方法),当成员被静态修饰后除了能被对象调用还可以直接被类名调用:类名.静态成员。

特有的属性随着对象存储,所以不能被定义为私有的,只有共享数据才被定义为静态。

特点:

1、随着类的加载而加载随着类的消失而消失生命周期最长优先于对象存在

2、被所有对象共享,可以直接被类调用。

3、静态成员存放在方法区

实例变量(成员变量)和类变量(静态变量)的区别:

1、类变量存放在方法区中,生命周期最长。实例变量随着对象的建立存放在堆内存中,随着对象的消失而消失。

2、静态不能访问非静态,非静态可以访问静态。

3、静态方法中不能定义this和super关键字,因为静态优先于对象存在。

什么时候用静态:

当功能内部没有访问到非静态(对象的特有数据),那么该功能就可以定义为静态的。如果需要强制不能建立对象,就将构造函数私有化。


补充一点:创建对象是内存的加载顺序

1、静态加载进内存

2、 在栈中开辟 main 空间 , 创建变量

3、在堆内存中开辟空间,分配地址

4、默认初始化

5、显示初始化

6、构造代码块初始化

7、构造函数初始化

8、将内存地址赋给变量,变量指向堆内存实体



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值