类与对象
基本概念:
-
对象是用来描述客观事物的一个实体
-
类定义了对象将会拥有的 特征 和 行为
-
类是对象的类型,对象是类的实例
1. 类的实例化:对象创建和使用
完成一个人的名字和年龄属性的输出:
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 私有的,被修饰的属性或方法只能在该类内部使用,内部的类变量不能通过 对象名.属性 的方式调用。
| 访问权限控制符 |
任何地方 |
包外子类 |
包内 |
类内 |
| 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);
}
}
|
也可以使用匿名对象作为方法返回值。