programing

클래스와 타입의 차이

newsource 2022. 12. 6. 22:01

클래스와 타입의 차이

자바가 처음이라 클래스와 타입개념이 헷갈립니다.예를 들어 오브젝트가"Hello World!"종류에 속하다 String또는 클래스 String니면????

클래스는 유형입니다.인터페이스는 타입입니다.원시인은 한 유형이다.배열은 유형입니다.

따라서 모든 유형은 클래스(Enum 상수 포함), 인터페이스, 프리미티브 또는 배열이기도 합니다.

유형에는 원시 유형과 참조 유형의 두 가지 범주가 있습니다.

  • 원시 유형의 변수는 항상 동일한 유형의 원시 값을 보유합니다.이러한 값은 해당 변수에 대한 할당 작업을 통해서만 변경할 수 있습니다.
  • 참조 유형의 변수는 항상 개체에 대한 참조 값을 유지합니다.한 모든 개체는 합니다.Object참조 유형은 클래스 유형(Enum 유형 포함), 인터페이스 유형 및 배열 유형입니다.

모든 데이터에는 그 구조를 정의하는 유형이 있습니다. 즉, 데이터가 차지하는 메모리 양, 배치 방법, 그리고 더 중요한 것은 데이터와의 상호 작용 방법입니다.

원시 유형의 예:

  1. int
  2. float
  3. char
  4. boolean

클래스 유형의 예:

  1. String
  2. Integer
  3. Boolean
  4. ArrayList
  5. StringBuilder

인터페이스 타입의 예:

  1. Collection
  2. List
  3. Map
  4. Serializable

어레이 유형의 예:

  1. int[]
  2. String[]
  3. Integer[][][]

기본적으로 변수로 참조할 수 있는 모든 것에는 유형이 있으며 클래스는 일종의 유형입니다.

자세한 내용은 이쪽:http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html

TLDR - 클래스는 Java의 유형 중 하나입니다.

주의 - 답변을 완전히 이해하려면 Java의 범용 기능에 대해 조금 알고 있어야 합니다.


차이점을 이해하기 위해 먼저 Java에서 Type이 무엇인지 이해하겠습니다.

JLS SE 10에 따르면

자바 프로그래밍 언어에는 원시 유형( in 4.2) 참조 유형(4 4.3)의 두 가지 유형이 있습니다.

primitive type이란?

a) 정수형은 byte, short, int 및 long이며, 값은 각각 8비트, 16비트, 32비트 및 64비트 부호 2의 보완 정수이며, char는 UTF-16 코드 단위를 나타내는 16비트 부호 없는 정수(§3.1)이다.

b) 부동소수점 타입은 플로트이며, 그 값에는 32비트 IEEE 754 부동소수점 번호가 포함되어 있으며, 값에는 64비트 IEEE 754 부동소수점 번호가 포함되어 있습니다.

c) 부울 타입에는 true와 false의 2가지 값이 있습니다.

이제, 참조 유형이 무엇인지에 대해 알아보겠습니다.

참조 타입에는 클래스 타입(「8.1」), 인터페이스 타입(「9.1」), 타입 변수(「4.4」), 어레이 타입(「10.1」)의 4 종류가 있습니다.

한 사람씩 의논해 봅시다.

JLS에서 를 참조하면 클래스는 다음과 같이 정의됩니다.

클래스 선언은 새로운 이름 있는 참조 유형을 지정합니다.

클래스 선언에는 일반 클래스 선언과 열거 선언의 두 종류가 있습니다.

ClassDeclaration:
NormalClassDeclaration 
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody

보여?[TypeParameters]클래스 타입에 이러한 범용 클래스도 포함되어 있는 것을 나타냅니다.

class Example<T>{

}

의 종류는 '수업형'이라고 합니다.Example

ungeneric, ungeneric, ungeneric 등의 합니다.String기타 일반 수업도 있습니다.

마찬가지로 인터페이스와 어레이 타입도 클리어 되어 있으면 좋겠습니다.를 들면 '배열형'을 .int[],String[]syslog.

마지막 부분인 변수 유형으로 넘어가겠습니다.그것들은 무엇입니까?

유형 변수는 클래스, 인터페이스, 메서드 및 컨스트럭터 본문의 유형으로 사용되는 정규화되지 않은 식별자입니다.

아래 JLS의 예를 통해 이해합시다.

class Test {
    <T extends C & I> void test(T t) {  
        t.mI();           // OK
        t.mCPublic();     // OK 
        t.mCProtected();  // OK 
        t.mCPackage();    // OK

    } 
}

