初识面向对象

类和对象的概念

  • 类:是模子,确定对象将会拥有的特征(属性)和行为(方法)
  • 对象:类的实例表现
  • 属性:对象具有的各种静态特征,即“对象有什么”
  • 方法:对象具有的各种动态行为,即“对象能做什么”

创建类和对象

定义类
#如果没有初始化属性值,那么会自动设置默认值
image.png image.png

cat.java
定义类的属性和方法

  1. package com.demo;
  2. /**
  3. * 宠物猫类
  4. *
  5. * @author 57681
  6. *
  7. */
  8. public class Cat {
  9. // 属性
  10. String name;
  11. int age;
  12. double weight;
  13. String species;
  14. // 方法
  15. public void run() {
  16. System.out.println("I can run");
  17. }
  18. public void eat() {
  19. System.out.println("I can eat");
  20. }
  21. }

CatTest.java
实例化类的对象

  1. package com.demo;
  2. public class CatTest {
  3. public static void main(String[] args) {
  4. // 对象实例化
  5. Cat kitty = new Cat();
  6. kitty.eat(); // I can eat
  7. kitty.run(); // I can run
  8. System.out.println(kitty.name); // null
  9. System.out.println(kitty.age); // 0
  10. System.out.println(kitty.weight); // 0.0
  11. System.out.println(kitty.species); //null
  12. }
  13. }

实例化对象说明

实例化对象的过程可以分为两部分

  1. 声明对象 Cat kitty

在栈空间中开辟一个区域,取名叫kitty,但是此时还不能操作对象,因为里面是空的

  1. 实例化对象 new Cat()

在堆空间中开辟一个区域,同时初始化对象

实例化对象的完整操作:Cat kitty = new Cat();
kitty 中存放的是实例化之后对象的地址

构造方法

构造方法的特点

  1. 构造方法与类同名且没有返回值
  2. 访问修饰符可以省略
  3. 只能在对象实例化的时候调用
  4. 当没有指定构造方法时,系统会自动添加无参的构造方法
  5. 当有指定构造方法,无论有参,无参的构造方法,都不会自动添加无参的构造方法
  6. 一个类中可以有多个构造方法

image.png

构造方法的实例

Cat.java

  1. package com.demo;
  2. /**
  3. * 宠物猫类
  4. *
  5. * @author 57681
  6. *
  7. */
  8. public class Cat {
  9. // 属性
  10. String name;
  11. int age;
  12. double weight;
  13. String species;
  14. // 无参构造方法
  15. Cat() {
  16. System.out.println("我是无参构造方法");
  17. }
  18. // 有参构造方法
  19. Cat(String name, int age, double weight, String species) {
  20. this();
  21. this.name = name;
  22. this.age = age;
  23. this.weight = weight;
  24. this.species = species;
  25. }
  26. // 方法
  27. public void run() {
  28. System.out.println("I can run");
  29. }
  30. public void eat() {
  31. this.run(); // 调用成员方法,其实this可以省略,直接run()也是一样的效果
  32. System.out.println("I can eat");
  33. }
  34. }

CatTest.java

  1. package com.demo;
  2. public class CatTest {
  3. public static void main(String[] args) {
  4. // 对象实例化
  5. Cat kitty = new Cat("kitty", 12, 24.5, "中华田园猫");
  6. kitty.eat(); // I can eat
  7. kitty.run(); // I can run
  8. System.out.println(kitty.name); // kitty
  9. System.out.println(kitty.age); // 12
  10. System.out.println(kitty.weight); // 24.5
  11. System.out.println(kitty.species); // 中华田园猫
  12. }
  13. }

this关键字

  • this指向的是当前的实例化对象
  • this可以调用成员属性,解决成员属性和局部变量同名冲突
  • this可以调用成员方法
  • 在有参构造函数中,可以通过this()调用同一个类的无参构造方法,但是必须放在方法体内第一行
  • 在无参构造函数中,可以通过this(参数)调用同一个类的有参构造方法,但是必须放在方法体内第一行
  • 不能再静态方法中使用