一、什么是类和对象
- 类: 是具有共同属性和行为的实体的集合,是生成对象的模板。在生活中我们把具有相同属性和行为的事物归为一类,如我们把大雁、天鹅、麻雀等统称为鸟类。鸟类的共同属性是有羽毛,行为是能飞行。
- 对象: 是类的实例,如鸟类的具体实例可以是一只麻雀,一只天鹅。此时属性和行为就有了具体的意义,如大雁羽毛是灰色的,能排人字型飞行。
- 总之类是抽象的集合,是生成对象的模板,对象是类的具体实例。
二、成员变量和成员方法(函数)
- 成员变量是类对象的属性,成员方法是类对象的行为。
- 创建类的语法格式如下:
class 类名称{
成员变量类型 成员变量名称;
成员方法;
}
- 成员方法定义语法格式如下:
访问权限修饰符 返回值类型 方法名(参数类型 参数名){
方法体;
return 返回值;
}
- 如下面定义一个Person类。
//定义一个Person类
class Person{
String name; //属性:姓名
int height; //属性:身高
//方法:休息
public void rest(){
System.out.println(this.name + "休息一会儿!");
}
//方法:跑步
public void run(){
System.out.println(this.name + "正在跑步……");
}
}
- 访问权限修饰符有:public、protected、private和默认的包访问权限
修饰符 | 同一个类 | 同一个包中 | 子类 | 所有类 |
---|---|---|---|---|
private | √ | |||
default | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
- private表示私有,只有自己类能访问
- default表示没有修饰符修饰,只有同一个包的类能访问
- protected表示可以被同一个包的类以及其他包中的子类访问
- public表示公有的,可以被该项目的所有包中的所有类访问
三、this关键字
this关键字表示本类对象的引用,即本类对象指自己。如给成员变量赋值时可写:
//this表示本类person对象自己
this.name = name;
this关键字也可作为返回值:
return this;
四、构造方法
- 在类中,除了成员方法外,还有一种特殊的方法,它与
类名同名
,这类特殊的方法就叫构造函数。创建对象时会自动构造函数完成对象的初始化。 - 构造方法特点:
- 1、构造方法没有返回值,也不用写void;
- 2、构造方法名称要与类的名称相一致
- 3、构造方法可以被重载
以上面Person类为例,构造函数如下:
//构造方法1:
public Person() {
}
//构造方法2:
public Person(String name, int height) {
this.name = name;
this.height = height;
}
- 构造方法常用来初始化成员变量;
- 当类中没有构造方法时,创建对象时系统会自动创建如构造方法1的无参构造方法;
- 如果创建了有参构造方法,系统将不会自动创建无参构造方法,这时如果试图用无参构造方法创建一个对象,编译器将会报错。
五、静态变量和静态方法
- 使用static关键字修饰的变和方法,就叫静态变量和静态方法。
- 静态变量和静态方法它不属于对象,在内存中只有一份数据,所有对象共用此一份数据。
- 普通方法内的局部变量不能使用static关键字。
- 静态方法不能调用非静态变量。
- 静态方法中不能使用this关键字,因为静态方法不属于对象,它属于类,而this是对当前对象的引用,因此静态方法中不能使用this关键字。
- 构造函数中可以使用this引用静态变量
- main方法(主方法)必须为静态方法。因为主方法是程序入口方法,此时还没有对象,如果主方法是一个普通成员方法,必须创建对象后才能调用,这是矛盾的。
- 使用静态变量和静态方法,无需创建对象,可以通过类名直接调用,格式如下:
类名.静态变量名
类名.静态方法名
Static关键字示例:
public class StaticClass_Person {
//主方法必须为静态方法
public static void main(String[] args) {
StaticClass_Person s = new StaticClass_Person("李强", 21, 175);
StaticClass_Person.show_info(); //可以使用类名直接调用静态方法
}
//构造函数中可以使用static关键字引用静态变量
public StaticClass_Person(String name, int age, double height) {
this.name = name;
this.age = age;
this.height = height;
}
//静态成员变量
static String name;
static int age;
static double height;
//普通成员变量
String address;
//静态方法,只能引用静态变量,它不能引用address变量
public static void show_info(){
//static String work; //试图在在静态方法static的局部变量,会报错
System.out.println(name+",今年"+age+"岁了,身高"+height+"厘米。");
}
}
运行结果:
李强,今年21岁了,身高175.0厘米。
六、对象的创建和使用
- 一旦类建好了,我们就可以用这个类模板来新建对象了,语法格式如下:
//创建类的对象
类名 类变量名 = new 类名();
类名 类变量名 = new 类名(构造参数1,构造参数2, ……);
//引用成员变量
类变量名.成员变量;
//调用成员方法
类变量名.成员方法名();
- 完整示例:
//定义一个Person类
public class Person {
public static void main(String[] args) {
Person p = new Person(); //创建类的对象p
p.name = "李强"; //给成员变量赋值
p.run(); //调用成员方法
p.rest(); //调用成员方法
}
String name; //属性:姓名
int height; //属性:身高
//构造方法1:
public Person() {
}
//构造方法2:
public Person(String name, int height) {
this.name = name;
this.height = height;
}
//方法:休息
public void rest() {
System.out.println(this.name + "休息一会儿!");
}
//方法:跑步
public void run() {
System.out.println(this.name + "正在跑步……");
}
}
- 运行结果:
李强正在跑步……
李强休息一会儿!