在Java语言中经常提到类和对象,实质上可以将类看作是对象的载体,它定义了对象所具有的功能。面向对象程序设计具有以下特点:封装性、继承性和多态性。
一、类
1.成员变量
在Java中对象的属性也称为成员变量。成员变量声明在类体中,局部变量声明在方法体中。示例代码如下:
package com.example;
public class Book {
private String name;//定义一个String型的成员变量
public String getName(){//定义一个getName()方法
int id=0;//局部变量
setName("java");//调用类中其他方法
return id+this.name;//设置方法返回值
}
private void setName(String name){
this.name=name;
}
public Book getBook(){
return this;//返回Book类引用
}
}
2.成员方法
在Java语言中使用成员方法对应于类对象的行为。上述代码为例,Book类中包含了getName()和setName()两个方法。定义成员方法的语法格式如下:
权限修饰符 返回值类型 方法名(参数类型 参数名){
...//方法体
return 返回值;
}
一个成员方法可以有参数,这个参数可以是对象也可以是基本数据类型的变量,同时成员方法有返回值和不返回任何值的选择,如果方法需要返回值可以在方法体中使用return关键字,使用这个关键字后,方法的执行将被终止。在成员方法中可以调用其他成员方法和类成员变量。如果一个方法中含有与成员变量同名的局部变量,则方法中对这个变量的访问以局部变量进行。
3.权限修饰符
Java中的权限修饰符主要包括private、public和protected,这些修饰符控制着对类和类的成员变量以及成员方法的访问。如下图所示:
如果一个类的成员变量或成员方法被修饰为private,则该成员变量只能在本类中被使用,在子类中是不可见的,并且对其他包的类也是不可见的。如果将类的成员变量和成员方法的访问权限设置为public,那么除了可以在本类使用这些数据之外,还可以在子类和其他包的类中使用。如果一个类的访问权限被设置为private,这个类将隐藏其内的所有数据,以免用户直接访问它。
4.局部变量
如果在成员方法中定义一个变量,那么这个变量被称为局部变量。如下代码所示,getName()方法中的id变量即为局部变量。实际上方法中的形参也可以作为一个局部变量,如在定义setName(String name)方法时,String name这个形参就被看作是局部变量。局部变量是在方法被执行时创建,在方法执行结束时销毁。局部变量在使用时必须进行赋值操作或被初始化,否则会出现编译错误。
public String getName(){//定义一个getName()方法
int id=0;//局部变量
setName("java");//调用类中其他方法
return id+this.name;//设置方法返回值
}
5.局部变量的有效范围
局部变量的有效范围又可以称为变量的作用域,局部变量的有效范围从该变量的声明开始到该变量的结束为止。如下图所示:
6.this关键字
private void setName(String name){
this.name=name;
}
在上述代码中,成员变量与setName()方法中的形参的名称相同,都为name。在Java语言中,规定使用this关键字来代表本类对象的引用,this关键字被隐式的用于引用对象的成员变量和方法。this可以调用成员变量和成员方法,但在Java语言中最常规的调用方式是使用“对象.成员变量”或“对象.成员方法”进行调用。
二、类的构造方法
构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的。每当类实例化一个对象时,类都会自动调用构造方法。构造方法的特点如下:
(1)构造方法没有返回值。
(2)构造方法的名称要与本类的名称相同。
构造方法的定义语法格式如下:
public book(){
//...构造方法体
}
public:构造方法修饰符。
book:构造方法的名称。
在构造方法中可以为成员变量赋值,这样当实例化一个本类对象时,相应的成员变量也将被赋值。如果类中没有明确定义构造方法,编译器会自动创建一个不带参数的默认构造方法。
三、静态变量、常量和方法
由static修饰的变量、常量和方法被称作静态变量、常量和方法。被声明为static的变量、常量和方法被称为静态成员。静态成员属于类所有,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员。语法如下:
类名.静态类成员
示例代码如下:
package com.example;
public class StaticTest {
static double PI=3.1415;//在类中定义静态常量
static int id;//在类中定义静态变量
public static void method1(){//在类中定义静态方法
//doSomething
}
public void method2(){//在类中定义非静态方法
System.out.println(StaticTest.PI);//调用静态常量
System.out.println(StaticTest.id);//调用静态变量
StaticTest.method1();//调用静态方法
}
}
在Java语言中对静态方法有两点规定:
(1)在静态方法中不可以使用this关键字。
(2)在静态方法中不可以直接调用非静态方法。
四、类的主方法
主方法是类的入口点,它定义了程序从何处开始;主方法提供对程序流向的控制,Java编译器通过主方法来执行程序。主方法的语法如下:
public static void main(String[] args){
//方法体
}
主方法具有以下特性:
(1)主方法是静态的,所以如要直接在主方法中调用其他方法,那该方法必须也是静态的。
(2)主方法没有返回值。
(3)主方法的形参为数组。其中args[0]~args[n]分别代表程序的第一个参数到第n个参数,可以使用args.length获取参数的个数。