Java类——类的组成成员、定义、创建和使用

一、定义类

\quad定义类的简单语法如下:
在这里插入图片描述

  • 在上面的语法格式中,修饰符可以是publicfinal中的一个,或者不要也可以。
  • 类可以包含三种最常见的成员:构造器、属性和方法,三种成员都可以定义0个或多个
  • 类中各成员间可以相互调用,但static修饰的成员不能访问没有static修饰的成员
  • 属性用于定义类或类的实例中所包含的数据,方法则用于定义类或类的实例的行为特征或功能实现
  • 构造器用于构造该类的实例,通过new关键字来调用构造器,从而返回该类的实例。构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此,Java语言提供了一个功能:如果程序没有为类编写构造器,则系统会为该类提供一个默认的构造器

\quad以上几条介绍了类的组成的基本情况。接下来介绍类里面3大基本成员的具体语法格式

1、属性

\quad属性用于定义类或类的实例中所包含的数据,其语法格式如下:

[修饰符] 属性类型 属性名 [=默认值]
  • 修饰符:可以省略,也可以是public, protected, private, static, final,其中public, protected, private三个最多只能出现一个,可以与static, final组合起来修饰属性。例如
public int a = 0;
protected double f;
float e = 1.0;
public static int d = 2;
  • 属性类型:可以是Java语言允许的任何数据类型,包括8个基本类型和引用类型(数组、类等)
  • 属性名:合法的标识符即可
  • 默认值:可以给定一个合法的默认值,也可以不给定,在创建具体实例时按情况给定

\quad属性是一种比较传统、也比较符合汉语习惯的说法,在Java官方说法里面,属性被称为Field,因此有的地方也将属性翻译为字段

2、方法

\quad定义方法的语法格式如下:

[修饰符] 方法返回值类型 方法名(形参列表)
{
	// 由0条到多条可执行语句组成的方法体
}
  • 修饰符:可以省略,也可以是public, protected, private, static, final,其中public, protected, private三个最多只能出现一个,可以与static, final组合起来修饰属性。例如
public static void main(String[] args)
static int getMax(int a, int b)
private float getMax(float a, float b)
  • 方法的返回值类型:可以是ava语言允许的任何数据类型,包括8个基本类型和引用类型(数组、类等);如果声明了方法的返回值类型,则方法体内必须有return语句返回一个变量或者表达式,且这个变量或者表达式的类型必须与方法声明的类型匹配。若一个方法没有返回值,则须使用void来声明
  • 形参列表:用于定义该方法可以接受的参数,多个参数间需用,隔开

\quadstatic是一个特殊的关键字,它可以用于修饰方法、属性等成员。static修饰的成员表明它是这个类共有的,而不是属于该类的某个实例,因此通常把static修饰的属性和方法也称为类属性、类方法;不适用其修饰的方法和属性称为实例属性和实例方法。

3、构造器

\quad构造器语法格式如下:

[修饰符]  构造器名(形参列表)
{
	// 由0条到多条可执行语句组成的构造器执行体
}
  • 修饰符:可以省略,也可以是public, protected, private中的一个
  • 构造器名:必须与类名相同
  • 形参列表:同方法的形参列表

\quad需注意:构造器不能定义返回值类型声明,也不能使用void定义构造器没有返回值。
\quad以上,我们就介绍完了Java中类的定义,都是文字不易理解,接下来我们通过简单的程序例子进行讲解。
\quad首先我们定义一个Person类:

public class Person {
    public int age;
    public double height;
    public void info()
    {
        System.out.println("我的年龄是: " + age + ", 我的身高是: " + height);
    }
}

\quad显然,这个类不含构造函数,则系统会给他提供一个默认的构造函数,系统提供的构造函数是没有参数的。调用的时候使用new关键字,这样调用即可:

Person Cheng = new Person();

\quadstatic修饰的方法或属性,既可以通过类来调用,也可以通过实例来调用,没有使用static修饰的方法或属性,则只能通过实例调用。上面的程序中属性和方法均没有用static修饰,我们可以用Cheng这个实例来调用:

Person Cheng = new Person();
Cheng.age = 23;
Cheng.height = 172.0;
Cheng.info();

\quad运行这个程序,就可以得到如下输出:

我的年龄是: 23, 我的身高是: 172.0

4、对象的this引用

\quadJava提供了一个this关键字,是一个对象的默认引用,this关键字总指向调用该方法的对象。根据this出现的位置不同,分为两种情形:

  • 构造器中使用this
    下面给出一个实例
public class Person {
    public int age;
    public double height;
    public Person(int age, int height)
    {
        this.age = age;
        this.height = height;
    }
    public void info()
    {
        System.out.println("我的年龄是: " + age + ", 我的身高是: " + height);
    }
}

在调用的时候,可以在构造函数内直接传入ageheight值进行初始化,下面即为其调用示例:

 Person Cheng = new Person(22, 172);
 Cheng.info();
  • 方法中使用this
public class Person {
    public int age;
    public double height;
    public Person(int age, int height)
    {
        this.age = age;
        this.height = height;
    }
    public void info()
    {
        System.out.println("我的年龄是: " + age + ", 我的身高是: " + height);
    }
    public void say()
    {
        this.info();
        System.out.println("这就是我");
    }
}

上述程序在say方法内调用info方法,这种情况下直接使用this即可,而不需要通过创建对象再调用info方法,这样的话可以避免重复创建同一对象,且写法更简洁。
\quad在现实世界里,对象的一个方法依赖于另一个方法的情况很常见,因此,Java允许对象的一个成员直接调用另一个成员,可以省略this,即上述程序中say方法中省略this也是可以的。
\quad对于static修饰的方法而言,则可以直接使用类来直接调用该方法。如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象,所以,static修饰的方法中不能使用this引用。由于static修饰方法中不能使用this引用,所以static修饰方法中不能访问不适用static修饰的普通成员,例如面的程序就会出错:

public class test {
    public void info()
    {
        System.out.println("测试下啦~");
    }
    public static void main(String[] args){
        info();
    }
}

在这里插入图片描述
\quad如果确实需要在静态方法中访问另一个普通方法,则只能重新创建一个对象。

public class test {
    public void info()
    {
        System.out.println("测试下啦~");
    }
    public static void main(String[] args){
        test t = new test();
        t.info();
    }
}

\quadthis作为对象的默认引用使用时,程序可以像访问普通引用变量一样来访问这个this引用,甚至可以把this当成普通方法的返回值,如下程序:

public class test {
    public int age = 20;
    public test grow()
    {
        age++;
        return this;
    }
    public static void main(String[] args){
        test t = new test();
        t.grow().grow().grow();
        System.out.println("我现在已经"+ t.age + "岁啦~");
    }
}
我现在已经23岁啦~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章