一、类
类是什么?“人类”就是一个很好的例子,所有的人类,医生警察老师学生等等等等都是属于人类,那么类的具体定义是什么呢?
- 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该
类事物。
类的定义格式:
public class ClassName {
//成员变量
//成员方法
}
现实中,描述一类事物:
- 属性:就是该事物的状态信息。
- 行为:就是该事物能够做什么。
例如我们要定义一个类,用来模拟"学生"事务。其中就有两个部分组成。
属性(是什么):
姓名
年龄
行为(做什么):
吃饭
睡觉
学习
对应到Java的类当中:属性则是成员变量,行为则是成员方法。
成员变量(属性):
String name; //姓名
int age; //年龄
成员方法(行为):
public void eat() {} //吃饭
public void sleep() {} //睡觉
public void study() {} //学习
注意:
1.成员变量是直接定义在类当中的,在方法外边。
2.成员方法不要写static关键字。
下面我们来定义“学生”类:
public class Student {
//成员变量
String name; //姓名
int age; //年龄
//成员方法
public void eat() {
System.out.println("吃饭!");
}
public void sleep() {
System.out.println("睡觉!");
}
public void study() {
System.out.println("学习!");
}
}
二、对象
类是抽象的,对象是具体的。
简单来说,对象是义类事务的具体体现。对象是类的一个实例,必然具备该类事物的属性和行为。
对象的使用格式:
创建对象:
类名 对象名 = new 类名();
使用对象访问类中的成员:
对象名.成员变量;
对象名.成员方法();
如果只有类的话,是不能直接使用的,需要根据类创建一个对象才能使用,使用的步骤如下:
1.导包:也就是指出需要使用的类,在什么位置。 import 包名称.类名称; import cn.itcast.day06.demo01.Student; 对于和当前类属于同一个包的情况,可以省略导包语句不写。
2.创建对象 格式:类名称 对象名 = new 类名称(); Student stu = new Student();
3.使用对象:分为两种情况: 使用成员变量:对象名.成员变量名 使用成员方法:对象名.成员方法名(参数)
注意:如果成员变量没有进行赋值,那么将会有一个默认值,规则和数组一样。
下面我们来了用一个对象实例说明:
public class Demo02Student {
public static void main(String[] args) {
// 1.导包。
// 我需要使用的Student类便是一中的例子,和我自己Demo02Student位于同一个包下,所以省略导包语句不写
// 2.创建,格式:
// 类名 对象名 = new 类名();
// 根据Student类,创建了一个名为stu的对象
Student stu = new Student();
// 3.使用其中的成员变量,格式:
// 对象名.成员变量名
System.out.println(stu.name); //null
System.out.println(stu.age); //0
System.out.println("---------------------");
//改变对象当中的成员变量数值内容
//将右侧的字符串,赋值交给stu对象当中的name成员变量
stu.name = "nxy";
stu.age = 20;
System.out.println(stu.name); //nxy
System.out.println(stu.age); //20
System.out.println("---------------------");
// 4.使用对象的成员方法,格式:
// 对象名.成员方法名;
stu.eat(); // 吃饭!
stu.sleep(); //睡觉!
stu.study(); //学习!
}
}
类和对象的简单关系:
- 类是对一类事物的描述,是抽象的。
- 对象是一类事物的实例,是具体的。
- 类是对象的模板,对象是类的实体。
三、一个例子
接下来我们通过定义一个手机类,来练习类和对象的使用:
分析:
属性:品牌、价格、颜色 行为:打电话、发短信
对应到类当中:
成员变量(属性):
String brand; //品牌
double price; //价格
String color; //颜色 成员方法(行为):
public void call(String who) {} //打电话
public void sendMessage() {} //群发短信
定义该类的代码如下:
public class Phone {
//成员变量
String brand; //品牌
double price; //价格
String color; //颜色
//成员方法
public void call(String who) {
System.out.println("给" + who + "打电话");
}
public void sendMessage() {
System.out.println("群发短信");
}
}
下面我们写一个测试类,创建一个对象,调用一些成员变量和成员方法:
public class Demo01PhoneOne {
public static void main(String[] args) {
//根据Phone类,创建一个名为one的对象
//格式:类名称 对象名 = new 类名称();
Phone one = new Phone();
System.out.println(one.brand); //null
System.out.println(one.price); //0.0
System.out.println(one.color); //null
System.out.println("-----------------");
one.brand = "苹果";
one.price = 5499.0;
one.color = "黑色";
System.out.println(one.brand); //苹果
System.out.println(one.price); //5499.0
System.out.println(one.color); //黑色
System.out.println("-----------------");
one.call("nxy"); //给nxy打电话
one.sendMessage(); //群发短信
}
}
四、局部变量和成员变量的区别
-
定义的位置不一样【重点】
局部变量:在方法的内部
成员变量:在方法的外部,直接写在类当中 -
作用范围不一样【重点】
局部变量:只有方法当中才可以使用,出了方法就不能再用
成员变量:整个类全都可以通用 -
默认值不一样【重点】
局部变量:没有默认值,如果要想使用,必须手动进行赋值
成员变量:如果没有赋值,会有默认值,规则和数组一样 -
内存的位置不一样(了解)
局部变量:位于栈内存
成员变量:位于堆内存 -
生命周期不一样(了解)
局部变量:随着方法进栈而诞生,随着方法出栈而消失
成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失
举例说明:
public class Demo01VariableDifference {
String name; //成员变量
public void methodA() {
int num = 20; //局部变量
System.out.println(num);
System.out.println(name);
}
public void methodB(int param) { //方法的参数就是局部变量
//参数在方法调用的时候,必然会被赋值的
System.out.println(param);
int age;
// System.out.println(age); //没赋值不能用,局部变量必须赋值才可以使用
// System.out.println(num); //错误写法
System.out.println(name);
}
}