07.类与对象
类与对象
类是一个模板,它描述一类对象的行为和状态。对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。
拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。对比现实对象和软件对象,它们之间十分相似。软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
Java 作为一种面向对象语言,支持以下基本概念:多态、继承、封装、抽象、类、对象、实例、方法、重载。
变量
类可以看成是创建 Java 对象的模板。通过下面一个简单的类来理解下 Java 中类的定义:
public class Dog {
String breed;
int age;
String color;
void barking() {}
void hungry() {}
void sleeping() {}
}
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
public class ClassName{
public void printNumber() {
int a;
}
// 其他代码
}
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
public class ClassName{
int a;
public void printNumber() {
// 其他代码
}
}
- 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。静态成员属于整个类,可通过对象名或类名来调用。
public class ClassName{
static int a;
public void printNumber() {
// 其他代码
}
}
一个类可以拥有多个方法,在上面的例子中:barking()、hungry()和 sleeping()都是 Dog 类的方法。
** 成员变量** | 局部变量 | 静态变量 | |
---|---|---|---|
定义位置 | 在类中,方法外 | 方法中,或者方法的形式参数 | 在类中,方法外 |
初始化值 | 有默认初始化值 | 无,先定义,赋值后才能使用 | 有默认初始化值 |
调用方式 | 对象调用 | — | 对象调用,类名调用 |
存储位置 | 堆中 | 栈中 | 方法区 |
生命周期 | 与对象共存亡 | 与方法共存亡 | 与类共存亡 |
别名 | 实例变量 | — | 类变量 |
package hello;
//首先要知道变量应该是赋值以后才能使用的,但是有些不必人为赋值就有默认初始值,但是有些要人为定义初始值
//所以有些直接使用的并不是没有赋值,而是系统自定义了初始值,所以不会报错
public class Variable {
public String instance = "实例变量";
public static String variable = "静态变量"; //静态变量的定义方式
public static String CONST = "静态常量"; //静态常量的定义方式
public static void main(String[] args) {
String local = "局部变量"; //类似这个就是局部变量,不可用访问修饰符修饰,没有默认初始值
System.out.println(local); //局部变量就是在方法或语句块中的变量
Global global = new Global(); //类似这个就是实例变量,也称全局变量
System.out.println(global.instance); //实例变量就必须先把类new一个出来才能使用,因为他是在类中,方法外的
System.out.println(variable); //来瞅瞅静态变量,也叫类变量,静态变量的访问方式1(在自己类的时候)
System.out.println(Global.variable); //静态变量的访问方法2(不在自己类的时候)
}
}
class Global{
public String instance = "实例变量"; //实例变量在一个类的里面,语句块的外面
public static String variable = "静态变量";
Global(){ //在类的内部使用自己的实例变量:要么老老实实new一个出来,就像上面那个
//第二种方法就是在函数里面使用实例变量,注意,如果方法是静态方法参照方法1
System.out.println(instance);
System.out.println(variable);
}
public void Instance() {
System.out.println(instance); //静态变量访问方法1(在自己类的时候),静态常量和静态变量访问相同
System.out.println(Variable.CONST);
}
}