身為資深Java的愛好者,特地歸納了這篇文檔,也希望透過分享可以幫到大家,看過之後還有不清楚物件和類別的嗎?這裡的物件不是找女朋友哦,它是類別的一個實例,有狀態和行為;而類別是一個模板,它描述一類物件的行為和狀態。
Java作為一種物件導向語言。支援以下基本概念:
多態
#繼承
封裝
抽象
類別
#物件
實例
方法
重載
#本節我們將重點放在物件和類別的概念上。
物件:物件是類別的一個實例(物件不是找個女朋友),有狀態和行為。例如,一隻狗是一個對象,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
類別:類別是一個模板,它描述一類物件的行為和狀態。
下圖中男孩女孩為類,而具體的每個人為該類的物件:
public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sleeping(){ } }一個類別可以包含以下類型變數:
:在方法、建構方法或語句區塊中定義的變數稱為局部變數。變數宣告和初始化都是在方法中,方法結束後,變數就會自動銷毀。
:成員變數是定義在類別中,方法體之外的變數。這種變數在創建物件的時候實例化。成員變數可以被類別中方法、建構方法和特定類別的語句區塊存取。
:類別變數也宣告在類別中,方法體之外,但必須宣告為static型別。
建構方法
在建立一個物件的時候,至少要呼叫一個建構方法。建構方法的名稱必須與類別同名,一個類別可以有多個建構方法。
下面是一個建構方法範例:
public class Puppy{ public Puppy(){ } public Puppy(String name){ // 这个构造器仅有一个参数:name } }
建立物件
:宣告一個對象,包括物件名稱和物件類型。
:使用關鍵字new來建立一個物件。
:使用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.java 文件代码: 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文件中。
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
相关推荐:
以上是最新區別Java中類別和物件的方法,趕緊拿走不謝的詳細內容。更多資訊請關注PHP中文網其他相關文章!