java类的对象是什么意思_java中类和对象的概念
java面向对象的特征有哪些方面1⾸先说说类和对象是怎么那回事。(这部分对于java来说是⼀个⾮常重要的知识)
今天⼼情很好,来学习⼀下java中的类和对象!
Java是什么?Java是⼀门⾯向对象的编程语⾔(OOP),想要理解Java,⾸先要理解类(Class)和对象(Object)这两个概念。
Java中的类可以看成C语⾔的结构体的升级版。结构体是⼀种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可以不⼀样,可以通过结构体来定义结构体变量,每个结构体拥有相同的性质,举个栗⼦:
#include
int main(){
// 定义结构体 Student
struct Student{
/
/ 结构体包含的变量
char *name;
int age;
float score;
};
// 通过结构体来定义变量
struct Student stu1;
// 操作结构体的成员
stu1.name = "⼩艾";
stu1.age = 19;
stu1.score = 99;
printf("%s的年龄是 %d,成绩是 %f\n", stu1.name, stu1.age, stu1.score);
return 0;
}
运⾏结果: ⼩艾的年龄是19,成绩是99
Java中的类也是⼀种构造数据类型,但是对C语⾔中的结构体有所升级,进⾏了⼀些扩展,类的成员不但可以是变量,还可以是函数(⽅法),通过类定义出来的变量也有特定的称,叫做“对象”,例如:
public class Hello {
public static void main(String[] args){
// 定义类Student
class xuesheng{ // 通过class关键字类定义类
// 类包含的变量
String name;
int age;
float score;
// 类包含的函数
void expect(){
System.out.println( name + "的年龄是 " + age + ",成绩是 " + score );
}
}
// 通过类来定义变量,即创建对象
xuesheng stu1 = new xuesheng(); // 必须使⽤new关键字
// 操作类的成员
stu1.name = "⼩艾";
stu1.age = 19;
stu1.score = 99f;
}
}
运⾏结果: ⼩明的年龄是15,成绩是92.5
2.再来对上述语句作解释
xuesheng stu1 = new xuesheng();
通常把这条语句的动作称之为创建⼀个对象,其实,它包含了四个动作。
1)右边的“new xuesheng”,是以xuesheng类为模板,在堆空间⾥创建⼀个xuesheng类对象(也简称为xuesheng对象)。
2)末尾的()意味着,在对象创建后,⽴即调⽤xuesheng类的构造函数,对刚⽣成的对象进⾏初始化。构造函数是肯定有的。如果你没
写,Java会给你补上⼀个默认的构造函数。
3)左边的“xuesheng stu 1”创建了⼀个xuesheng类引⽤变量。所谓xuesheng类引⽤,就是以后可以⽤来指向xuesheng对象的对象引⽤。
4)“=”操作符使对象引⽤指向刚创建的那个Vehicle对象。
我们可以把这条语句拆成两部分:
xuesheng stu 1;
stu11 = new stu1();
效果是⼀样的。这样写,就⽐较清楚了,有两个实体:⼀是对象引⽤变量,⼀是对象本⾝。
在堆空间⾥创建的实体,与在数据段以及栈空间⾥创建的实体不同。尽管它们也是确确实实存在的实体,但是,我们看不见,也摸不着。不仅如此,
我们仔细研究⼀下第⼆句,刚创建的对象叫什么名字?有⼈说,它叫“xueshng”。不对,“xuesheng”是类(对象的创建模板)的名字。
⼀个Vehicle类可以据此创建出⽆数个对象,这些对象不可能全叫“Vehicle”。
对象连名都没有,没法直接访问它。我们只能通过对象引⽤来间接访问对象。
为了形象地说明对象、引⽤及它们之间的关系,可以做⼀个或许不很妥当的⽐喻。对象好⽐是⼀只很⼤的⽓球,⼤到我们抓不住它。引⽤变量是⼀根绳, 可以⽤来系汽球。
如果只执⾏了第⼀条语句,还没执⾏第⼆条,此时创建的引⽤变量stu1还没指向任何⼀个对象,它的值是null。引⽤变量可以指向某个对象,或者为null。
它是⼀根绳,⼀根还没有系上任何⼀个汽球的绳。执⾏了第⼆句后,⼀只新汽球做出来了,并被系在stu1这根绳上。我们抓住这根绳,就等于抓住了那只汽球。
再来⼀句:
xuesheng stu2;
就⼜做了⼀根绳,还没系上汽球。如果再加⼀句:
stu2 = stu1;
系上了。这⾥,发⽣了复制⾏为。但是,要说明的是,对象本⾝并没有被复制,被复制的只是对象引⽤。结果是,stu2也指向了stu1所指向的对象。两根绳系的是同⼀只汽球。
如果⽤下句再创建⼀个对象:
stu2 = new xuesheng();
则引⽤变量stu2改指向第⼆个对象。
从以上叙述再推演下去,我们可以获得以下结论:
(1)⼀个对象引⽤可以指向0个或1个对象(⼀根绳⼦可以不系汽球,也可以系⼀个汽球);
(2)⼀个对象可以有N个引⽤指向它(可以有N条绳⼦系住⼀个汽球)。
如果再来下⾯语句:
stu1 = stu2;
按上⾯的推断,stu1也指向了第⼆个对象。这个没问题。问题是第⼀个对象呢?没有⼀条绳⼦系住它,它飞了。多数书⾥说,它被Java的垃圾回收机制回收了。
这不确切。正确地说,它已成为垃圾回收机制的处理对象。⾄于什么时候真正被回收,那要看垃圾回收机制的⼼情了。
由此看来,下⾯的语句应该不合法吧?⾄少是没⽤的吧?
new xuesheng();
不对。它是合法的,⽽且可⽤的。譬如,如果我们仅仅为了打印⽽⽣成⼀个对象,就不需要⽤引⽤变量来系住它。最常见的就是打印字符串:
System.out.println(“I am Java!”);
字符串对象“I am Java!”在打印后即被丢弃。有⼈把这种对象称之为临时对象。
对象与引⽤的关系将持续到对象回收
在C语⾔中,通过结构体名称就可以完成结构体变量的定义,并分配内存空间:C语⾔Struct Student stu1这样不但定义了结构体变量,并且也分配了内存空间。
但是在Java中,仅仅通过类来定义变量不会分配内存空间的,必须使⽤new关键字来完成内存空间的分配:Student stu=new
Student()。(实际上这条语句相当于Student stu;stu=new Student;这两句代码,第⼀句代码的意思是创建stu这样⼀个变量,第⼆条语句是给stu分配内存空间)。
可以将类⽐喻成图纸,对象⽐喻成零件,图纸说明了零件的参数;⼀张图纸可以⽣产出具有相同性质的零件,不同图纸可以⽣产不同类型的零件。
在Java中,使⽤new关键字就能创建⼀个对象,即将图纸⽣产成零,这个过程叫做类的实例化,因此也称为对象是类的⼀个实例。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论