构造方法(Constructor)
构造方法是方法名与类名的特殊方法,在新建对象时调用,可以通过不同的构造方法实现不同方式的初始化,它有如下特征:
(1)构造方法名称必须与类名相同。
(2)构造方法没有返回类型,void也不行。它返回对象的地址,并赋值给变量。
(3)构造方法不能够被继承,不能够被覆写,不能被直接调用。调用的途径有三种:
①通过new关键字,②是在子类的构造方法中通过super调用父类的构造方法,③是通过反射的方式调用
(4)类定义时候提供默认的无参构造方法。但是如果显式定义了有参构造方法,无参的构造方法就会被覆盖;如果依然想拥有,就需要进行显式定义
(5)构造方法可以私有。外部无法使用构造方法创建对象。
贴上代码我们看看这个构造方法:
public class People{
public People(int age,String name){
System.out.println("hello!");
System.out.println("我叫"+name+"我今年"+age+"岁!")
}
public static void main(String args[]){
People p=new People(18,"张三")
}
}
action:
(1)在接口中不能够定义构造方法,在抽象类中可以定义。在枚举类中,构造方法是特殊的,但是默认是private的不能够加public,是不允许外部以创建对象的方式生成枚举对象。
(2)一个类可以有多个参数不同的构造方法,称为构造方法的重载,为了规范应该将这些构造方法放在一
起。
类内方法
(1)实例方法
实例方法又被称为非静态方法,它必须依附于某一个实例对象,并通过引用变量调用其方法。实例方法可以调用静态方法和静态静态变量也可以相互调用,但是不包含this。当class文件加载后,实例方法并不会被分配方法入口地址,只有在对象创建后才会被分配。
(2)静态方法
又称为类方法。当类加载后,就分配了相应的内存空间,但是我们需要注意的是:
①静态方法中不能使用实例变量成员和实例方法。
②静态方法不能够使用super和this关键词,这两个关键词指代的都是要创建出来的对象
(3)静态代码块
静态代码块是在类加载的时候就被调用的,并且只执行一次。静态代码块是先于构造方法放入特殊代码块。静态代码块不能存在于任何方法体内,包括类静态方法和属性变量
public class StaticCode {
static String prior="done";
static String last=f()?g():prior;
public static boolean f(){
return true;
}
public static String g(){
return "hello word";
}
static {
//可以访问静态方法和静态变量
System.out.println(last);
g();
}
}
getter与setter
getter与setter是一类特殊的方法,不包含任何的业务逻辑,仅仅是为类成员属性提供读取和修改方法。这样设计的好处就是
①满足面对对象的封装性。尽可能将类的属性定义为private。
②有利于同一控制。
说起getter和setter方法我们不得不说POJO(Plain Ordinary Java Object,简单java对象),常见的POJO类包括DO(Data Object)、BO(Business Object)、DTO(Data Transfer Object)、VO(View Object)、AO(Application Object)。POJO作为数据载体通常用于数据传输,不应该包含任何业务逻辑。
虽然简单但是也有出错的情况:
①setter和getter方法中添加业务逻辑。
②同时定义 isXxx和getXxx方法。
③相同的属性名容易带来歧义。
覆写
覆写就是多态中的override,要想成功的覆写父类方法,我们要满足:
①访问权限不能够变小。比如父类的方法是public而子类的想要将他变为private,这种是不行的。只能够比父类的权限大才可以。
②返回类型能够向上转型成为父类的返回类型。
③异常也要能够向上转型为父类异常。
④方法名、参数个数、参数类型必须严格一致。
public class Domo {
protected Number doSomething(int a,Integer b,Object c)throws SQLException {
return new Integer(7);
}
}
class DomoSon extends Domo{
@Override
public Number dosomething(int a,Integer b,Object c)throws SQLClientInfoException {
return new Integer(17);
}
}