Java类与对象的概念和理解

1.Java中的类

1.1 概念:类是构造对象的模板或蓝图,类似于模具。由类构造对象的过程称为创建类的实例。
1.2 类之间的关系 :(1)依赖,(2)聚合,(3)继承。

(1)依赖:是一种最明显最常见的关系。例如 Order(订单) 类使用 Account(账户) 类是因为 Order 对象需要访问 Account 对象查看账号信息。但是 Item(商品) 类不依赖于 Account 类,因为 Item 对象不需要考虑客户账号信息,此时 Order 类依赖 Account 类。因此,如果一个类的方法使用或操纵另一个类的对象,我们就说一个类依赖另一个类。

(2)聚合 :例如一个 Order 类可以包含多个 Item 类对象,此时 Order 类聚合 Item 类。即,包含关系意味着类A对象包含着类B对象,类A对象是类B对象的一个集合。

(3)继承:类A对象扩展类B对象,类A不但包含从类B继承的方法,还会有一些自己额外的功能。即使用 extends 语法扩展类对象,此时为A extends B。

2.Java中的对象。

2.1对象的三个主要特性:(1)对象的行为,(2)对象的状态,(3)对象的标识。

(1)对象的行为:可以对对象完成那些操作,或者可以对对象应用那些方法。
(2)对象的状态:当调用那些方法时,对象会如何响应。特定对象都有一组特定的实例字段值,这些值的集合就是这个对象的当前状态。
(3)对象的标识:如何区分具有相同行为于状态的对象。

:对象的行为是用可调用的方法来定义的。对象的状态会随着时间而发生改变,但这种改变不是自发的,必须通过调用方法来改变对象的状态。对象的标识标识总是不同的,状态也存在着差异。

创建对象的过程 : Person person = new Person();
此语句先在堆中创建一个Person对象,然后把此对象的引用赋值给person变量。

3.用户自定义类

3.1 构造器:
  • 构造器与类同名。
  • 每个类可以有一个或者多个构造器。(不指定系统默认一个无参构造)
  • 构造器可以有0个,1个或多个参数。
  • 构造器没有返回值。
  • 构造器是伴随着new操作符一起使用的,不能在已有对象上进行调用。

(1) 不要在构造器中定义与实例字段同名的局部变量,如:

public class Person{
	//定义的实例字段
	private String name;
	private int age;
	
	//构造器
	public Person(String name, int age){
		String name = name;  //error
		int age = age;	//error
	}
	//...
}

这个构造器声明了局部变量 name 和 age ,这些变量只能在构造器内部访问,这些变量会遮蔽同名的实例字段。

(2) 当类中含对象类的实例字段时,注意null的出现;
如下代码:

public class Person{
	private String name;
	private int age;
	//无参构造
	public Person(){
	}
	public String getName(){
		return this.name;
	}
}

若执行 : var person = new person() 后调用person.getName()则会出错,因为String不是基本类型,系统指定的默认值是null(基本类型系统会指定一个非null的默认值)。避免上诉的发生有一下三种方法:

1.在定义实例字段时指定默认值:

public class Person{
	private String name = "";  //指定默认值为空串
	private int age; //系统会指定默认值
	//...
}

2.在无参构造器中指定默认值:

public class Person{
	private String name;
	private int age;
	//在构造器中指定,避免出现空值的情况。
	public Person(){
		this.name = "";	//指定默认值为空串
	}
	//...
}

3.使用初始化块来初始化实例字段:

public class Person(){
	private String name;
	private int age;
	//只要构造类的对象,将会调用下面的初始化块,为name赋值
	{
		this.name = "";  //对对象的引用进行初始化
	}
}
3.2空值的处理:

1.宽容型:
针对 var person = new Person(null,18) 的创建对象会显式给 name 赋予null,此时可以检查: if(name == null) this.name = “” else this.name = name; 若jdk > =1.9 可以使用 Objects.requireNonNullElse(name,"");
第一个参数为需要检查是否为空值的变量,第二个参数是当name为null是需要返回的内容。
2.严格性:
当显式传递null时会报错,使用Objects.requireNonNull(name," The name cannot be null"); 此时第二个参数时报错时提示的部分内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值