类与对象

来源:互联网 发布:奶酪陷阱 知乎 编辑:程序博客网 时间:2024/06/07 03:25

类与对象

类(Class):实际上是定义同一类所有对象的变量和方法的蓝图或原型,它表示对现实生活中一类具有共同特征的事物的抽象,也就是对现实生活中事物的描述。

对象:就是这类事物,实实在在存在的个体。在现实中我们可以把任何东西看做是对象。

因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。通常通过调用类的一个构造函数来创建它。

那么,是先有的类还是先有的对象呢?

对于计算机语言来说是先有类后有对象,因为计算机是要先描述才产生对象,而对于现实来说是先有对象后类,因为我们是先看到对象后才想去描述它。    描述在java中是用类的形式来体现的。

我们在描述什么呢?

其实就是描述这个事物的属性与行为。(属性对应是类中的变量,行为对应的类中函数(也就是方法)。)

而定义类,其实就是在描述事物,就是在定义属性和行为。属性和行为又共同成为类中的成员(成员变量和成员方法(成员函数))。

在类中定义其实都称之为成员。成员有两种:

 

1.成员变量:其实对应的就是事物的属性。

2.成员函数:其实对应的就是事物的行为。

 

成员变量和局部变量的区别:

 

1.成员变量直接定义在类中。

  局部变量定义在方法中,参数上,语句中。

 

2.成员变量在本类中都有效。

  局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。

 

3.成员变量存在于堆内存中,随着对象的产生而存在,消失而消失。

  局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。

 

对象在java是什么样的呢?

对象在java中通过一个new操作符会产生一个实体,这个实体是在堆内存中。也就是说具体对象就是对应java在堆内存中用new建立的实体。

所以把所描述的事物映射到内存中的一个是类,一个是实体。

那什么可以称之为实体呢?

凡是用来存储多个数据的我们就称之为实体。它们都放在堆内存中。



类与对象的关系

------找对象,建立对象,使用对象,维护对象的关系

现实生活中的对象:张三 李四。
想要描述:提取对象中共性内容。对具体的抽象。
描述时:这些对象的共性有:姓名,年龄,性别,学习Java功能。
映射到java中,描述就是class定义的类。
具体对象就是对应java在堆内存中用new建立实体。

类就是:对现实生活中事物的描述。
对象:就是这类事物,实实在在存在个体。
举例说明:

需求:描述汽车(颜色,轮胎数)。描述事物其实就是在描述事物的属性和行为。
属性对应是类中变量,行为对应的类中的函数(方法)。
其实定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同成为类中的成员(成员变量和成员方法)

成员变量和局部变量:

作用范围。
成员变量作用于整个类中。
局部变量变量作用于函数中,或者语句中。
在内存中的位置:
成员变量:在堆内存中,因为对象的存在,才在内存中存在。
局部变量:存在栈内存中。


构造函数

特点:

函数名与类名相同

不定义返回值

不可以写return语句

作用:给对象进行初始化

注意:1.默认构造函数的特点。2 多个构造函数是以重载的形式存在的

对象一建立就会调用与之对应的构造函数。
构造函数的作用:可以用于给对象进行初始化。
构造函数的小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。
当在类中自定义了构造函数后,默认的构造函数就没有了。
构造函数和一般函数在写法上有不同。
在运行上也有不同。
构造函数是在对象一建立就运行。给对象初始化。
而一般方法是对象调用才执行,给是对象添加对象具备的功能。
一个对象建立,构造函数只运行一次。
而一般方法可以被该对象调用多次。
什么时候定义构造函数呢?
当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。


this关键字:1.代表本类对象,2构造函数之间调用

1.this:看上去,是用于区分局部变量和成员变量同名情况。
this为什么可以解决这个问题?
this到底代表的是什么呢?
this:就代表本类的对象,到底代表哪一个呢?
this代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象。
但凡本类功能内部使用了了本类对象,都用this表示。

2.this语句 :用于构造函数之间进行互相调用。
this语句只能定义在构造函数的第一行。因为初始化要先执行。


static关键字

1

 static 关键字:用于修饰成员(成员变量和成员函数)

     被static修饰后的成员具备以下的特点:

随着类的加载而加载

优先于对象存在

被所有对象所共享

可以直接被类名调用

 使用注意:静态方法只能访问静态成员

静态方法中不可以写this,super关键字

主函数是静态的

2

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


static特点:
1,随着类的加载而加载。
   也就说:静态会随着类的消失而消失。说明它的生命周期最长。


2,优先于的对象存在
明确一点:静态是先存在。对象是后存在的。


3,被所有对象所共享
4,可以直接被类名所调用。


实例变量和类变量的区别:
1,存放位置。
类变量随着类的加载而存在于方法区中
实例变量随着对象的建立而存在于堆内存中。
2,生命周期:
类变量生命周期最长,随着类的消失而消失。
实例变量生命周期随着对象的消失而消失。


静态使用注意事项:
1,静态方法只能访问静态成员。
非静态方法既可以访问静态也可以访问非静态。

2,静态方法中不可以定义this,super关键字。
因为静态优先于对象存在。所以静态方法中不可以出现this。
3,主函数是静态的。

静态有利有弊
利处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一份。
可以直接被类名调用。
弊端:生命周期过长。
  访问出现局限性。(静态虽好,只能访问静态。)


 java主函数:

public static void main(String[] args) 

主函数:是一个特殊的函数。作为程序的入口,可以被jvm调用。

主函数的定义:
public:代表着该函数访问权限是最大的。
static:代表主函数随着类的加载就已经存在了。
void:主函数没有具体的返回值。
main:不是关键字,但是是一个特殊的单词,可以被jvm识别。
(String[] arr):函数的参数,参数类型是一个数组,该数组中的元素是字符串。字符串类型的数组。

主函数是固定格式的:jvm识别。

jvm在调用主函数时,传入的是new String[0];


什么时候使用静态:

什么使用静态?
要从两方面下手:
因为静态修饰的内容有成员变量和函数。
什么时候定义静态变量(类变量)呢?
当对象中出现共享数据时,该数据被静态所修饰。
对象中的特有数据要定义成非静态存在于堆内存中。
什么时候定义静态函数呢?
当功能内部没有访问到非静态数据(对象的特有数据),
那么该功能可以定义成静态的。



0 0
原创粉丝点击