JAva演算子および初期化
7431 ワード
1、自動増加と減少
これらの計算の答えを見てみましょう.
接頭辞式は、計算を先に実行してから値を返します.すなわち、計算された値を返します.接尾辞式はまず値を返し、計算を行い、計算前の値を返します.
2、文字列オペレータ+および+=
文字列の後に
3、論理演算子短絡
まず例を見てみましょう.
以上の演算の出力はいくらですか?
結果から、
4、What goto?
JAvaには
結果から,
5、初期化
初期化とクリーンアップは安全に関わる2つの重要な要素である.JAvaはコンストラクタの概念を導入してクラスメンバー変数の初期化を行う.それは主に2つの問題を解決した:1、各メンバー変数が初期化されることを保証する;2、ネーミングの問題を解決しました.それはクラス名と同じです.パラメータを受け入れないコンストラクタはデフォルトコンストラクタと呼ばれ、無パラメトリックコンストラクタとも呼ばれます.クラスにコンストラクタが定義されていない場合、デフォルトでは非パラメトリックコンストラクタが呼び出され、デフォルトの付与値を使用してメンバー変数ごとに付与されます.また、コンストラクタが存在すると、このデフォルトの非コンストラクタは機能しません.
メソッドのリロード:クラスのメソッドでは、リロードが許可されます.つまり、常に同じメソッド名ですが、デフォルトのパラメータは異なります.例:
リロードを区別する方法:パラメータタイプで区別するには、なぜ戻り値を区別しないのですか?次の例を見てみましょう.
もし私たちが方法を呼び出すならば:
thisキーワード
6、整理:最終処理とゴミ回収
JAvaのゴミ回収器は、不要なオブジェクトが占有するメモリ資源を回収する責任を負うが、特殊なメモリ(newではなく割り当てられた)がある場合、ゴミ回収期間は処理できない.そのため、javaでは
7、ゴミ回収器
一般的なゴミ回収メカニズム:
参照カウント法は、その名の通り、各オブジェクトに1つの参照カウンタを追加し、オブジェクトに1つの参照が追加されると、そのカウンタに1を追加し、その参照が役割ドメインから離れたりnullになったりすると、そのカウンタは1を減少し、カウンタが0になると、そのオブジェクトはクリアされる.この方法は簡単であるが効率が低下し、ループリファレンスが存在する場合、カウンタはクリアされないが、このようなオブジェクトは回収される必要がある.適応的なごみ回収メカニズムの主なメカニズムは、生存するオブジェクトに対して、必ずその静的記憶領域またはスタックに遡ることができる.そのため、静的ストレージ領域やスタックから遍歴し、生存しているすべてのオブジェクトを見つけ、別のスタックにコピーし、コピーされていないものはすべてゴミであり、これらのオブジェクトは自動的に回収することができる.しかし、この方法は効率が低下し、2つのスタックを保有するため、メモリが2倍になり、ゴミが少ないときにコピーすると大きな浪費をもたらすため、この
8、メンバー初期化
上記のコードを見ると、コンパイラが初期化されたと表示されていても、各メンバー変数に初期値を与えることを示します.静的データの初期化は、どのオブジェクトが作成されても、静的データは常に1つの記憶領域しか占めません.
{
int i=1;
int j=1;
System.out.println("i++="+(i++));
System.out.println("++j="+(++j));
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("i--="+(i--));
System.out.println("--j="+(--j));
}
これらの計算の答えを見てみましょう.
i++=1
++j=2
i=2
j=2
i--=2
--j=1
接頭辞式は、計算を先に実行してから値を返します.すなわち、計算された値を返します.接尾辞式はまず値を返し、計算を行い、計算前の値を返します.
2、文字列オペレータ+および+=
{
String s="hello";
System.out.println(s+" "+1+2+3);
System.out.println(s+" "+(1+2+3));
s+=1+2+3;
System.out.println(s);
s+=123;
System.out.println(s);
}
文字列の後に
+
または+=
がデフォルトで文字列変換を実行する方法(toString()
メソッドが暗黙的に呼び出された)3、論理演算子短絡
まず例を見てみましょう.
static boolean test1(int val){
System.out.println("test1("+val+")");
System.out.println("result:"+(val<1));
return val<1;
}
static boolean test2(int val){
System.out.println("test2("+val+")");
System.out.println("result:"+(val<2));
return val<2;
}
static boolean test3(int val){
System.out.println("test3("+val+")");
System.out.println("result:"+(val<2));
return val<2;
}
public static void main(String args[])
{
boolean b=test1(0)&&test2(2)&&test3(3);
System.out.println(b);
}
以上の演算の出力はいくらですか?
test1(0)
result:true
test2(2)
result:false
false
結果から、
test3()
は実行されなかった.これは、&&
とオペレータが、false
の値があると、その後の操作は実行されないためである.式をboolean b=test1(0)&test2(2)&test3(3);
に変更すると、出力結果は次のようになります. test1(0)
result:true
test2(2)
result:false
test3(3)
result:false
false
4、What goto?
JAvaには
goto
が残っていますが、言語では使用されていません.JAvaは、break
およびcontinue
のキーワードによって、いくつかの類似したジャンプ機能を実現することができる.例:public class tesk {
static boolean test1(int val){
System.out.println("test1("+val+")");
System.out.println("result:"+(val<1));
return val<1;
}
static boolean test2(int val){
System.out.println("test2("+val+")");
System.out.println("result:"+(val<2));
return val<2;
}
static boolean test3(int val){
System.out.println("test3("+val+")");
System.out.println("result:"+(val<2));
return val<2;
}
public static void main(String args[])
{
int i=0;
outer:
while (true){
System.out.println("outer while loop");
while (true){
i++;
System.out.println("i="+i);
if(i==1){
System.out.println("continue");
continue ;
}
if(i==3){
System.out.println("continue outer");
continue outer;
}
if(i==5){
System.out.println("break");
break ;
}
if(i==7){
System.out.println("break outer");
break outer;
}
}
}
}
}
----
outer while loop
i=1
continue
i=2
i=3
continue outer
outer while loop
i=4
i=5
break
outer while loop
i=6
i=7
break outer
結果から,
continue
回は最内層サイクルの先頭に後退することが分かった.continue
ラベル付きで、ラベルがある位置に戻り、再びループに入ります.break
は現在のサイクルを中断し、飛び出します.break
はラベル付きで、中断し、ラベルが指すサイクルにジャンプします.ラベルは慎重に使用して、プログラムが分析しにくいため、デバッグしにくいです;5、初期化
初期化とクリーンアップは安全に関わる2つの重要な要素である.JAvaはコンストラクタの概念を導入してクラスメンバー変数の初期化を行う.それは主に2つの問題を解決した:1、各メンバー変数が初期化されることを保証する;2、ネーミングの問題を解決しました.それはクラス名と同じです.パラメータを受け入れないコンストラクタはデフォルトコンストラクタと呼ばれ、無パラメトリックコンストラクタとも呼ばれます.クラスにコンストラクタが定義されていない場合、デフォルトでは非パラメトリックコンストラクタが呼び出され、デフォルトの付与値を使用してメンバー変数ごとに付与されます.また、コンストラクタが存在すると、このデフォルトの非コンストラクタは機能しません.
メソッドのリロード:クラスのメソッドでは、リロードが許可されます.つまり、常に同じメソッド名ですが、デフォルトのパラメータは異なります.例:
public class couse {
private int id;
public couse(){} //
public couse(int id){ // ,
this.id=id;
}
public int getId() { //
return id;
}
public int getId(int index){ //
return id+index;
}
}
リロードを区別する方法:パラメータタイプで区別するには、なぜ戻り値を区別しないのですか?次の例を見てみましょう.
public int getId() { //
return id;
}
public void getId(){
return id;
}
もし私たちが方法を呼び出すならば:
getId()
はどのように呼び出したのがどれなのかを判定して、時には、戻り値は使う必要がなくて、戻り値のタイプを知らないので、jvmの解析ができません;非パラメトリック構築メソッドのデフォルトについては、http://www.jianshu.com/p/20a644b8e8c8 thisキーワード
this
は、コンストラクタで使用され、コンストラクタでコンストラクタを呼び出す場合は、次のようになります.public class couse {
private int id;
private int nums;
public couse(){
this(0,0);
// this.id=12; //
} //
public couse(int id){ // ,
this(id,0);
}
public couse(int id, int nums) {
this.id = id; //this id id
this.nums = nums;
}
}
6、整理:最終処理とゴミ回収
JAvaのゴミ回収器は、不要なオブジェクトが占有するメモリ資源を回収する責任を負うが、特殊なメモリ(newではなく割り当てられた)がある場合、ゴミ回収期間は処理できない.そのため、javaでは
finalize()
メソッドが定義され、メモリがクリーンアップされる条件は以下の通りである.public class Book {
boolean checkout=false;
Book(boolean checkout){
this.checkout=checkout;
}
public void checkin(){
checkout=false;
}
@Override
protected void finalize() throws Throwable {
if(checkout){
System.out.println("error,has book not be checked");
}
//super.finalize();
}
public static void main(String args[]){
Book book=new Book(true);
book.checkin();;
new Book(true);
System.gc();//
}
}
---
error,has book not be checked
7、ゴミ回収器
一般的なゴミ回収メカニズム:
参照カウント法は、その名の通り、各オブジェクトに1つの参照カウンタを追加し、オブジェクトに1つの参照が追加されると、そのカウンタに1を追加し、その参照が役割ドメインから離れたりnullになったりすると、そのカウンタは1を減少し、カウンタが0になると、そのオブジェクトはクリアされる.この方法は簡単であるが効率が低下し、ループリファレンスが存在する場合、カウンタはクリアされないが、このようなオブジェクトは回収される必要がある.適応的なごみ回収メカニズムの主なメカニズムは、生存するオブジェクトに対して、必ずその静的記憶領域またはスタックに遡ることができる.そのため、静的ストレージ領域やスタックから遍歴し、生存しているすべてのオブジェクトを見つけ、別のスタックにコピーし、コピーされていないものはすべてゴミであり、これらのオブジェクトは自動的に回収することができる.しかし、この方法は効率が低下し、2つのスタックを保有するため、メモリが2倍になり、ゴミが少ないときにコピーすると大きな浪費をもたらすため、この
-
の方法は、ゴミが少ないときに別の作業方式に切り替えられた. -
、標識清掃の方式は速度が遅いが、ごみが少ない場合、実行速度が速い. -
は同様の方法を採用し、静的記憶領域とスタックから出発し、生存するオブジェクトに遭遇すると、オブジェクトにマークを与え、このプロセスはゴミ回収動作を行わない.すべてのオブジェクトのマークが完了すると、クリーンアップが開始されますが、クリーンアップ後、スタックスペースは連続していません.8、メンバー初期化
public class couse {
private int id;
public couse(){
System.out.println(id);
id=7;
System.out.println(id);
}
public static void main(String args[]){
couse c=new couse();
}
}
0
7
上記のコードを見ると、コンパイラが初期化されたと表示されていても、各メンバー変数に初期値を与えることを示します.静的データの初期化は、どのオブジェクトが作成されても、静的データは常に1つの記憶領域しか占めません.