জাভাতে একটি অ্যারে কি একটি বস্তু?


94

জাভাতে আমরা নিম্নলিখিত ব্যবহার করে একটি অ্যারে ঘোষণা করতে পারি:

String[] array = new String[10]; 
int size = array.length; 

এর অর্থ কী অ্যারে নিজেই একটি বস্তু? আমি জিজ্ঞাসা করি, কারণ সি ++ এ অ্যারে কেবল পয়েন্টার এবং কোনও পদ্ধতি নেই have


4
না, সি ++ এ একটি অ্যারে হ'ল আরে নয় an
কেরেক এসবি

42
if (array instanceof Object) System.out.println("Yes!")
স্কাফম্যান

6
ওহ, এবং সি ++ এ, অ্যারে এবং পয়েন্টার উভয়ই বস্তু।
আর মার্টিনহো ফার্নান্দেস

4
@ আর। মার্টিনহো ফার্নান্দেস সমস্ত সি ++ অ্যারে প্রকৃতপক্ষে সি ++ অবজেক্টস, তবে সি ++ পয়েন্টার রয়েছে যা সি ++ অবজেক্ট নয়, অর্থাত্ সমস্ত পয়েন্টার যা কোনও মূল্যায়ন মূল্যায়নের ফলাফল। উদাহরণ অন্তর্ভুক্ত &x, p+iএবং new int(42)
ফ্রেডওভারফ্লো 21'88

4
@ skaffman বার্তাটি কঠোরভাবে প্রয়োজনীয় নয়, যেহেতু এটি অন্যথায় সংকলন করবে না।
shmosel

উত্তর:


198

হ্যাঁ.

জাভা ভাষা নির্দিষ্টকরণ বিভাগ 4.3.1 এর সাথে শুরু হয়:

একটি বস্তু একটি শ্রেণীর উদাহরণ বা একটি অ্যারে।


4
এখন অবধি আমি সবসময় ধরে নিয়েছিলাম যে কোনও বস্তু শ্রেণীর উদাহরণের সাথে সমার্থক এবং এটি অ্যারেগুলি একটি বিশেষ ভাষার বৈশিষ্ট্য বা কিছু ছিল।
রুবেন 9922

বিস্তারিত ব্যাখ্যা এখানে দেওয়া হয়েছে: geeksforgeeks.org/array-primitive-type-object-java
গারনেট

60

হ্যাঁ; জাভা ভাষার স্পেসিফিকেশন লিখেছেন :

জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজে অ্যারেগুলি অবজেক্টস (.34.3.1), গতিশীলভাবে তৈরি করা হয় এবং অবজেক্ট (§4.3.2) টাইপের ভেরিয়েবলগুলিতে নির্ধারিত হতে পারে। শ্রেণীর অবজেক্টের সমস্ত পদ্ধতি কোনও অ্যারেতে চালিত হতে পারে।


অ্যারে যদি একটি বস্তু হয়, তার মানে কি এটি কোনও শ্রেণীর উদাহরণ নয়? যদি তা হয় তবে আমি কি সেই ক্লাসটি বাড়িয়ে দিতে পারি?
ওয়ান টু থ্রি

9
না, এটি করে না: জাভা স্পেস লিখেছেন : "একটি বস্তু একটি শ্রেণীর উদাহরণ বা একটি অ্যারে। (.15.10)। " এবং না, আপনি একটি অ্যারের প্রসারিত করতে পারবেন না, কারণ বর্ধিত ধারাটিতে অবশ্যই ক্লাসটাইপ বৈশিষ্ট্য থাকতে হবে
মেরিটন

36

ঠিক আছে, আসুন জাভা জিজ্ঞাসা করি!

public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println(args instanceof Object);
    int[] someIntegers = new int[] {42};
    System.out.println(someIntegers instanceof Object);
  }
}

আউটপুট:

true
true

4
আপনি int[] someIntegers = {42};একই ফলাফল হিসাবে ঘোষণা করতে পারেন ।
হলগার

7

হ্যাঁ, এটি জাভাতে একটি বিষয়।

এছাড়াও মনে রাখবেন যে আপনি যখন array.lengthকোনও পদ্ধতি চালাচ্ছেন না কেবল অ্যারের lengthক্ষেত্রটি অ্যাক্সেস করছেন । অ্যারে ক্লাসে প্রচুর স্ট্যাটিক পদ্ধতি রয়েছে ।


