众所周知,Java是一门面向对象的语言,相比于C语言的面向过程,Java更在意怎么去抽象化一个我们所需要的对象,今天让我们一起来学习一下Java语法中的类与对象的相关知识!
一·类
1.1 认识类
在认识类之前,我们需要简单介绍一个Java语言中的对象,其实这个也很好理解,比如说:一台洗衣机,一个小动物等等都可以称作对象,这些对象包括静态属性和动态属性,静态属性指的是这个对象本身所具有的属性,动态属性一般指的是对象所具有的功能或者所拥有的行为;有了对象之后,我们就需要定义一个类把对象进行包装,通过类的包装,计算机就可以去识别了(这里有点类似于C语言的结构体,结构体中包含相对应的成员变量)。
1.2 如何定义类
当我们有一个对象时,需要类来进行包装,那么如何定义一个类呢?
类的定义格式:
class 类名{
成员变量1;
成员变量2;//这里的1 2为静态属性且也1 2 也能称为字段
成员方法1;
成员方法2;//这里的1 2为动态属性
}
//注意类名的命名格式为大驼峰
让我们来定义一个小狗类
class Dog{
public String color;
public String name;
public int age;
public void eat(){
System.out.println("吃饭!");
}
public void sleep(){
System.out.println("睡觉!");
}
}
注意:
1.在这里我们先默认成员变量前面用public修饰符修饰,成员方法前面不加static(后面介绍)
2.成员方法的命名格式为小骆峰
1.3 类的实例化
当我们有一个类的时候,我们需要对这个类初始化对象,调用类里面的方法,这个过程就是类的实例化,我们继续拿小狗类来进行讲解:
class Dog{
public String color;
public String name;
public int age;
public void show(){
System.out.println("name:"+name+" "+"color:"+color+" "+"age:"+age);
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "花花";
dog.color = "白色";
dog.age = 3;
dog.show();
}
}
如图可以看出通过dog引用来访问类的成员及方法,图片中的第一行代码就是类的实例化,实例化会生成一个引用,这个引用指向Dog类
二· this引用
2.1 this的功能
1.通过this.访问普通成员变量
2.通过this.访问普通成员方法//这里的普通主要是为了静态区分
3.通过this()访问构造方法
2.2 形参与成员变量重名时
class Dog{
public String color;
public String name;
public int age;
public Dog(String color, String name, int age) {
color = color;
name = name;
age = age;
}
public void show(){
System.out.println("name:"+name+" "+"color:"+color+" "+"age:"+age);
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog("花花","白色",3);
dog.show();
}
}
这时我们发现打印结果并不是我们初始化赋值的结果,为什么呢?
原因:当形参和成员变量重名时,编译器会默认为把形参赋值给形参,成员变量赋值失败,此时会打印各种类型所对应的“0”值,引用类型为null,整形为0......此时需要this这个关键字来告诉编译器所需要赋值的对象是成员变量
编译正确,this这个关键字是为了告诉我们此时是对象访问成员变量
我们也可以用Generate来直接生成这个方法
2.3 this调用普通成员方法
通过this.来调用show这个方法,编译结果和上面一样
2.4 this调用构造方法
这部分等讲解完构造方法再进行讲解
三· 构造方法
构造方法只有一个作用,就是初始化对象,那么如何初始化对象呢?初始化对象的方法有哪些?
1.通过实例化对象然后用点访问来给对象赋值
2.就地初始化
就地初始化就是在类里面定义成员变量的时候直接给成员变量就行赋值,但是这种方法的缺点就是只能赋值一次
3.通过构造方法进行初始化
构造方法初始化分为两种,无参构造方法和有参构造方法,构造方法初始化是一旦实例化一个对象之后就会初始化,其中构造方法的方法名必须与类名一样
无参构造方法:
当实例化对象时是无参传入时,会调用无参构造方法,当类中没有一个构造方法时,编译器会默认提供一个无参构造方法(注意这里说的时没有一个构造方法时,若有一个有参的构造方法,实例化对象传的无参时编译器不会提供一个无参的构造方法,会报错)
此时编译器会默认提供一个无参的构造方法,没写不代表没有提供,此时实例化对象没有初始化打印结果为对应类型的”0“值
再看一种情况:
这种情况用户提供一个三个参数的构造方法,此时再无餐传入时会报错,因为当类中有构造方法时,编译器不会默认提供一个无参构造方法
有参构造方法:
这里只需要一一对应即可,即传入的参数与所定义的构造方法要相对应(包括参数类型和参数个数)
实例化对象时初始化对象,编译成功
现在我们来说一下this调用构造方法
当实例化对象时无参传入,会进入无参构造方法中,在无参构造方法中通过this()来调用有参构造方法来进行赋值,其中this(),括号内输入所需初始化的内容,注意this语句需要放在这个构造方法的第一句,否则会报错
this关键字总结:
1.this 的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型2. this 只能在 " 成员方法 " 中使用3. 在 " 成员方法 " 中, this 只能引用当前对象,不能再引用其他对象4. this 是 “ 成员方法 ” 第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this 负责来接收