• ベストアンサー

定数宣言

deadlockの回答

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.6

>メモリ領域確保してしまうためか、なるべく、staticは使用しないほうがいいと、聞いたことがあります。 >これを踏まえた上での、定数へのstatic修飾子を付加する理由がわかりませんでした。 性質だけを説明されることが多いので勘違いしやすいですが、先にstatic宣言の意味を考えましょう。 staticの意味は、「クラスに属する」です。定数としての意味はどちらかというとfinalの方が強いですね。なので、「クラスに属する、変更されない値」は、「static final」なのです。 メモリやパフォーマンス、使い勝手の都合 云々はstaticにするかどうかには本来関係ありません。 質問にあるSQL文の定数は、パフォーマンスやメモリに関しては一長一短です。staticがあってもなくてもこれといった差は出てこないでしょう。「書いた人は、クラスに属するものとして解釈したか、他から参照しやすくするためにstaticにした」程度に思っていればいいと思います。 >staticは使用しないほうがいい ちょっと補足すると、メモリやパフォーマンスも単純ではないので  ・大抵の場合、パフォーマンスに差が出ない(逆に悪化することもある)  ・ちゃんと理解できていない人が使うと、弊害の方が大きいことが多い 等の理由から、最初のうちは「安易にstaticにするな」と教えることも多いみたいです。

nuridayo
質問者

お礼

回答ありがとうございます。 そうですね~・・。 業務でstaticを使用するプログラムを開発する時には、 上の人に承諾を得たいと思います。

