Java基础(五)-类的特性

Java基础目录
这本Java程序设计基础(第6版)-陈国君真的不错,讲的很清楚,例子也都是能直接使用的,推荐一下。

基础-强调本类成员-this

  • this.成员名,强调该成员,是本类的。
  • 外部传参名与成员名一致时,成员被隐藏,需要使用this。
    • 这个关键字真的不错,非常适合取名偷懒,以及核对。

例子见下面访问控制修饰符的代码。

基础-类中成员变量初始值定义

在定义变量时,直接赋值即可。

class Triangle{
  int value = 1;  //将Triangle类生成的对象中,value的默认值设置为1,如不设置,会使用int类型默认值,即0。
}

访问控制修饰符

  • private:私有访问修饰符,作为修饰时,仅可在本包本类内部调用该成员。
    • 若想在类外调用,可在类中定义非私有方法,方法中调用该成员。
  • default(缺省):缺省访问控制符,作为修饰时,仅可在本包中调用该成员。
    • 缺省是可以不写的意思。
  • protected:保护访问控制符,作为修饰时,非本包的子类可以调用。
  • public:公共访问修饰符,作为修饰时,可在任何地方调用该成员。
private int value;                   //私有成员变量
public void modifyValue(int value){  //使用公共方法修改私有成员变量
  this.value = value;                //使用this强调此处value为类的成员
}

方法的重载

  • 方法名相同,参数列表不同的方法,叫做方法的重载。
  • 重载的方法不是覆盖原方法,而是提供另一种调用方法的方式,
    • 即,一个方法名,可以有多种调用方式。
  • 方法的重载是实现多态的一种方式
  • 参数列表不同:
    • 顺序不同。
    • 个数不同。
    • 类型不同。
  • 参数列表中参数名称不同不算重载。
  • 方法返回值的不同不算重载。
public void show(int value){  
  System.out.println("show "+value);
}
public void show(){  
     //重载show方法。
  System.out.println("show");
}

构造方法

构造方法是在分配对象的时候使用的,用来初始化对象。

  • 若无构造方法,类会自动生成一个参数空、语句块空的构造方法。
  • 构造方法可重载。
  • 构造方法无返回值。
  • 构造方法名与类名相同。
  • 构造方法中可调用另一个构造方法,使用this()调用。
class Triangle{
  double a, b, c;

  Triangle(){  //参数空、语句块空的构造方法,若无构造方法,会生成空构造方法。
  }

  public Triangle(double a,double b){ //重载构造方法
。
    this.a = a;
    this.b = b;
  }

  public Triangle(double a, double b, double c){  //重载构造方法,并调用另一个构造方法。
    this(a, b);
    this.c = c;
  }

  public static void main(String[] args){
    Triangle t;  
    t = new Triangle();  //使用空构造方法new对象t,构造一个三边为0,0,0的三角形(double类型默认值为0)。
    t = new Triangle(3, 4, 5);  //使用带参数的构造方法new对象t,构造一个三边为3,4,5的三角形。
  }
}

实例成员与静态成员

  • 使用static修饰的成员,是静态成员。
  • 不使用static修饰的成员,是实例成员。
  • 静态成员的性质:
    • 静态成员,可以看做类的全局变量,由类生成的对象,共同拥有这个静态成员。
    • 静态成员的调用,可以用类名.成员名调用,无需创建对象。
    • 静态成员方法不能调用实例对象。
      • 即,静态成员方法能在对象中使用,但不能修改对象中的实例成员变量,也不能调用实例成员方法。
      • 同样的,this与super关键字也不能被静态成员调用。
class Triangle{
  static int value = 0;
  int a, b, c;
  
  static int modifyValue(){
    //a=0;  //会出错,因为该方法为静态方法,而a为实例变量。
    value += 1;
    return value;
  }

  public static void main(String args[]){  //编译后,会输出三行, 内容分别为1 2 3。
    System.out.println(modifyValue());
    System.out.println(modifyValue());
    System.out.println(modifyValue());
  }
}

静态初始化器

  • 与构造方法类似,但静态初始化器只在类的第一次调用时触发。
  • 结构为static{ 语句块 }
//实例成员与静态成员的代码中,加入这段代码
//输出结果会变成11 12 13。
static{
  value = 10;
}

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注