3.类的实例化
3.1 什么是实例化
定义了一个类,就相当于在计算机中定义了一种新的类型 ,与 int , double 类似,只不过 int 和 double 是 java 语言自 带的内置类型,而类是用户自定义了一个新的类型,比如上述的:PetDog 类和 Student 类。它们都是类 ( 一种新定 义的类型) 有了这些自定义的类型之后,就可以使用这些类来定义实例 ( 或者称为对象 ) 。
用类类型创建对象的过程,称为类的实例化 ,在 java 中采用 new 关键字,配合类名来实例化对象,举个例子:
classDog { publicStringname; publicStringcolor; publicvoidfun1() { System.out.println("汪汪汪!"); } publicvoidfun2() { System.out.println("摇尾巴!"); } } publicclassTest_4 { publicstaticvoidmain(String[] args) { Dogdog=newDog(); dog.name="旺财"; dog.color="黄色"; System.out.println(dog.name); System.out.println(dog.color); dog.fun1(); dog.fun2(); } }
输出结果:
注意事项
- new 关键字用于创建一个对象的实例.
- 使用 . 来访问对象中的属性和方法.
- 同一个类可以创建多个实例.
3.2类和对象的说明
1. 类只是 一个 模型 一样的东西,用来对一个实体进行描述,限定了类有哪些成员 .
2. 类是一种自定义的类型 ,可以用来定义变量 .
3. 一个类可以实例化出多个对象, 实例化出的对象 占用实际的物理空间,存储类成员变量
4. 做个比方。 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图 ,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间
4.this引用
4.1 为什么要用this引用
我们先来举个例子:
classDateUtil { publicintyear; publicintmonth; publicintday; publicvoidsetDate(inty, intm, intd) { year=y; month=m; day=d; } publicvoidshow() { System.out.println("年:"+year+"月:"+month+"日:"+day); } } publicclassTest_2 { publicstaticvoidmain(String[] args) { DateUtildateUtil=newDateUtil(); dateUtil.setDate(2022, 11, 4); dateUtil.show(); } }
这段代码我们可以看到一个DateUtil类下有多个成员变量和方法,通过一个新的对象去调用这些成员和方法,但是如果这里我们将SetDate中改写成如下代码:
publicvoidsetDate(inty, intm, intd) { year=year; month=month; day=day; }
结果:
我们可以看到,这样并不能给类里的成员变量实例化,是因为这里形参名和成员变量名相同,相当于形参给形参赋值,并没有达到预期的效果,那么在这里this的作用就出来了,我们只需要在这些成员变量前面加个this就好了,这样就能赋值并输出了,那么问题来了,什么事this引用呢???
4.2 什么是this引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过该 引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成
publicvoidsetDate(intyear, intmonth, intday) { this.year=year; this.month=month; this.day=day; }
这里的this表示给当前的对象赋值;
4.3 this引用的特性
1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收