関連するQ&A

  • 定数につけるべき修飾子は?

    定数につけるべき修飾子はなんでしょうか? 経験上「static final」としていることが圧倒的に多いです。 どんなときも必ずそうする意味はあるのでしょうか? 私には、考慮不足でとりあえず「static final」としているだけで 実際には場合によって使い分けたほうがいいのではないだろうかと思っています。 しかしあまりにも「static final」としている数が多いので 何か特別な意味があるのでは無いかと思っています。 例えば ・24時間365日稼動のシステム ・1日1回バッチ処理を行なう ・そのバッチ処理の中だけで使用する定数 こういう場合にはメモリ上の展開を考慮すると 「static final」よりも「final」にした方がいいように思えます。 でもそうせずに「static final」としていることが多いです。 定数の修飾子は、その使われ方・場合によって使い分けるべきでしょうか? それともどんなときも「static final」とすべきでしょうか? どちらであるか(もしくはそれ以外)とその理由を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 数値の定数を付ける時

    数値の定数名を付ける時、悩みます。 String[]の入力数の状態により処理が異なるとき この書き方では格好悪いです。 private static final int ZERO = 0; private static final int ONE = 1; private static final int TWO = 2; 上記に変わるもの private static final int NOT_VALUE = 0; private static final int ●●● = 1; private static final int △△△ = 2; ●●●と△△△に適切な定数名が思いつきません。 どういう風に考えたらいいのでしょうか?

    • ベストアンサー
    • Java
  • システムプロパティのキーの定数について

    * 暇なときにでも システムプロパティのキーの定数について これは、定数にする必要があるのでしょうか? "user.dir"は、javaで用意されているシステムプロパティのキーで, もともとこの形で用意されているのにも関わらず、定数にする必要はあるのでしょうか? (1) private final static String USER_DIR = "user.dir"; private final static String CURRENT_DIRECTORY = System.getProperty(USER_DIR); (2) private final static String CURRENT_DIRECTORY = System.getProperty("user.dir"); (1)、(2)でどちらがいいのかわかりません。 クオリティが高い書き方は、やはり(1)の書き方なのでしょうか?

    • ベストアンサー
    • Java
  • [WHS]定数宣言の際にリテラル文字列をコード内で改行するには?

    はじめまして。 WindowsShellScrpitで以下のように定数を宣言しようとして コンパイルエラーとなりました。 Const SQL = "SELECT カラム1," +_               "カラム2," +_               "カラム3" +_          "FROM テーブルA;" 実物のSQLはかなり長いので、どうしてもコード内で 改行せざるを得ません。 おそらく文字列を連結させているのが原因だとは思うのですが、 何か方法はないでしょうか? 知っている方がいましたら教えてください。 よろしくお願いします。

  • 定数について

    定数の使用の仕方について悩んでいます。 インターフェースに定数を宣言して、 それを実装(Implements)し使う方法と、 クラスで定数を宣言して、 それを参照して使う方法とで悩んでいます。 どちらもstaticな定数を使用しているのですが、 パフォーマンス面での違いとかはないのでしょうか? もし、定数の取り扱いについてほかにいい方法があるのであれば、 教えてほしいです。 お願いします。

  • JAVAでの定数追加

    定数1~定数100が定義されておりクラス(メソッド)内に定数を使用したif文が複数存在するとします。 ※if文の条件は定数(文字列)のstartWithによる比較 定数101を追加する場合に定数定義+if文の条件を追加しなければならないのですが、 定数定義のみで対応できるようにするにはどうすればよいでしょうか? 以下を考えてみましたが(不可もありますが・・・)もっと良い方法はありますでしょうか? 案1)×   Mapを使用。getする際にstartWithであるためできないことが判明。(equalsの比較なら可能)   private final static Map map = new HashMap(){    put("a1","");    put("a2","");       :    put("a101","");   } 案2)△  ArrayListを使用。   private final static List list = new ArrayList(){    add("a1");      :    add("a101");   }  メソッド内でfor文を使用するため性能的に落ちる?  for(int i=0;i<list.size();i++){   String str = "aaa";   if(list.get(i).startWith(aaa){     処理; } } 案3)正規表現で実施。定数値がさまざまなため断念。 例) private final static String a1 = "a1"; private final static String a2 = "a2";        : private final static String a100 = "a2"; public void methodA(){  String str = "aaa";  if(a1.startWith(str) || a2.startWith(str) || ・・・ a100.startWith(str)){   処理;  }   : } public void methodB(){  String str = "aaa";  if(a1.startWith(str) || a2.startWith(str) || ・・・ a30.startWith(str)){   処理;  }   : }

    • ベストアンサー
    • Java
  • 宣言のタイミング

    質問させてください。 Servletの中で、他クラスからの参照のできる static final String について何ですが、 例えば、 public class goo extends HttpServlet{ static final String CODE = "text/html;charset=Shift_JIS"; public void doPost(HttpServletRequest req,HttpServletResponse res) thows servletException,IOException{ res.setContentType(CODE); など、実際の値を入れるやり方は、分かるのですが、 Servlet内で、何らかの処理後の String を static final String 宣言をするには、どうしたらよいのでしょうか? 例えば、 public class goo extends HttpServlet{ public void doPost(HttpServletRequest req,HttpServletResponse res) thows servletException,IOException{ String para = req.getParameter(para); String param = new String(para.getBytes("8859_1"),"JISAutoDetect"); 等の時に、paramを static final String にしたいのです。 自分でも文法が出来てないとは思いますが、よろしくお願いします。

    • ベストアンサー
    • Java
  • C#で、定数をフラグ(if文)によって切り替え

    C#ですが、カテゴリが無いのでC/C++のカテゴリに入れています。 基本的に変数(定数)の宣言は1回しか出来ないとわかっていますが、 以下の様な定義を何とかできないでしょうか? if (true) { public static readonly string Flag = "True"; } else { public static readonly string Flag = "False"; } これって、変数を使って、以下のようにするしか無いですよね…… public static string Flag = ""; if (true) { Flag = "True"; } else { Flag = "False"; } もしくは、変数で宣言した物を、途中で定数にする事は可能でしょうか? 目的としては、グローバルで宣言した変数を別の関数で変更されないようにしたいだけなのですが。 何か、手があれば教えてください。

  • VB6で外部から静的アクセスが可能な定数

    VB6で(正確にはExcelVBAですが)ちょっとプログラムを組んでいるのですが、 クラス内で、外部からアクセス可能な静的定数を宣言を行いたいのですが、 宣言方法が分からず止まってしまいました。 出来たかどうかも記憶にありません・・・。調べても分からず;; Static Const var As String = "hoge" みたいな事をしたいんですが、やり方が分かる方ご教示下さい。

  • MS SQL Serverでのクエリ文

    MS SQL2005 の”SQL Server Management Studio”を使って下のクエリーを実行します。 例1は実行できますが、例2は実行できません。 なぜでしょうか? 例1 select * from [test].[dbo].[test_table] 例2 select * from ('[test].[dbo]' + '.[test_table]')