3

এটি লক্ষ করা গুরুত্বপূর্ণ যে জাভাতে অ্যারেগুলির নিজস্ব বাইট কোড রয়েছে যা তারা বস্তুর সাথে ভাগ করে না। এগুলি অবশ্যই অবজেক্টস, তবে নিম্ন স্তরে কিছুটা ভিন্নভাবে পরিচালিত হয়।


2

আমি উত্তরটি হ্যাঁ বলব, যদিও আমি এটি যুক্ত করতে পারি, কঠোরভাবে বলতে গেলে, একটি অ্যারে সি ++ তেও একটি অবজেক্ট। বর্তমান স্ট্যান্ডার্ড (এফডিআইএস) এর §1.8 [অন্তর্ভুক্তকরণ বিষয়ক] থেকে:

একটি অবজেক্ট স্টোরেজ একটি অঞ্চল।


2

আমি কেবল যুক্ত করতে চাই যে অ্যারেগুলির প্রতিবিম্ব API- java.lang.reflect.Array তে একটি প্রতিনিধিত্ব রয়েছে ।


1

জাভাতে প্রতিটি অ্যারে হ'ল একটি অবজেক্ট প্রাক্তন [] a = নতুন ইনট [2]; নতুন কোনও অবজেক্ট তৈরি করতে ব্যবহৃত হয় এবং এটি একটি বস্তু হিসাবে আমরা কেবল a.getClass () ব্যবহার করে বর্গের নামটি পরীক্ষা করতে পারি get getName ();


1
  1. একটি অ্যারে শ্রেণি গাছের তালিকাভুক্ত কোনও শ্রেণীর উদাহরণ নয়, তবে প্রতিটি অ্যারে একটি বস্তু এবং সরাসরি উত্তরাধিকার সূত্রে প্রাপ্ত java.util.Object
(new int[1]) instanceof Object   // -> evaluates to true
  1. ক্লাসটি java.util.Arraysএকটি সহায়ক শ্রেণি, এবং অ্যারেগুলি এই শ্রেণীর উদাহরণ নয়।
(new int[1]) instanceof java.util.Arrays    // -> compile error
  1. ক্লাসটি java.lang.reflect.Arrayএকটি সহায়ক শ্রেণি, এবং অ্যারেগুলি এই শ্রেণীর উদাহরণ নয়।
(new int[1]) instanceof java.lang.reflect.Array    // -> compile error
  1. অ্যারে এর সমস্ত সদস্যের উত্তরাধিকার সূত্রে প্রাপ্ত java.lang.Object

  2. অ্যারেগুলি clone()উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিটিকে ওভাররাইড করে Object

  3. অ্যারে ক্ষেত্রটি বাস্তবায়ন করে length, যাতে অ্যারের উপাদানগুলির সংখ্যা থাকে। দৈর্ঘ্য ধনাত্মক বা শূন্য হতে পারে। এটা publicএবং final

  4. অ্যারে ইন্টারফেস প্রয়োগ করে Cloneableএবং java.io.Serializable

8 এ। অ্যারে দ্বারা সমর্থিত Class<T>। আপনি Class<T>অ্যারের উদাহরণ থেকে উদাহরণটি পুনরুদ্ধার করতে পারেন

(new int[2]).getClass()

বা একটি অ্যারে টাইপ থেকে

int[].class

8 বি। java.lang.Class<T>আপনার কোডে প্রতিটি আলাদা অ্যারে টাইপের জন্য একটি অনন্য প্রতিবিম্ব শ্রেণীর উদাহরণ (যেমন একটি উদাহরণ ) তৈরি করা হয়েছে। উদাহরণ

int[].class.getCanonicalName()    //  -> "int[]"
String[].class.getCanonicalName() //  -> "java.lang.String[]" /
  1. পুনরাবৃত্তি করতে: অ্যারেগুলি বস্তুগত হয় তবে শ্রেণিকক্ষে কোনও শ্রেণীর উদাহরণ নয়।

রেফারেন্স

জাভা স্পেসিফিকেশন বিভাগ থেকে 4.3.1 অবজেক্ট

  • একটি বস্তু একটি শ্রেণীর উদাহরণ বা একটি অ্যারে।

  • একটি শ্রেণীর উদাহরণ স্পষ্টরূপে একটি শ্রেণীর উদাহরণ সৃষ্টি এক্সপ্রেশন দ্বারা তৈরি করা হয়।

  • একটি অ্যারে স্পষ্টভাবে একটি অ্যারের সৃষ্টি এক্সপ্রেশন দ্বারা তৈরি করা হয়।

