>  기사  >  Java  >  Java 객체 및 클래스에 대한 깊은 이해

Java 객체 및 클래스에 대한 깊은 이해

高洛峰
高洛峰원래의
2017-01-20 17:31:171664검색

객체 지향 언어로서의 Java. 다음 기본 개념을 지원합니다:

• 다형성
• 상속
• 캡슐화
• 추상화
• 클래스
• 객체
• 인스턴스
• 메소드
•메시지 분석

이 섹션에서는 객체와 클래스의 개념에 중점을 둡니다.

•객체: 객체는 클래스의 인스턴스이며 상태와 동작을 갖습니다. 예를 들어, 개는 개체입니다. 상태에는 색깔, 이름, 행동이 포함됩니다. 꼬리 흔들기, 짖기, 먹기 등.

• 클래스: 클래스는 객체 클래스의 동작과 상태를 설명하는 템플릿입니다.

Java의 객체

이제 객체가 무엇인지 자세히 살펴보겠습니다. 주변의 실제 세계를 살펴보면 자동차, 개, 사람 등 주변에 많은 물체가 있다는 것을 알 수 있습니다. 이러한 모든 개체에는 고유한 상태와 동작이 있습니다.

개의 상태에는 이름, 품종, 색깔 등이 포함됩니다. 짖는 소리, 꼬리 흔들기, 달리기 등이 있습니다.

실제 개체와 소프트웨어 개체를 비교하면 매우 유사합니다.

소프트웨어 객체에도 상태와 동작이 있습니다. 소프트웨어 개체의 상태는 해당 속성이며 해당 동작은 메서드를 통해 반영됩니다.

소프트웨어 개발에 있어서 메소드는 객체 내부 상태의 변화에 ​​따라 동작하며, 객체 간의 상호 호출도 메소드를 통해 완성됩니다.

Java의 클래스

클래스는 Java 객체를 생성하기 위한 템플릿으로 볼 수 있습니다.

다음의 간단한 클래스를 통해 Java의 클래스 정의를 이해하세요.

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

클래스에는 다음 유형 변수가 포함될 수 있습니다.

•지역 변수: 메소드, 생성자 또는 명령문 블록에 정의된 변수를 지역 변수라고 합니다. 변수 선언과 초기화는 모두 메소드에 있습니다. 메소드가 끝나면 변수는 자동으로 소멸됩니다.

•멤버 변수: 멤버 변수는 클래스 내부와 메소드 본문 외부에 정의된 변수입니다. 이러한 변수는 객체가 생성될 때 인스턴스화됩니다. 멤버 변수는 특정 클래스의 메서드, 생성자 및 명령문 블록을 통해 액세스할 수 있습니다.

• 클래스 변수: 클래스 변수는 클래스 내부, 메서드 본문 외부에서도 선언되지만 정적 유형으로 선언되어야 합니다.

위의 예에서 클래스에는 여러 메서드가 있을 수 있습니다.짖는 소리(), 배고픈() 및 잠자는()은 모두 Dog 클래스의 메서드입니다.

생성자 메서드

모든 클래스에는 생성자 메서드가 있습니다. 클래스에 대해 생성자가 명시적으로 정의되지 않은 경우 Java 컴파일러는 클래스에 대한 기본 생성자를 제공합니다.

객체 생성 시 생성자를 하나 이상 호출해야 합니다. 생성자의 이름은 클래스와 동일해야 합니다. 클래스는 여러 생성자를 가질 수 있습니다.

다음은 생성자 메소드의 예시입니다.

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

객체 생성

객체는 클래스를 기반으로 생성됩니다. Java에서는 new 키워드를 사용하여 새 개체를 만듭니다. 객체를 생성하려면 다음 세 단계가 필요합니다.

•선언: 객체 이름과 객체 유형을 포함하여 객체를 선언합니다.

•인스턴스화: 객체를 생성하려면 new 키워드를 사용하세요.

•초기화: new를 사용하여 객체를 생성할 때 생성자 메서드가 호출되어 객체를 초기화합니다.

다음은 객체 생성 예입니다.

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" );
  }
}

위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 인쇄됩니다. 🎜>

전달된 이름은 :tommy

인스턴스 변수 및 메소드에 액세스

생성된 객체를 통해 멤버 변수 및 멤버 메소드에 다음과 같이 액세스합니다.

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

다음 예제에서는 인스턴스 변수에 액세스하고 멤버 메서드를 호출하는 방법을 보여줍니다.

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 );
  }
}

위 프로그램을 컴파일하고 실행합니다. 다음 결과가 생성됩니다.

Passed Name is :tommy

Puppy's age is :2
Variable Value :2

Source File Declaration Rules

이 문서의 마지막 부분 섹션에서는 소스 파일의 선언 규칙을 알아봅니다. 소스 파일에 여러 클래스를 정의할 때와 import 문 및 package 문이 있는 경우 이러한 규칙에 특별한 주의를 기울이십시오.

• 소스 파일에는 공개 클래스가 하나만 있을 수 있습니다.

• 소스 파일에는 비공개 클래스가 여러 개 있을 수 있습니다.

• 소스 파일 이름은 다음과 같아야 합니다. 공개 클래스와 동일하게 클래스 이름이 일관되게 유지됩니다. 예를 들어 소스 파일에 있는 공용 클래스의 클래스 이름은 Employee이고 소스 파일의 이름은 Employee.java여야 합니다.

•패키지에 클래스가 정의된 경우 패키지 설명은 소스 파일의 첫 번째 줄에 있어야 합니다.

•소스 파일에 import 문이 포함된 경우 패키지 문과 클래스 정의 사이에 배치해야 합니다. package 문이 없으면 import 문이 소스 파일의 첫 번째에 있어야 합니다.

•import 문과 package 문은 소스 파일에 정의된 모든 클래스에 유효합니다. 동일한 소스 파일에서 서로 다른 클래스에 서로 다른 패키지 선언을 제공할 수 없습니다.

수업에는 여러 가지 액세스 수준이 있으며, 수업도 추상 수업, 최종 수업 등 다양한 유형으로 구분됩니다. 이는 액세스 제어 장에서 소개됩니다.

위에 언급된 유형 외에도 Java에는 내부 클래스, 익명 클래스와 같은 특수 클래스도 있습니다.

Java 패키지

패키지는 주로 클래스와 인터페이스를 분류하는 데 사용됩니다. Java 프로그램을 개발할 때 수백, 수천 개의 클래스를 작성하게 되므로 클래스와 인터페이스를 분류하는 것이 필요합니다.

Import 문

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:"+ 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中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.