认识类和对象
简单认识类
类是用来描述一个实体(对象),当我们定义一个类,就相当于在计算机中重新定义了一种类型
类的定义形式
//创建类
class Dog{
//属性(成员变量)
//行为(成员方法)
}
class是创建类的关键字,Dog是类名,{主体,包括成员变量,成员方法}
我们可以想想Dog有什么属性,行为都可以写在主体中(每个人的认知不懂,写出的属性和行为都可能有区别)
public class Dog {
//属性
public String name; // 名字
public int age; //年龄
public String brand; //品种
//行为
public void sleep(){
System.out.println(name + "在睡觉~");
}
public void eat(){
System.out.println(name + "在吃饭~");
}
public void wc(){
System.out.println(name + "在嘘嘘~");
}
}
注意:
类名要求用大驼峰定义如:ClassName
一个文件中尽量只定义一个类
类名要和文件名相同
如果要修改类名,要使用开发工具修改
类的实例化
什么是类的实例化
类的实例化也是创建对象的过程->通过类来创建对象称为类的实例化,通过类名和new关键字来创建对象,实例化的对象站物理空间,储存类成员变量
//类的实例化
Dog dog1 = new Dog();
Dog dog2 = new Dog();
Dog dog3 = new Dog();
//.....
一个类可以实例化无数个对象,但是实例化的对象都是在栈上,其中存储指向堆空间的引用,堆空间中存储类的成员变量
如何访问对象当中的成员
public class TestDog {
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.name = "旺财";
dog1.age = 8;
dog1.brand = "拉布拉多";
dog1.sleep();
dog1.wc();
dog1.eat();
}
}
可以通过对象名+点号的形式进行访问对象中的成员
总结
类就相当于一张蓝图,我们通过实例化将蓝图一步步变成现实。就好比造房子,拿到类这个图纸,通过实例化一个又一个不同的房子
this关键字
this关键字作为当前对象的引用,代表调用该方法的对象(可以通过它访问类对象成员变量)
那我们为什么要用this关键字?我们大可以这样:
那要是成员变量和参数一样呢?
此时我们运行会发生什么?
此时就相当于自己给自己赋值
加上this关键字后,此时this引用就指向调用该方法的对象,就可以准确找到对象
this是成员方法的第一个隐藏参数,成员方法在执行的时候,编译器会自动传递调用该成员方法对象的引用给成员方法
同样也可以通过this调用成员方法
this总结:
this只能在成员方法中调用
this在成员方法中只能引用当前对象,不能引用其他对象
this类型:当前所在类类型
构造方法
我们都知道变量必须要初始化才能编译成功并运行而构造方法可以更好的帮我们初始化
构造方法是一个特殊的成员方法,名字必须和类名相同,在创建对象时由编译器自动调用,在整个对象的生命周期中只调用一次
若没有写该方法,编译器会自动生成无参构造方法,当已经有构造方法时,编译器不会自动生成无参构造方法,这时再new 对象编译器会报错
这个时候就需要补上不带参数的构造方法,建议每次写的时候都带上
那要是我们需要带参数量不一样呢,一个个写吗,是不是有点麻烦?考虑这种情况IDEA就提供了快捷键-》只需右键空白处操作即可(这里就构成了重载)
这里也可以使用this关键字调用其他构造方法:在无参方法中调用带三个参数的方法
this()必须在第一行
但是有个点,不能成环使用
打印对象
此时就可以重写toString方法
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
", brand='" + brand + '\'' +
'}';
}
这个也有快捷键