Java的一些基本概念和它们之间的关系
在CSDN中有个帖子问到下面四个问题,我估计帖子的斑竹是一个学生,他存在的问题其实困扰着很多初学java的人。这是因为,很多书上把概念都没有讲清楚。下面我把该斑竹的问题图贴出来,然后针对这位斑竹的4个问题给大家解释一下困扰java初学者的一些基本问题。
1、为什么要创建BubbleSort类的对象,不创建会怎样?
因为BubbleSort类里的方法都是实例方法(也就是没有用static修饰符修饰的方法),不是静态方法,而要是程序正真能够展示其功能,必须调用类的方法,实例方法只能通过对象调用,所以必须创建BubbleSort类的对象,例如:BubbleSort类里的sort方法只能用BubbleSort类的对象调用。当然如果不想创建对象就能调用类的方法,那么这些方法就必须是静态方法(也称为类方法),那么你在定义静态方法时必须在方法声明的方法类型前面用static修饰符修饰,这样就可以不用创建对象,直接用 类名.方法名 就可以调用静态方法了。
补充知识点:其实这个问题引出了两个基本概念和一个基本关系:
2、 什么是类?
类就是对客观事物抽象编码化后形成的面向对象编程语言的基本程序单位。就比如:设计汽车的图纸。类包含两大组成部分:
a. 属性(成员变量):通常是描述事物状态的。
b. 方法:通常是描述如何改变事物状态(属性)和事物行为方式的。
3、 什么是对象?
对象是指某个类的对象,按照类创建的实体,就比如:我们按照汽车设计图中生产出来的汽车。对象是某个类的个体,通常要用
new 类的构造方法();
创建类对象。
4、 类与对象有什么关系?
类与对象的关系有点类似我上面举的例子:设计图纸与实体的关系,类是对象的模板,对象是按照模板生成出来的实体;也可以理解为:类是集合,对象是个体。
5、sorter是什么意思?
准确的说:sorter是声明的一个BubbleSort类的变量,也被称为对象名,它也是一个BubbleSort类对象的引用(指向BubbleSort类对象的地址),同时在这一句里:BubbleSort sorter = new BubbleSort();也用 new BubbleSort()创建了一个ubbleSort类对象,并通过赋值符号“=”让ubbleSort类对象的引用sorter指向了该对象。
补充知识点:其实这个问题引出了三个基本概念和一个基本关系:
6、 什么是对象?
什么是对象请参看上一题的回答。
7、什么是实例变量?
实例变量是属于对象的,是在对象创建的时候在堆中按照类里定义的实例成员变量模板生成的变量,会随着对象生命周期的结束而消失(生命周期结束),一个类的每个对象的实例成员变量都是不同的变量,它们在堆内存中要分配不同的内存空间。实例成员变量在声明的时候不能用static修饰符修饰。实例变量使用【对象名】引用。
8、什么是类变量?
类变量是与实例变量相对的,类变量是在类被调入方法区的时候产生,它的生命周期伴随着程序结束而结束,它不会为每个对象生成不同的变量,因此,不会在创建对象时在堆中为其分配内存。类变量必须在声明的时候用static修饰符修饰。类变量使用【类名】引用,也可以用【对象名】引用。
9、类变量与对象有什么关系?
类变量与对象没关系,不会因为对象的创建而产生,所以类变量对于所有对象其值都是一样的。
10、第一个for语句为什么从下标1开始?不应该从0开始吗?
这时排序算法的独特地方,因为1个元素不需要排序,我们就认为其是有序的,所以从第二个元素进行冒泡。
11、showArray是什么意思?
showArray是一个实例方法,它是用于把传入的实际参数数组输出到显示器上的实例方法。
5、什么是实例方法?
类中没有被static修饰的方法,只能由【对象】引用。
6、什么是类方法?
类方法是由static修饰的方法,可以由【类名】引用,也可以由【对象】引用。
7、类方法与实例方法有什么区别?
请参看类方法与实例方法的区别