鍍金池/ 教程/ Java/ Java 的對象和類
Java 接口
Java 方法
Java 數(shù)字
Java 條件判斷
Java 異常處理
Java 字符
Java 重寫
Java 網(wǎng)絡(luò)編程
Java 數(shù)據(jù)結(jié)構(gòu)
Java 的對象和類
Java 多線程
Java 封裝
Java 數(shù)組
Java Applet 基礎(chǔ)
Java 庫類
Java 抽象
Java 繼承
Java 正則表達式
Java 描述符的類型
Java 發(fā)送郵件
Java 序列化
Java 泛型
Java 多態(tài)
Java 變量類型
Java 基本數(shù)據(jù)類型
Java 包
Java 快速參考指南
Java 基本運算符
Java 概述
Java 字符串
Java 循環(huán)控制
Java 環(huán)境設(shè)置
Java 文件注釋
Java 文件和 I/O
Java 集合
Java 基本語法
Java 日期和時間

Java 的對象和類

Java 是一種面向?qū)ο蟮恼Z言。作為一種具有面向?qū)ο筇卣鞯恼Z言
Java 包括以下幾項基本概念:

  • 多態(tài)性
  • 繼承性
  • 封裝性
  • 抽象性
  • 對象
  • 實例
  • 消息解析

在這一章,我們將深入學(xué)習類和對象。

  • 對象:對象具有狀態(tài)和行為。如果我們考慮現(xiàn)實世界我們可以在我們身邊找到很多對象,小汽車,狗,人類等等。所有這些對象都具有狀態(tài)和行為。
  • :類可以被定義為描述對象支持類型的行為、狀態(tài)的的模板、藍圖。

Java 中的對象

現(xiàn)在讓我們深入學(xué)習對象。如果我們考慮一條狗,那么它的狀態(tài)就是-名字,品種,顏色,它的行為就是汪汪,搖尾巴,跑。

如果我們將軟件中的對象和現(xiàn)實世界中的對象對比,那么我們將會發(fā)現(xiàn)他們有很多相似的特征。軟件中的對象也具有狀態(tài)和行為。軟件的狀態(tài)被儲存在文件中,它的行為通過方法來表現(xiàn)。

因此,在軟件發(fā)展過程中方法控制對象的內(nèi)在狀態(tài)并且對象和對象間的交流通過方法來完成。

Java 中的類

類是有獨立的對象創(chuàng)造出的藍圖。

下面給出了一個類的例子:

public class Dog{
   String breed;
   int age;
   String color;

   void barking(){
   }

   void hungry(){
   }

   void sleeping(){
   }
}

類可以包括以下的變量類型:

  • 局部變量:在方法,構(gòu)造器或區(qū)域中定義的變量成為局部變量。變量將會在方法內(nèi)產(chǎn)生和發(fā)展,然后當方法結(jié)束變量就會破壞。
  • 實例變量:實例變量是在類內(nèi)但是在方法外的變量。這些變量是當類被裝載時被實體化的。實例變量可以是從特定類的任何方法,構(gòu)造器,區(qū)域中存取。
  • 類變量:類變量是在類中聲明的變量,它處在任何方法之外,有靜態(tài)關(guān)鍵字。

類可以有任意數(shù)量的方法來存取不同種類方法的值。在上面的例子中,barking(),hungry()sleeping() 是方法。
下面提到的是一些深入了解 Java 語言所必須討論的重要話題。

構(gòu)造器

當我們討論類時,其中一個重要的子話題就是構(gòu)造器。每一個類都有一個構(gòu)造器。如果我們不單獨為一個類編寫構(gòu)造器那么 Java 的編譯器將會給這個類建立一個默認的構(gòu)造器。

每當一個新的對象被創(chuàng)建,至少一個構(gòu)造器將會被調(diào)用。構(gòu)造器的一個最主要的原則就是他們必須和類有同樣的名字。一個類可以有不止一個構(gòu)造器。

下面給出了一個構(gòu)造器的例子:

public class Puppy{
   public Puppy(){
   }

   public Puppy(String name){
      // This constructor has one parameter, name.
   }
}

在需要只創(chuàng)建一個類的實例的時,Java 也支持單例。

創(chuàng)造一個對象

如前所述,類為對象提供了藍圖。因此基本來說一個對象是從一個類中創(chuàng)造出來的。在 Java 中,新的關(guān)鍵詞被用來創(chuàng)造新的對象。當我們從類中創(chuàng)造對象時需要三步:

  • 聲明:變量聲明可以聲明其所代表的對象類型。
  • 實例化:“新的”關(guān)鍵詞用來創(chuàng)造對象。
  • 初始化:“新的”關(guān)鍵詞伴隨著一個構(gòu)造器的啟用,這個將新的對象初始化。

下面給出了一個創(chuàng)造對象的例子:

public class Puppy{

   public Puppy(String name){
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name ); 
   }
   public static void main(String []args){
      // Following statement would create an object myPuppy
      Puppy myPuppy = new Puppy( "tommy" );
   }
}

如果編譯并運行上述程序,那么將輸出下列結(jié)果:

Passed Name is :tommy