는 method의 .T네, , 이거, 이거.T수 . (이예를 할 수 자바의 해 주세요.) , 이이이이이이이이이 yes yes - - - - - - - java java 。

이것으로 답이 완성됩니다.

"유형"이 더 포괄적인 범주입니다.Java의 변수에는 int 및 float와 같은 8가지 "primitive" 유형, 인터페이스 및 클래스의 세 가지 유형이 있습니다.(변수가 아닌) 값은 원시 인스턴스 또는 클래스 인스턴스일 수 있습니다.

"유형"은 '데이터 유형'을 정의합니다.

예: "hello world"는 String --> "hello world"는 String 타입입니다(String은 int와 달리 프리메티브 데이터가 아닙니다).'hello world'는 문자열 클래스 타입이라고 할 수 있습니다.)

10은 int --> 10은 정수 데이터형입니다.

이것은 프로그래밍 용어에 관한 질문입니다.역시 유효하다고 생각되는 답변이 또 있습니다.

Java 타입 시스템은 리플렉션 API에 의해 드러났듯이 클래스와 인터페이스 두 가지 타입이 있으며 이는 전자가 구현한다.이 시스템에서 클래스(인스턴스에 의해 기술되는 요소)Class<T>는 키워드를 입니다.class ★★★★★★★★★★★★★★★★★」interface 배열 및 primitive type, any any any array, any any primitvoid건 다 Type.

그럼 다른 건 다 뭐죠?이 컨텍스트의 클래스는 객체의 기능을 고려할 때 런타임에서 보고 액세스할 수 있는 모든 것이지만, 일반적으로 유형은 컴파일러가 보는 모든 것입니다.이는 파라미터화된 유형일 수 있습니다(예:ArrayList<String> 원인이 .– " " " " " " " " "ArrayList<T>실행 시 동일한 클래스에 매핑하기 위해) 메서드 또는 클래스 선언의 일부로 작성된 범용 유형 매개 변수, 와일드카드 유형 및 이러한 배열.이러한 유형은 매개 변수 유형이나 기본 유형을 통과하는 경우와 같이 유형 삭제가 적용되지 않는 모든 위치에서 API 메서드에 의해 노출됩니다.

유형은 변수나 식 등의 컴파일 시간 엔티티에 관련지어지며 클래스는 메모리 내 객체 등의 런타임엔티티에 관련지어집니다사양 15.5에서 사용되는 언어를 고려합니다. 식과 런타임체크

식 유형이 참조 유형인 경우 참조된 개체의 클래스는...은 an음음음음음음음음음음음음음음음음음음 an an an an an an an 를 사용하여 테스트할 수.instanceof표현식의 런타임 값에 의해 참조되는 객체의 클래스가 있는지 확인하려면...

Programming Languages 실용재단의 저자인 Robert Harper는 다음과 같은 구별을 한다.

객체에 부착될 수 있는 클래스를 정적 분류기인 유형과 신중하게 구분하는 것이 중요하다고 생각합니다.

Java 제네릭은 이 구별이 관련된 한 가지 예입니다.먼저 다음 스니펫을 검토합니다.

String greeting = "Hello" + " " + "world!"; 
  • greetingString
  • "" ( 시간 )"Hello" + " " + "world!"String
  • 된 오브젝트의 " " " " " "Hello world!greetingsString

위의 경우에서 그 구별은 그다지 중요하지 않지만, 다음 토막에서도 같은 추론을 시도해 보자.

List<String> greetings = List.of("Hello World!");
  • greetingsList<String>
  • "" ( 시간 )new ArrayList("Hello World!")List<String>
  • 에서 greetingsImmutableCollections$List1

, 유형마다 을 알 수 .List<String> 클래스 ★★★★★ImmutableCollections$List1가 요소 이 "더 풍부"하다는 을 알고 있는 시간 풍부"을 알 수 String실행 시 유형 삭제로 인해 요소 유형 정보가 손실됩니다.

유형 및 클래스 간의 차이에 대한 또 다른 시연입니다.

jshell> /set feedback verbose
|  Feedback mode: verbose

jshell> List.of("Hi", "Hello")
$1 ==> [Hi, Hello]
|  created scratch variable $1 : List<String>

jshell> List.of(42, -11)
$2 ==> [42, -11]
|  created scratch variable $2 : List<Integer>

jshell> $1.getClass() == $2.getClass()
$3 ==> true
|  created scratch variable $3 : boolean

의 「」에 주의해 .List.of("Hi", "Hello") ★★★★★★★★★★★★★★★★★」List.of(42, -11)는 다르지만 대응하는 인스턴스화된 객체의 클래스는 동일합니다.

언급URL : https://stackoverflow.com/questions/16600750/difference-between-class-and-type