Java类与对象

1 阅读3分钟

类的创建

  • 可以用class关键字来修饰一个类;
  • 我们通常会把各种事物分解成各种属性和功能,再抽象成类的形式。
public class Bus { 
	int width; 
	int height; 
	int seating; 
	double price; 
	double balance; 
	String number;
	boolean isOpen; 
	boolean isRuning;
	public void stop() {
	    isRuning = false;
	    System.out.println("已停车!");
	}
	
	public void start() {
	    isRuning = true;
	    System.out.println("正在行驶!");
	}
	
	public void regist(String no) {
	    number = no;
	    System.out.println("注册成功!您的车牌号是" + number);
	}
	
	public void pay(double money) {
	    if (money < price) {
	        System.out.println("钱没给够,快下车!");
	    } else {
	        balance = balance + money;
	        seating -= 1;
	        System.out.println("欢迎乘坐!");
	    }
	}
	
	public void openDoor() {
	    isOpen = true;
	    System.out.println("开门!");
	}
	
	public void closeDoor() {
	    isOpen = false;
	    System.out.println("关门!");
	}
}

类的使用(创建对象)

  • 类的使用
  • 使用new关键字,可以把类实例化(创建)成一个对象,并交给变量b来持有;
  • 通过b.可以访问这个对象里面的方法或者成员变量
Bus b = new Bus();
b.regist("闽A000000"); //注册成功!您的车牌号是闽A000000
b.start(); //正在行驶!
b.stop(); //已停车!
b.openDoor(); //开门!
b.pay(0); // 欢迎乘坐!
b.start();// 正在行驶!
  • 对象名实际上也是一个保存地址的指针(引用),即为对象也是引用型变量

image.png

  • 因此对象是引用型变量,所以不可以通过赋值其他对象名的方式创建对象

成员变量

  • 成员变量:定义在类内部但在方法外部的变量,也就是直接写在Class内的变量,通常用于存储与对象状态相关的信息。成员变量可以是任何数据类型,包括基本数据类型(比如int、double、char等)或引用类型(比如其他类的对象、数组等):

    • 定义在类里面的大括号下的变量,叫成员变量;
    • 成员变量会有一个默认的值;
    • 每个对象内的成员变量是相互独立的
    • 当我们使用断点调试工具步入类中的方法时,会有一个this变量给我们监视,其中this保存的是一个地址标签,这个标签告诉我们当前调用方法的具体是哪个对象那个,也就是说谁调用的this就会保存谁的地址,也就会指向谁
      1. 所以需要使用对应的对象名(对象名.)来访问。
      2. 如果是在类里面的方法访问成员变量,可以用this关键字,或者是直接用变量名访问。成员变量名和形式参数重名必须用this来访问,具体看下方this变量的解释
      3. 被static修饰过的方法,叫做静态方法,静态方法不属于任何一个实例对象。所以,不能在静态方法里面直接访问成员变量。只能使用对象名.的方法来访问 ,具体请参考静态方法的使用方法

    image.png

    image.png

this变量

  • this是一个用来指向调用方法对象的变量
  • 新版本的java在类中的方法中,可以省略this但这并不代表逻辑发生了改变
//旧写法
public class Bus { 
	int width; 
	int height; 
	boolean isRuning;
	public void stop() {
	    this.isRuning = false;
	    System.out.println("已停车!");
	}
	
	public void start() {
	    this.isRuning = true;
	    System.out.println("正在行驶!");
	}
}
//新写法,和旧写法等效
public class Bus { 
	int width; 
	int height; 
	boolean isRuning;
	public void stop() {
	    isRuning = false;
	    System.out.println("已停车!");
	}
	
	public void start() {
		isRuning = true;
	    System.out.println("正在行驶!");
	}
}
  • 但当方法中的形式参数名和类中成员变量 重名则必须使用this

    • 如下代码所示,形式参数number和类中的形式变量重名了
    • 如果代码复杂或存在命名冲突,建议保留 this 以提高可读性和避免潜在错误。
public class Bus { 
	String number;	
	public void regist(String number) {
	    this.number = number;
	    System.out.println("注册成功!您的车牌号是" + number);
	}
}