目录

Java 类与对象

类与对象

基本概念:

  • 对象是用来描述客观事物的一个实体

  • 类定义了对象将会拥有的 特征属性行为方法

  • 类是对象的类型,对象是类的实例

1. 类的实例化:对象创建和使用

  • 创建对象:new 关键字 + 构造器,完整用法:类名 对象名 = new 类名();

  • 引用对象成员:使用 .

  • 引用类的属性:对象名.字段名

  • 引用类的方法:对象名.方法名()

完成一个人的名字和年龄属性的输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Person {

    /**
     * name 名字
     * age 年龄
     */
    private String name;
    private int age;

    public static void main(String[] args) {
        // 声明 Person 类型的变量 person 并实例化
        Person person = new Person();
        // 给对象的 name 属性赋值
        person.name = "MicroLOONG";
        // 调用对象方法
        person.showName();

        int element = person.getAge();
        // 输出年龄
        System.out.println("Age: " + element);
    }

    /**
     * 输出名字
     */
    public void showName() {
        System.out.println("Name: " + name);
    }

    /**
     * 定义年龄
     * @return age
     */
    public int getAge() {
        age = 20;
        return age;
    }
}

结果为:

1
2
Name: MicroLOONG
Age: 20

同一个类实例化多个对象:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class Student {

    /**
     * name 姓名
     * age 年龄
     * interest 兴趣爱好
     */
    private String name;
    private int age;
    private String interest;

    public static void main(String[] args) {
        // 同一个类实例化多个对象
        Student stu1 = new Student();
        Student stu2 = new Student();

        stu1.name = "鸡你太美";
        stu1.age = 22;
        stu1.interest = "唱、跳、rap、篮球";

        stu2.name = "妙蛙种子";
        stu2.age = 20;
        stu2.interest = "妙啊";

        stu1.showInfo();
        stu2.showInfo();
    }

    /**
     * 输出信息
     */
    public void showInfo() {
        System.out.println("姓名:" + name);
        System.out.println("年龄:" + age);
        System.out.println("兴趣爱好:" + interest);
    }
}

结果为:

1
2
3
4
5
6
姓名:鸡你太美
年龄:22
兴趣爱好:唱、跳、rap、篮球
姓名:妙蛙种子
年龄:20
兴趣爱好:妙啊

2. 变量类型

  • 局部变量是在方法、构造方法或者语句块中定义的变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。

  • 成员变量实例变量 是定义在类中,方法体之外的变量,在类实例化成对象后才能使用,随着对象的创建而存在,随着对象的回收而释放。

  • 类变量不需要实例化成对象就可使用,必须在方法外且声明为静态 static 类型,在第一次被访问时创建,在程序结束时销毁,如:

1
2
3
public static String name; // 类变量

Person.name = "MicroLOONG";

2.1 作用域

  • public 公开的、无限制的,被修饰的类、属性和方法可以被其他任何类访问。

  • protected 受保护的、有限制的,被修饰的属性和方法能被包内及包外子类访问。

  • default 无任何访问权限控制符,仅对包内可见。

  • private 私有的,被修饰的属性或方法只能在该类内部使用,内部的类变量不能通过 对象名.属性 的方式调用。

警告
  • 这些修饰符只能修饰成员变量,不能修饰局部变量。

  • private 和 protected 不能用来修饰类。

  • default 仅代表无修饰符的情况,这里 default 非 JDK 8 的 default 关键字。

访问权限控制符 任何地方 包外子类 包内 类内
public OK OK OK OK
protected NO OK OK OK
NO NO OK OK
private NO NO NO OK

3. 匿名对象

匿名对象:不定义对象的句柄,直接调用这个对象的方法。

注意
匿名对象也称临时对象,即一个匿名对象只能使用一次,用完回收。如要多次使用需要再次创建对象,但无疑会造成资源浪费。

Person 类中可以无需实例化对象直接调用 getAge 方法:

1
2
3
4
5
// 普通对象创建和使用
Person person = new Person();
int element = person.getAge();
// 匿名对象创建和使用
int element = new Person().getAge();

又可以使用匿名对象作为参数传递,如 Person 类中可以这样来实现调用 showName 方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
public class Person {
    
    /**
     * name 名字
     */
    private static String name;

    public static void main(String[] args) {
        name = "MicroLOONG";
        // 匿名对象作为方法接收的参数
        showName(new Person());
    }

    /**
     * 输出名字
     */
    public static void showName(Person person) {
        System.out.println("Name: " + name);
    }
}

也可以使用匿名对象作为方法返回值。