訪問實體變量和方法

實體變量和方法是通過創(chuàng)造對象來訪問的。為了訪問一個實體變量完全有效的路徑應(yīng)該如下所示:

/* First create an object */
ObjectReference = new Constructor();
/* Now call a variable as follows */
ObjectReference.variableName;
/* Now you can call a class method as follows */
ObjectReference.MethodName();

例子

這個例子解釋了如何存取類的實體變量和方法:

public class Puppy{

   int puppyAge;

   public Puppy(String name){
      // This constructor has one parameter, name.
      System.out.println("Passed Name is :" + name ); 
   }
   public void setAge( int age ){
       puppyAge = age;
   }

   public int getAge( ){
       System.out.println("Puppy's age is :" + puppyAge ); 
       return puppyAge;
   }
   public static void main(String []args){
      /* Object creation */
      Puppy myPuppy = new Puppy( "tommy" );

      /* Call class method to set puppy's age */
      myPuppy.setAge( 2 );

      /* Call another class method to get puppy's age */
      myPuppy.getAge( );

      /* You can access instance variable as follows as well */
      System.out.println("Variable Value :" + myPuppy.puppyAge ); 
   }
}

如果我們編譯運行上述程序,那么將會產(chǎn)生如下結(jié)果:

Passed Name is :tommy
Puppy's age is :2
Variable Value :2

源文件聲明規(guī)則

在本節(jié)的最后一部分讓我們學(xué)習一下源文件聲明規(guī)則。當在源文件中聲明類,輸入和打包語法時,這些規(guī)則是十分重要的。

  • 每個源文件中只能有一個公共類。
  • 一個源文件可以有很多非公共類。
  • 公共類的名稱必須是源文件的名稱同時也要以 .java 為后綴。舉例來說:類的名稱是 public class Employee{},那么源文件就應(yīng)該是 Employee.java。
  • 如果類是在一個程序包中定義的,那么程序包的聲明必須是源文件的第一個聲明。
  • 如果輸入聲明出現(xiàn)那么他們必須被寫在封裝聲明和類聲明之間。如果沒有封裝聲明那么輸入聲明必須在源文件的第一行。
  • 輸入和打包聲明會暗示所有源文件中的存在的類。在源文件中很難為不同的類區(qū)分輸入和封裝聲明。
    類有不同的訪問級別并且有很多不同的類;抽象的類,最終的類等等。我將會在后面的訪問控制修飾符章節(jié)解釋這些。
    除了以上提到的類的類型之外, Java 也有像內(nèi)部類和匿名類這樣的特殊類。

Java 程序包

簡而言之,就是一種分類類和接口的一種方法。當用 Java 開發(fā)程序時,數(shù)百個類和接口會被編寫,因此分類這些類不但是必須的而且也是會使問題變得容易的。

Import 語法

在 Java 中,如果給出包括封裝和類的名稱的全限定名,那么編譯器很容易定位到源類和源代碼。Import 語法是給編譯器尋找特定類的適當位置的一種方法。

舉例來說,下面這行語句將會要求編譯器去裝載 java_installation/java/io 路徑下的所有可用的類:

import java.io.*;

一個簡單的案例學(xué)習

在我們的案例學(xué)習中,我們將創(chuàng)造兩個類。他們是 Employee 和 EmployeeTest。

首先打開記事本輸入下列代碼。記得這個是 Employee 類,這個類是公共類。現(xiàn)在以 Employee.java 為文件名保存這個源文件。

這個 Employee 類包括四個實體變量姓名(name),年齡(age),職位(designation)和薪水(salary)。這個類有一個確定的需要參數(shù)的的構(gòu)造器。

import java.io.*;
public class Employee{
   String name;
   int age;
   String designation;
   double salary;

   // This is the constructor of the class Employee
   public Employee(String name){
      this.name = name;
   }
   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge){
      age =  empAge;
   }
   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig){
      designation = empDesig;
   }
   /* Assign the salary to the variable salary.*/
   public void empSalary(double empSalary){
      salary = empSalary;
   }
   /* Print the Employee details */
   public void printEmployee(){
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}

正如本指導(dǎo)之前所述,編程從主函數(shù)開始。因此,我們?yōu)榱诉\行這個 Employee 類就應(yīng)當建立主函數(shù)和類。我們將分別為這些任務(wù)創(chuàng)建類。

下面所給的是 EmployeeTest 類,這個類創(chuàng)建了兩個 Employee 類的實例,并且為每個對象調(diào)用方法從而給每個變量賦值。

在 EmployeeTest.java 文件中保存下列代碼

import java.io.*;
public class EmployeeTest{

   public static void main(String args[]){
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");

      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();

      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}

現(xiàn)在編譯兩個類然后運行 EmployeeTest,你將會看到如下結(jié)果:

C :> javac Employee.java
C :> vi EmployeeTest.java
C :> javac EmployeeTest.java
C :> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0

接下來是什么呢?

下一章我們將討論 Java 中的基本數(shù)據(jù)類型以及他們在開發(fā)應(yīng)用程序時如何應(yīng)用。

上一篇:Java 字符下一篇:Java 條件判斷