C、C++の経験はけっこう長いのですが、javaは初心者です。
初期値を持ったクラスの配列はC++だとたとえば、
class User {
char * name;
int user_id;
};
と宣言しておいて、
User user[] = {
{"moritan2", 12345},
{"moritan3", 56789},
};
と書けますよね。これをjavaでやるにはどうすればいいのでしょうか?
javaで
class User {
String name;
int user_id;
};
と宣言しておいて、
User user[] = {
{"moritan2", 12345},
{"moritan3", 56789},
};
とやってもコンパイル時にエラーになってしまいます。
No.3ベストアンサー
- 回答日時:
JAVAでは、配列もオブジェクトなので、
Class cls[] とは書きません。
Class[] cls と書きます("Classオブジェクトの配列"というオブジェクトの名前がcls)
シンタックスシュガーなので、Class cls[] と書いてもエラーにはなりませんが、
クラス名側に[]を記述すると覚えましょう。
なので、この状態だと配列の名前を定義しただけのものになってしまい、実体がありません。
実体定義は newを使います(C++と同じ)
さらに、JAVAはオブジェクト指向言語で、Userクラスは独立したオブジェクトとして所持されますので、メソッド経由でアクセスする必要があります。
メソッドが必要ないのなら、コンストラクタで初期設定することになります。
というわけで、C++でできていることは多分JAVAではできません。
似たような記述をしようとしたら、こうなるはずです。
/* Userクラスはこんな風に */
class User{
String uname;
int id;
// デフォルトコンストラクタ
User(){
uname = null;
id = -1;
}
// 値を設定するコンストラクタ
User(String uname,int id){
this.uname = uname;
this.id = id;
}
}
/* 使うときにはこんな風に */
User[] usr = new User[]{
new User("moritan2",12345),
new User("moritan3",56789)
};
※C++っぽい初期化が本当はできるのかもしれないけども、私は知らない(^-^;
※いいのか?>私
No.4
- 回答日時:
そのコードはC++の構造体とクラスの実装が基本的に同じである事と、
C++ではスタック上にインスタンスを作れる特徴を最大限に活かしたC++でしかありえないコードです。
※クラスとしては使い方間違ってます。
Javaには構造体はありませんし、インスタンスはヒープにしか作れないので同じコードは書けないと思います。
コンストラクタに初期値を与える形で実装するのが真っ当な方法だと思います。
No.2
- 回答日時:
私も Java には詳しくないので,間違っているかもしれませんが…
Java の変数は,基本データ型 (数値型,boolean 型) 以外はすべてポインタです.
(言語仕様上「ポインタ」と呼ぶかどうかは議論があるようですが,
少なくとも VM の事実上の実装はそうですし,VM の仕様書でも
「ポインタ」という言葉が使われています.
The Java(TM) Virtual Machine Specification
CHAPTER 2 Java Programming Language Concepts
2.4.6 Reference Types, Objects, and Reference Values)
したがって配列型も,その配列要素 (非基本データ型) も,
実際にはポインタなので C++ 風に書けば次のようになります.
Java:User [] user;
C++:User **user;
あとは moritan2 さんならおわかりでしょう.
┌なお,配列要素が基本データ型や文字列の場合は,C/C++ の静的初期化と同様の構文が
│使えるようです.(とはいっても実際には動的に初期化しているはずですが.)
↓
とほほのJava入門 → 変数 → 配列
http://www.tohoho-web.com/java/variable.htm#array
ご回答ありがとうございます。
私が知りたいのは、C++の例のような、初期化されたデーターを持つ、クラスをどうやって記述するかです。配列ならできるのは分かります。実際クラスではなく、配列で無理やりやったところもあります。しかし、質問のようのような文字列と、値を持ったクラスの初期値を記述する方法がわかりません。
なお、「それはjavaでは無理です」というのも立派なご回答になります。それなら別の方法を考えます。現在無理なのかできるのかがわからないのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- その他(プログラミング・Web制作) Arduinoに関する質問 4 2023/08/07 21:19
- JavaScript Json のキーと値の出力の違いについて 2 2022/06/14 20:22
- PHP php ログイン 1 2022/11/01 00:24
- UNIX・Linux コマンドプロンプトでのユーザーのサインイン時間設定について 1 2022/08/09 09:09
- Windows 10 コマンドプロンプトでのユーザーのサインイン時間設定について 1 2022/08/09 20:43
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- その他(コンピューター・テクノロジー) (コマンドプロンプト)コマンドプロンプトのactiveについて 2 2022/07/16 17:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列をセッションに割り当てた後で
-
この警告はどうすれば?
-
多次元配列はなぜ必要???
-
ArrayListからBean配列に値をセ...
-
半角カナの判別方法
-
配列の中に複数存在する数がい...
-
JavaBeansの配列の値取得方法に...
-
インスタンス?new?オブジェクト...
-
大きさがわからない配列
-
JavaでC言語のポインタ演算風な...
-
[Ljava.lang.Stringってなんですか
-
Java 配列の問題です。 写真の...
-
いくつかのchar型の配列に入っ...
-
javaで大容量テキストファイル...
-
n番目に大きな値を探索する
-
「シンボルを見つけれません」...
-
Java・配列の問題です。 int 「...
-
javamailで複数人にメールを送...
-
初期値を持ったクラスの配列を...
-
『args[]』とは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
[Ljava.lang.Stringってなんですか
-
この警告はどうすれば?
-
Java配列の問題を教えてくださ...
-
配列の中に複数存在する数がい...
-
配列で、値の入っている要素数...
-
java
-
『args[]』とは?
-
javaで大容量テキストファイル...
-
C#で動的配列Listの中身をListB...
-
csvファイルを2次元配列に格納
-
Javaで文字を漢字であるか否か...
-
フローチャート
-
javaについて
-
【C#】ハッシュテーブル(連想...
-
セッションを使ったint型の値の...
-
C言語でunsigned char配列を連...
-
配列について
-
n番目に大きな値を探索する
-
cloneメソッドについて (java)
おすすめ情報