静态变量与静态方法
static修饰的成员表明它属于这个类本身,而不是属于该类的单个实例,所以静态变量与静态方法,可以在没有创建对象的情况下进行调用,如Java类库中的Math类中,大量的数学函数,可以在不创建Math类对象的情况下,调用Math.sqrt()、Math.random()等方法。同时也要避免用对象去调用类中的static修饰的成员变量、方法的代码。
方法签名
方法名 + 参数列表 = 唯一标识
类的关系:依赖、聚合、继承
依赖:“user-a”关系,如当A类的成员方法调用B类的成员方法时,就说A类依赖B类,可以是双向的。
聚合:“has-a”关系,如汽车有发动机、轮胎、车体。
继承:“is-a”关系。
类中通常含有以下成员方法
1)构造方法:至少应该包含一个不带参数的、一个带完整参数的构造方法。
2)更改器:可以保证在对象创建之后,更改对象的状态。
3)获取器:可以保证随时获得对象的状态值。
4)toString:可以将对象的状态值转换为字符串。
5)equals:可以实现判断两个对象是否相等的操作。(标准库提供功能,将它与当前对象进行比较,如果两个对象变量同时引用一个对象,返回true)
使用访问控制符的基本原则
- 类里的绝大部分成员变量都应该使用private修饰,只有一些static修饰的、类似全局变量的成员变量,才可能考虑使用public修饰。除此以外,有些方法只用于辅助实现该类的其他方法,这些方法被称为工具方法,工具方法也应该使用private修饰。
- 如果某一个类主要用做其他类的父类,该类里包含的大部分方法可能仅希望被其他子类重写,而不想被外界直接调用,则应该使用protected修饰这些方法。
- 希望暴露出来给其他类自由调用的方法应该使用public修饰。因此,类的构造器通过使用public修饰,从而允许在其他地方创建该类的实例。因为外部类通常都希望被其他类自由使用,所有大部分外部类都使用public修饰。
构造器
1)构造器的重载
当构造器A与构造器B,存在包含情况时,我们可以使用this关键字来调用相应的构造器。
public class Apple
{
public String name;
public String color;
pPublic double weight;
public Apple() {}
public Apple(String name, String color) //构造器A
{
this.name = name;
this.color = color;
}
public Apple(String name, String color, double weight) //构造器B
{
this(name, color);
this.weight = weight;
}
}
虽然可以直接将构造器A中的代码直接复制到构造器B中,但我们要尽量避免在软件开发中把相同的代码段书写两次以上。如果某一天我们需要更新构造器A的代码时,构造器B、C中也包含了相同的代码,这就会使得我们修改代码变得更困难。
继承
1)语法格式
public class subClass extends superClass
{
//类定义
}
Java的子类不能获得父类的构造器。
2)overload和override
重载(overload)和重写(override),重载主要发生在同一个类的多个同名方法之间,重写发生在子类和父类的同名方法之间。
Super()
- 如果在定义类时没有任何构造方法,系统就会提供一个参数列表为空的默认构造方法,方法体只有一条调用父类无参数构造方法的语句super()。
- 用于在子类中,调用父类的构造函数。(可传递父类构造函数参数)。
instanceof运算符
1)格式
if( obj instanceof String) //判断obj对象是否是String类对象
instanceof运算符的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类,用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是,则返回true。
2)作用
instanceof运算符的作用是:在进行强制类型转换之前,首先判断前一个对象是后一个类的实例,是否可以成功转换,从而保证代码更加健壮。基本等同于C#中的is运算符。