Java做为一种面向对象语言。支持如下基本概念:html
本节咱们重点研究对象和类的概念。java
下图中男孩女孩为类,而具体的每一个人为该类的对象:程序员
如今让咱们深刻了解什么是对象。看看周围真实的世界,会发现身边有不少对象,车,狗,人等等。全部这些对象都有本身的状态和行为。编辑器
拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。学习
对比现实对象和软件对象,它们之间十分类似。this
软件对象也有状态和行为。软件对象的状态就是属性,行为经过方法体现。spa
在软件开发中,方法操做对象内部状态的改变,对象的相互调用也是经过方法来完成。命令行
类能够当作是建立Java对象的模板。code
经过下面一个简单的类来理解下Java中类的定义:htm
public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sleeping(){ } }
一个类能够包含如下类型变量:
一个类能够拥有多个方法,在上面的例子中:barking()、hungry()和sleeping()都是Dog类的方法。
每一个类都有构造方法。若是没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在建立一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类能够有多个构造方法。
下面是一个构造方法示例:
public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造器仅有一个参数:name } }
对象是根据类建立的。在Java中,使用关键字new来建立一个新的对象。建立对象须要如下三步:
下面是一个建立对象的例子:
public class Puppy{ public Puppy(String name){ //这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public static void main(String []args){ // 下面的语句将建立一个Puppy对象 Puppy myPuppy = new Puppy( "tommy" ); } }
编译并运行上面的程序,会打印出下面的结果:
小狗的名字是 : tommy
经过已建立的对象来访问成员变量和成员方法,以下所示:
/* 实例化对象 */ ObjectReference = new Constructor(); /* 访问类中的变量 */ ObjectReference.variableName; /* 访问类中的方法 */ ObjectReference.MethodName();
下面的例子展现如何访问实例变量和调用成员方法:
public class Puppy{ int puppyAge; public Puppy(String name){ // 这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public void setAge( int age ){ puppyAge = age; } public int getAge( ){ System.out.println("小狗的年龄为 : " + puppyAge ); return puppyAge; } public static void main(String []args){ /* 建立对象 */ Puppy myPuppy = new Puppy( "tommy" ); /* 经过方法来设定age */ myPuppy.setAge( 2 ); /* 调用另外一个方法获取age */ myPuppy.getAge( ); /*你也能够像下面这样访问成员变量 */ System.out.println("变量值 : " + myPuppy.puppyAge ); } }
编译并运行上面的程序,产生以下结果:
小狗的名字是 : tommy 小狗的年龄为 : 2 变量值 : 2
在本节的最后部分,咱们将学习源文件的声明规则。当在一个源文件中定义多个类,而且还有import语句和package语句时,要特别注意这些规则。
类有若干种访问级别,而且类也分不一样的类型:抽象类和final类等。这些将在访问控制章节介绍。
除了上面提到的几种类型,Java还有一些特殊的类,如:内部类、匿名类。
包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,所以颇有必要对类和接口进行分类。
在Java中,若是给出一个完整的限定名,包括包名、类名,那么Java编译器就能够很容易地定位到源代码或者类。Import语句就是用来提供一个合理的路径,使得编译器能够找到某个类。
例如,下面的命令行将会命令编译器载入java_installation/java/io路径下的全部类
import java.io.*;
在该例子中,咱们建立两个类:Employee 和 EmployeeTest。
首先打开文本编辑器,把下面的代码粘贴进去。注意将文件保存为 Employee.java。
Employee类有四个成员变量:name、age、designation和salary。该类显式声明了一个构造方法,该方法只有一个参数。
import java.io.*; public class Employee{ String name; int age; String designation; double salary; // Employee 类的构造器 public Employee(String name){ this.name = name; } // 设置age的值 public void empAge(int empAge){ age = empAge; } /* 设置designation的值*/ public void empDesignation(String empDesig){ designation = empDesig; } /* 设置salary的值*/ public void empSalary(double empSalary){ salary = empSalary; } /* 打印信息 */ public void printEmployee(){ System.out.println("名字:"+ name ); System.out.println("年龄:" + age ); System.out.println("职位:" + designation ); System.out.println("薪水:" + salary); } }
程序都是从main方法开始执行。为了能运行这个程序,必须包含main方法而且建立一个实例对象。
下面给出EmployeeTest类,该类实例化2个 Employee 类的实例,并调用方法设置变量的值。
将下面的代码保存在 EmployeeTest.java文件中。
import java.io.*; public class EmployeeTest{ public static void main(String args[]){ /* 使用构造器建立两个对象 */ Employee empOne = new Employee("RUNOOB1"); Employee empTwo = new Employee("RUNOOB2"); // 调用这两个对象的成员方法 empOne.empAge(26); empOne.empDesignation("高级程序员"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("菜鸟程序员"); empTwo.empSalary(500); empTwo.printEmployee(); } }
编译这两个文件而且运行 EmployeeTest 类,能够看到以下结果:
$ javac EmployeeTest.java $ java EmployeeTest 名字:RUNOOB1 年龄:26 职位:高级程序员 薪水:1000.0 名字:RUNOOB2 年龄:21 职位:菜鸟程序员 薪水:500.0