Java.util.Ararays থেকে

  • এই শ্রেণিতে অ্যারে হেরফেরের জন্য বিভিন্ন পদ্ধতি রয়েছে (যেমন বাছাই এবং অনুসন্ধান)

Java.lang.reflect.Array থেকে

  • অ্যারে শ্রেণিটি জাভা অ্যারেগুলিকে গতিশীলভাবে তৈরি এবং অ্যাক্সেসের জন্য স্থিতিশীল পদ্ধতি সরবরাহ করে।

থেকে অনুচ্ছেদ 10.1 অবজেক্টস

  • একটি অ্যারের টাইপের সরাসরি সুপারক্লাস হয় Object

  • প্রতিটি অ্যারে টাইপ ইন্টারফেস প্রয়োগ করে Cloneableএবং java.io.Serializable

বিভাগ থেকে 10.7 অ্যারে সদস্যদের

একটি অ্যারের ধরণের সদস্যরা নিম্নলিখিত সমস্ত কিছু রয়েছে:

  • সর্বজনীন চূড়ান্ত ক্ষেত্র length, যাতে অ্যারের উপাদানগুলির সংখ্যা থাকে। দৈর্ঘ্য ধনাত্মক বা শূন্য হতে পারে।

  • সর্বজনীন পদ্ধতি clone, যা শ্রেণিতে একই নামের পদ্ধতিটিকে ওভাররাইড করে Objectএবং কোনও পরীক্ষিত ব্যতিক্রম ছুঁড়ে না দেয়। এর রিটার্ন টাইপ cloneএকটি অ্যারের ধরনের পদ্ধতি T[]রয়েছে T[]

  • একটি বহুমাত্রিক অ্যারের ক্লোনটি অগভীর, যা বলে যে এটি কেবলমাত্র একটি নতুন অ্যারে তৈরি করে। সুবারে ভাগ করা আছে।

  • ক্লাস অবজেক্ট থেকে প্রাপ্ত সমস্ত সদস্য; অবজেক্টের একমাত্র পদ্ধতি যা উত্তরাধিকার সূত্রে প্রাপ্ত হয় না তা হ'ল তার ক্লোন পদ্ধতি।


1

যে কোনও কিছুর অ্যারে বস্তু। কেউ যেমন পদ্ধতিগুলি কল করতে পারে equals, hashcodeইত্যাদি:

final int[] i = {};
i.equals(new int[] {1});  // false
i.hashcode();

স্থানীয় পদ্ধতিতে কেউ কল করতে পারে না।


0

কোড স্নিপেট এবং আউটপুট নীচে পর্যবেক্ষণ করুন।

public class Tester {
int a[];
public static void main(String[] args) {
    System.out.println(new Tester().a);// null
    System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10)
}

}

স্পষ্টভাবে অ্যারে একটি অবজেক্ট হিসাবে বিবেচিত হয়।


0

হ্যাঁ, ডকস তাই বলে:

একটি অ্যারে হ'ল একটি ধারক বস্তু যা একক ধরণের মানের একটি নির্দিষ্ট সংখ্যক ধারণ করে।

নোট করুন যে অ্যারে প্রিমিটিভ প্রকারের ধরণের (যেমন int[]বা char[]) সেগুলিও বস্তু।

প্রতিটি অ্যারে সরাসরি প্রসারিত java.lang.Objectএবং ইন্টারফেস প্রয়োগ করে javs.lang.Cloneableএবং java.io.Serializable। একটি অ্যারের রানটাইম টাইপ স্বাক্ষর [Lসঙ্গে সঙ্গে উপাদান উপাদান (যেমন [Ljava.lang.String) এর শ্রেণীর নাম অনুসরণ করা হয় । আদিম ধরণের অ্যারেগুলিতে নিম্নলিখিত রানটাইম স্বাক্ষর রয়েছে:

  • [Bজন্য byte[];
  • [Sজন্য short[];
  • [Iজন্য int[];
  • [Jজন্য long[];
  • [Fজন্য float[];
  • [Dজন্য double[];
  • [Cজন্য char[]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.