Heim  >  Artikel  >  Java  >  Tiefes Verständnis von Java-Objekten und -Klassen

Tiefes Verständnis von Java-Objekten und -Klassen

高洛峰
高洛峰Original
2017-01-20 17:31:171664Durchsuche

Java als objektorientierte Sprache. Die folgenden Grundkonzepte werden unterstützt:

• Polymorphismus
• Vererbung
• Kapselung
• Abstraktion
• Klasse
• Objekt
• Instanz
• Methode
•Nachrichtenanalyse

In diesem Abschnitt konzentrieren wir uns auf die Konzepte von Objekten und Klassen.

•Objekt: Ein Objekt ist eine Instanz einer Klasse und hat Status und Verhalten. Zu seinem Status gehören beispielsweise: Farbe, Name und Rasse; zu seinen Verhaltensweisen gehören: Schwanzwedeln, Bellen, Fressen usw.

• Klasse: Eine Klasse ist eine Vorlage, die das Verhalten und den Status einer Objektklasse beschreibt.

Objekte in Java

Lassen Sie uns nun einen genaueren Blick darauf werfen, was ein Objekt ist. Wenn Sie die reale Welt um Sie herum betrachten, werden Sie feststellen, dass sich um Sie herum viele Objekte befinden, wie zum Beispiel Autos, Hunde, Menschen usw. Alle diese Objekte haben ihren eigenen Zustand und ihr eigenes Verhalten.

Nehmen Sie einen Hund als Beispiel: Zu seinem Status gehören: Name, Rasse und Farbe. Zu seinen Verhaltensweisen gehören: Bellen, Schwanzwedeln und Laufen.

Vergleichen Sie reale Objekte und Softwareobjekte, sie sind sich sehr ähnlich.

Softwareobjekte haben auch Status und Verhalten. Der Zustand eines Softwareobjekts ist sein Attribut, und sein Verhalten wird durch Methoden widergespiegelt.

In der Softwareentwicklung bearbeiten Methoden Änderungen im internen Zustand von Objekten, und auch gegenseitige Aufrufe zwischen Objekten werden durch Methoden vervollständigt.

Klassen in Java

Klassen können als Vorlagen zum Erstellen von Java-Objekten betrachtet werden.

Verstehen Sie die Definition einer Klasse in Java anhand der folgenden einfachen Klasse:

public class Dog{
  String breed;
  int age;
  String color;
  void barking(){
  }
    
  void hungry(){
  }
    
  void sleeping(){
  }
}

Eine Klasse kann die folgenden Typvariablen enthalten:

• Lokale Variablen: Variablen, die in Methoden, Konstruktoren oder Anweisungsblöcken definiert sind, werden lokale Variablen genannt. Die Variablendeklaration und -initialisierung erfolgt alle in Methoden. Nach Beendigung der Methode werden die Variablen automatisch zerstört.

•Mitgliedsvariablen: Mitgliedsvariablen sind Variablen, die in der Klasse und außerhalb des Methodenkörpers definiert sind. Solche Variablen werden beim Erstellen des Objekts instanziiert. Auf Mitgliedsvariablen kann über Klassenmethoden, Konstruktoren und klassenspezifische Anweisungsblöcke zugegriffen werden.

• Klassenvariablen: Klassenvariablen werden auch in der Klasse außerhalb des Methodenkörpers deklariert, müssen jedoch als statischer Typ deklariert werden.

Eine Klasse kann mehrere Methoden haben: barking(),hunger() und Sleeping() sind alles Methoden der Dog-Klasse.

Konstruktormethode

Jede Klasse hat eine Konstruktormethode. Wenn für eine Klasse kein Konstruktor explizit definiert ist, stellt der Java-Compiler einen Standardkonstruktor für die Klasse bereit.

Beim Erstellen eines Objekts muss mindestens ein Konstruktor aufgerufen werden. Der Name des Konstruktors muss mit dem der Klasse identisch sein. Eine Klasse kann mehrere Konstruktoren haben.

Das Folgende ist ein Beispiel für eine Konstruktormethode:

public class Puppy{
  public Puppy(){
  }
  
  public Puppy(String name){
   // 这个构造器仅有一个参数:name
  }
}

Erstellen von Objekten

Objekte werden basierend auf erstellt Klassen. Verwenden Sie in Java das Schlüsselwort new, um ein neues Objekt zu erstellen. Das Erstellen eines Objekts erfordert die folgenden drei Schritte:

•Deklaration: Deklarieren Sie ein Objekt, einschließlich des Objektnamens und des Objekttyps.

•Instantiierung: Verwenden Sie das Schlüsselwort new, um ein Objekt zu erstellen.

•Initialisierung: Wenn Sie new zum Erstellen eines Objekts verwenden, wird die Konstruktormethode aufgerufen, um das Objekt zu initialisieren.

Das Folgende ist ein Beispiel für die Erstellung eines Objekts:

