构造器
构造器是自定义类调用的关键,能够初始化或者说能够方便就行实例化一个对象,例如Employee类的构造器:
class Employee{
// private :Employee类自身才能访问
private String name;
private double salary;
private LocalDate birthday;
public Employee(String n , double s , int year , int month , int day) {
this.name = n; // n , s 都称为显示(explicit)参数 ,this.name表示的是隐式(implicit)参数
this.salary = s;
this.birthday = LocalDate.of(year, month, day);
}
public void printEm() {
String string = String.format("Name:%s, Salary:%.2f , Birthday:%s", name ,salary , birthday);
System.out.println(string);
}
}
this关键字的用途:
- 引用隐式参数。
- 调用该类其他的构造器。
实例化:
Employee employee = new Employee("Bob", 156.36, 2020, 1, 1);
employee.printEm();
构造器的关键:
- 构造器和类同名
- 每个类可以有一个以上的构造器:参数的不同
- 构造器可以有0、1或者多个参数
- 构造器没有返回值
- 构造器伴随着new一起调用
get 和set方法:更改器方法和访问器方法。优势:1.改变内部实现,除该类中的方法之外,不会影响其他的代码。2.更改器方法可以进行错误检查,避免直接赋值带来错误,例如一个类中传入参数n = 0 ,但是0不能作为除数。
final实例域
被final修饰的实例域必须在构建对象时被初始化,而且在之后的操作中不能被修改,也没有set方法。
静态域
关键词:static。每一个类中只有一个这样的域。 它输入整个类,不属于任何一个实例化的对象。
没有被static修饰的实例域,实例化对象时,属性都是实例域的一个拷贝。
class Employee{
private static int nextId = 1;// 静态域
private int id;
public void setId(int id) {
this.id = nextId;
nextId++;
}
}
静态方法
静态方法是一种不能想对象实施操作的方法,换句话说就是没有this 隐式参数。静态方法不能访问实例域,但是能够访问自身类中的静态域,调用静态方法时使用对象进行调用
class Employee{
private static int nextId = 1;// 静态域
public static int getNextId() {
return nextId;
}
}
Employee employee = new Employee("Bob", 156.36, 2020, 1, 1);
employee.getNextId();
如何进行静态方法的设置:
- 一个方法不需要访问对象状态,其所需要的参数全部都是显示参数提供。
- 一个方法只需要访问类的静态域。如Employee的getNextId()。
方法调用
按值调用:方法接收的是调用者提供的值。方法得到的是所有参数值的一个拷贝,不能够修改传递给它的任何参数变量的内容。
按引用调用:方法接收的是调用者提供的变量地址。
方法参数的使用情况:
- 一个方法不能修改一个基本数据类型的参数(数值、boolean型)。
- 一个方法可以改变一个对象参数的状态(数值的大小等)。
- 一个方法不能让对象参数引用一个新的对象。
重载
当一个类有多个构造器(方法名相同,参数不一)时,就产生了重载(构造器名字相同、参数不同)。重载解析:编译器通过方法的参数类型、数量或者说特定方法调用所使用的值类型进行匹配来挑选出相应的方法,如果找不到方法,就会产生编译错误。
方法签名:任何方法都可以重载,所以指定特定的方法就需要指出方法名和参数类型。返回类型不是方法签名的一部分,即不能出现相同方法名和相同参数不同返回值的方法。