对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
类是现实世界或思维世界中的实体在计算机中的反应,它将数据以及这些数据上的操作封装在一起。
对象是具有类类型的变量。
一、定义类
面向对象的程序设计语言,类是面向对象的重要内容,可以把类当成一种自定义类型,可以用类来定义变量,这种类型的变量统称为引用变量。
Java语言是面向对象的程序设计语言,类和对象是面向对象的核心。Java语言提供了创建类和对象的简单语法支持。
定义类的语法
[修饰符] class 类名
{
零个到多个构造器定义...
两个到多个成员变量...
零个到多个方法...
}
修饰符可以是public 、final、abstract,或者完全省略这三个修饰符。
对于一个类而言,可以包含三个最常见的成员:构造器、成员变量和方法,三种成员都只定义零个,就是定义一个空类。
类里各成员之间的定义顺序没有任何影响,各成员之间可以相互调用,但需要指出的是,static修饰的成员不能访问static修饰的成员。
成员变量用于定义该类或该类实例包含的状态数据。
方法则用于定义该类或该类的实例的行为特征或者功能实现。
构造器用于构造该类的实例,Java通过调用new关键字来调用构造器,从而返回该类的实例。
构造器是一个类创建对象的根本途径,如果一个类没有构造器,这个类通常无法创建实例。因此,Java语言提供了一个功能:如果程序员没有给一个类编写构造器,则系统会为该类提供一个默认的构造器。
①定义成员变量的语法格式如下:
[修饰符] 类型 成员变量名 [= 默认值];
对定义成员变量语法格式如下:
修饰符:修饰符可以省略,也可以是public 、protected、private、static、final。
类型:类型可以是Java语言允许的任何数据类型,包括基本数据类型和引用数据类型
成员变量名:成员变量名只要是一个合法的标识符即可,这只是从语法角度来说。
默认值:定义成员变量还可以指定一个可选的默认值。
②定义方法的格式如下:
[修饰符] 方法返回值类型 方法名(形参列表)
{
//有零条到多条可执行性语句组成的方法体
}
方法体多条可执行语句由严格的执行顺序,排在方法体前面的语句总是先执行,排在后面的语句总是后执行。
static是一个特殊的关键字,它可用于修饰方法、成员变量等成员。static修饰的成员变量它属于这个类本身,而不属于该类的单个实例,因为通常把static修饰的成员变量和方法也称为类变量、类方法。不使用static修饰的普通方法、成员变量则属于该类的实例,而不属于该类。因为通常把不使用static修饰的成员变量和方法也称为实例变量、实例方法。
实例变量和静态变量区别
静态的属性不依赖于实例的存在而存在。
在程序上运行时区别:实例变量属于某个对象的属性,必须创建实例对象,其中的实例变量才会被分配,才能使用这个实例变量。静态变量不属于某个实例变量,而是属于类,所以也称为类变量。只要加载了类的字节码,不用创建任何实例对象,静态对象就会被分配空间,静态对象就可以直接使用类名使用了。
构造器是一个特殊方法,语法格式:
[修饰符] 构造器名(形参列表)
{
//由零条到多条可执行性语句组成的构造器执行体
}
修饰符:修饰符可以省略,也可以是public 、 protected、private其中之一。
构造器名:构造器名必须和类名相同。
形参列表:和定义方法形参列表的格式完全相同。
值得指出的是:构造器不能定义返回值类型,也不能使用void声明构造器返回值。如果为构造器定义了返回值类型,也不能使用void声明构造器没有返回值。如果使用void来声明构造器没有返回值,编译时不会出错,但Java会把这个所谓的构造器当成方法来处理——它就不再是构造器。
其实构造器并不是没有返回值,只是Java语法规定。实际上,类的构造器是有返回值的,当使用new关键字来调用构造器时,构造器返回类的实例,可以把这个当成构造器的返回值,因此构造器的返回值总是当前类。但是不能用return来返回当前类的对象,因为构造器的返回值是隐式的。
定义一个Person类:
public class Person
{
//下面定义了两个成员变量
public String name;
public int age;
//下面定义了一个say方法
public void say(String content)
{
System.out.println(content);
}
}
上面的Person类的没有定义构造器,系统将为它提供一个默认的构造器,系统提供的构造器总是没有参数的。
定义类之后,接下来可使用该类了,Java的类大致有如下作用。
定义变量。
创建对象。
调用类的类方法或访问类的类变量。
二、对象的产生和使用
创建对象的根本途径是使用构造器,通过new关键字来调用某个类的构造器即可创建这个类的实例。
//使用Person类定义一个Person类型的变量
Person p;
//通过new关键字调用Person类的构造器,返回一个Person实例
//将该Person实例赋给p变量
p = new Person();
创建对象之后,接下来即可使用该对象了,Java对象大致有如下作用。
①访问对象的实例变量
②调用对象的方法
如果访问权限允许,类里的定义的方法和成员变量都可以通过类或实例来调用。类或实例访问问方法或成员变量的语法是:类.类变量|方法,或实例.实例变量|方法,在这种方式中,类或实例是主调者,用于访问该类或该类的实例的成员变量或方法。
static修饰的方法和成员变量,既可以通过类来调用,也可通过实例来调用;没有使用static修饰的普通方法和成员变量,只可通过实例来调用。
下面程序通过Person实例来调用Person的成员变量和方法。
//访问p的name实例变量,直接为该变量赋值
p.name = "张三";
//调用p的say()方法,声明say()方法时定义了一个形参
//调用该方法必须为形参指定一个值
p.say("今天是周五");
//直接输出p的name实例变量,将输出张三
System.out.println(p.name);