public class Puppy{
  public Puppy(String name){
   //这个构造器仅有一个参数:name
   System.out.println("Passed Name is :" + name );
  }
  public static void main(String []args){
   // 下面的语句将创建一个Puppy对象
   Puppy myPuppy = new Puppy( "tommy" );
  }
}

Kompilieren Sie das obige Programm und führen Sie es aus. Die folgenden Ergebnisse werden gedruckt :

Übergebener Name ist :tommy

Zugriff auf Instanzvariablen und -methoden

Zugriff auf Mitgliedsvariablen und Mitgliedsmethoden über das erstellte Objekt wie folgt:

/* 实例化对象 */
ObjectReference = new Constructor();
/* 访问其中的变量 */
ObjectReference.variableName;
/* 访问类中的方法 */
ObjectReference.MethodName();

Das folgende Beispiel zeigt, wie auf Instanzvariablen zugegriffen und Mitgliedsmethoden aufgerufen wird:

public class Puppy{
  int puppyAge;
  public Puppy(String name){
   // 这个构造器仅有一个参数: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){
   /* 创建对象 */
   Puppy myPuppy = new Puppy( "tommy" );
   /* 通过方法来设定age */
   myPuppy.setAge( 2 );
   /* 调用另一个方法获取age */
   myPuppy.getAge( );
   /*你也可以像下面这样访问成员变量 */
   System.out.println("Variable Value :" + myPuppy.puppyAge );
  }
}

Kompilieren Und das Ausführen des obigen Programms führt zu den folgenden Ergebnissen:

Übergegebener Name ist :tommy
Alter des Welpen ist :2
Variablenwert :2

Regel zur Quelldateideklaration
in Im letzten Teil dieses Abschnitts betrachten wir die Deklarationsregeln für Quelldateien. Achten Sie besonders auf diese Regeln, wenn Sie mehrere Klassen in einer Quelldatei definieren und wenn Importanweisungen und Paketanweisungen vorhanden sind.

• Es kann nur eine öffentliche Klasse in einer Quelldatei geben

• Eine Quelldatei kann mehrere nicht öffentliche Klassen haben

• Der Name der Quelldatei sollte sein das Gleiche wie die öffentliche Klasse. Klassennamen bleiben konsistent. Beispiel: Der Klassenname der öffentlichen Klasse in der Quelldatei lautet Employee, dann sollte die Quelldatei Employee.java heißen.

•Wenn eine Klasse in einem Paket definiert ist, sollte die Paketanweisung in der ersten Zeile der Quelldatei stehen.

•Wenn die Quelldatei eine Importanweisung enthält, sollte diese zwischen der Paketanweisung und der Klassendefinition platziert werden. Wenn keine Paketanweisung vorhanden ist, sollte die Importanweisung an erster Stelle in der Quelldatei stehen.

•Die Importanweisung und die Paketanweisung gelten für alle in der Quelldatei definierten Klassen. In derselben Quelldatei können unterschiedliche Paketdeklarationen nicht für verschiedene Klassen angegeben werden.

Klassen haben mehrere Zugriffsebenen und Klassen sind auch in verschiedene Typen unterteilt: abstrakte Klassen, Abschlussklassen usw. Diese werden im Kapitel Zugangskontrolle vorgestellt.

Zusätzlich zu den oben genannten Typen gibt es in Java auch einige spezielle Klassen, wie zum Beispiel innere Klassen und anonyme Klassen.

Java-Paket

Das Paket wird hauptsächlich zur Klassifizierung von Klassen und Schnittstellen verwendet. Bei der Entwicklung von Java-Programmen schreiben Sie möglicherweise Hunderte oder Tausende von Klassen. Daher ist es erforderlich, Klassen und Schnittstellen zu klassifizieren.

Import-Anweisung

Wenn in Java ein vollständiger qualifizierter Name angegeben wird, einschließlich des Paketnamens und des Klassennamens, kann der Java-Compiler den Quellcode oder die Klasse leicht finden. Die Import-Anweisung wird verwendet, um einen sinnvollen Pfad bereitzustellen, damit der Compiler eine bestimmte Klasse finden kann.

例如,下面的命令行将会命令编译器载入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:"+ name );
   System.out.println("Age:" + age );
   System.out.println("Designation:" + designation );
   System.out.println("Salary:" + salary);
  }
}

   

程序都是从main方法开始执行。为了能运行这个程序,必须包含main方法并且创建一个实例对象。

下面给出EmployeeTest类,该类实例化2个Employee类的实例,并调用方法设置变量的值。

将下面的代码保存在EmployeeTest.java文件中。

import java.io.*;
public class EmployeeTest{
  
  public static void main(String args[]){
   /* 使用构造器创建两个对象 */
   Employee empOne = new Employee("James Smith");
   Employee empTwo = new Employee("Mary Anne");
  
   // 调用这两个对象的成员方法
   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();
  }
}

编译这两个文件并且运行EmployeeTest类,可以看到如下结果:

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 对象和类 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHP中文网。

更多深入理解Java 对象和类相关文章请关注PHP中文网!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn