オブジェクト向け練習1

12587 ワード

1、運転結果を書き出す
 public class Demo {
 public static void func()//①{
  try{
   throw new Exception();//③
  }//②
  finally{
   System.out.println("B");
  }
  
 }
 public static void main(String[] args) {
  try{
   func();
   System.out.println("A");
  }catch(Exception e){
   System.out.println("C");
  }
  System.out.println("D");
 }
}

コンパイルに失敗し、コンパイル時に異常が投げ出されたが、処理されなかった.1 func()にthrows宣言もcatch②またはtry catch③処理もありません.および3つの処理方式.
1、1 func()でthrowsを実行した場合、結果は?
 public class Demo {
 public static void func() throws Exception {
  try {
   throw new Exception();
  }finally {
   System.out.println("B");
  }
 }
 public static void main(String[] args) {
  try {
   func();
   System.out.println("A");
  } catch (Exception e) {
   System.out.println("C");
  }
  System.out.println("D");
 }
}

funcは異常を投げ出し,呼び出し者に投げつける.finallyは必ず実行するので、B、異常があるのでSystem.out.println("A");実行されません.呼び出し者は異常を処理するので,C,最終D.実行結果:
B
C
D

2、②catch
public class Demo {
 public static void func()  {
  try {
   throw new Exception();
  } catch (Exception e) {
   System.out.println("E");
  }finally {
   System.out.println("B");
  }
 }
 public static void main(String[] args) {
  try {
   func();
   System.out.println("A");
  } catch (Exception e) {
   System.out.println("C");
  }
  System.out.println("D");
 }
}

funcで処理が行われているので、EB、呼び出し元はこれ以上処理しなくても良いのでAD
実行結果:
E
B
A
D

3、throw new Exception();try catchで包む
public class Demo{
 public static void func()  {
  try {
   try {
    throw new Exception();
   } catch (Exception e) {
    System.out.println("E");
   }
  }finally {
   System.out.println("B");
  }
 }
 public static void main(String[] args) {
  try {
   func();
   System.out.println("A");
  } catch (Exception e) {
   System.out.println("C");
  }
  System.out.println("D");
 }
}

異常を処理したのでEB、呼び出し先は処理しないのでAD
実行結果:
E
B
A
D

 ======================================================================
2、コード実行結果を書き出す:
class Test000
{
 Test000()
 {
  System.out.println("Test");
 }
}
class Demo extends Test000
{
 Demo()
 {
  System.out.println("Demo");
 }
 public static void main(String[] args)
 {
  new Demo();
  new Test000();
 }
}

サブクラスコンストラクション関数Demo()を実行すると、super()メソッドが呼び出されます.子類の実例化過程を調べる.
実行結果:
Test
Demo
Test

====================================================================
3、プログラムの結果を書く:
 interface A{}  
class B implements A
{
 public String func()
 {
  return "func";
 }
}
class Demo
{
 public static void main(String[] args)
 {
  A a=new B();
  System.out.println(a.func());
 }
}

インタフェースAにfuncメソッドが定義されていないため、コンパイルに失敗しました.
 
まとめ:マルチステートコンパイルは左を見て、実行は右を見てください.
=======================================================================
4.プログラム結果を書く
class Fu
{
 boolean show(char a)
 {
  System.out.println(a);
  return true;
 }
}
class Demo extends Fu
{
 public static void main(String[] args)
 {
  int i=0;
  Fu f=new Demo();
  Demo d=new Demo();
  for(f.show('A'); f.show('B')&&(i<2);f.show('C'))
  {
   i++;
   d.show('D');
  } 
 }
 boolean show(char a)
 {
  System.out.println(a);
  return false;
 }
}

実行結果:
A
B

for(初期値付与;判断条件;増減量付与)
{
文;
}
循環運転順序:初期値の付与->判断条件->文->増減量の付与.
f.show('A');実行結果は「A」と印刷されます.f.show('B')の実行結果は「B」を印刷し、f.show('B')の値はfalseであるため、f.show('B')&&(i<2);条件が成立せず、サイクルが終了し、DとCが運転できない.
=======================================================================
5.プログラム結果を書く
interface A{}
class B implements A
{
 public String test()
 {
  return "yes";
 }
}
class Demo
{
 static A get()
 {
  return new B();
 }
 public static void main(String[] args)
 {
  A a=get();
  System.out.println(a.test());
 }
}

A a=get() = A a=new B();
コンパイルに失敗しました.Aインタフェースにはtest()メソッドが定義されていません.コンパイルは左を見て、実行は右を見てください.
=====================================================================
6.プログラム結果を書き出す:
class Super
{
 int i=0;
 public Super(String a)
 {
  System.out.println("A");
  i=1; 
 }
 public Super()
 {
  System.out.println("B");
  i+=2;
 }
}
class Demo extends Super
{
 public Demo(String a)
 {
  //super();
  System.out.println("C");
  i=5;    
 }
 public static void main(String[] args)
 {
  int i=4;
  Super d=new Demo("D");
  System.out.println(d.i);
 }
}

int i=4;ローカル変数.Super d=new Demo("D");サブクラスはまずDemoの構造方法を実行する、super()を実行し、Bを印刷する.このとき、サブクラスは親変数iを呼び出し、値は0から2に変わり、Systemを実行する.out.println("C");,Cを印刷します.iこの場合は5です.
実行結果:
B
C
5

====================================================================
 7、
interface Inter
{
 void show(int a,int b);
 void func();
}
class Demo
{
 public static void main(String[] args)
 {
  // ; , 
 }
}
Inter in = new Inter()
  {
   public void show(int a,int b)
   {
   
   }
   public void func()
   {
   
   }
  };
  in.show(4,5);
  in.func();

================================================================
8.プログラム結果を書く
class TD
{
 int y=6;
 class Inner
 {
  static int y=3;  
  void show()
  {
   System.out.println(y);
  }
 }
}
class TC
{
 public static void main(String[] args)
 {
  TD.Inner ti=new TD().new Inner();
  ti.show();
 }
}

コンパイルに失敗し、非静的内部クラスでは静的変数を定義できません.内部クラスが静的メンバーを定義している場合は、内部クラスを静的に修飾する必要があります.
==================================================================
9.問題を選択し、誤った答えが間違っている原因を書き出し、単行注釈で書く.
class Demo
{
  int show(int a,int b){return 0;}
}

次の関数はDemoのサブクラスに存在します.A.public int show(int a,int b){return 0;}//はい、上書きできます.B.private int show(int a,int b){return 0;}//いいえ、権限が足りません.C.private int show(int a,long b){return 0;}//はい、親クラスとは関数ではありません.上書きされていません.重荷に相当します.D.public short show(int a,int b){return 0;}//指定した関数と同じクラス、または子の親クラスには表示されないため、できません.E.static int show(int a,int b){return 0;}//いいえ、静的は静的のみを上書きできます. 
==========================================================
10.thisキーワードの意味を書き出し、finalにはどのような特徴がありますか?this:このクラスのオブジェクトを表し、どのオブジェクトがthisが存在する関数を呼び出すか、thisはどのオブジェクトを表します.
final:1、修飾クラス、変数(メンバー変数、静的変数、局所変数)、関数.2,修飾されたクラスは継承できない.3,修飾された関数は上書きできない.4,修飾された変数は定数であり,1回のみ付与できる.
==========================================================
11.プログラム結果を書き出す:
class Fu
{
 int num=4;
 void show()
 {
  System.out.println("showFu");
 }
}
class Zi extends Fu
{
 int num=5;
 void show()
 {
  System.out.println("showZi");
 }
}
class T
{
 public static void main(String[] args)
 {
  Fu f=new Zi();
  Zi z=new Zi();
  System.out.println(f.num); 
  System.out.println(z.num); 
  f.show(); 
  z.show();  
 }
}

変数に上書きはありません.
結果:
4
5
showZi
showZi

===============================================================
12補完コード
interface A
{
 void show();
}
interface B
{
 void add(int a,int b);
}
class C implements A,B
{
 // 
 
}
class D
{
 public static void main(String[] args)
 {
  C c=new C();
  c.add(4,2);
  c.show();// 。
 }
}

まずインタフェースの上書き方法
public void add(int a,int b){
}
public void show(){
}

方法1:
private int a,b;
 public void add(int a,int b){
  this.a=a;
  this.b=b;
 }
 public void show(){
  System.out.println(a+b);
 }

方法2:
private int sum;
 public void add(int a,int b){
  sum=a+b;
 }
 public void show(){
  System.out.println(sum);
 }

==============================================================
13.プログラム結果の書き出し
class Demo
{
 public static void main(String[] args)
 {
  try
  {
   showExce(); 
   System.out.println("A");
  }
  catch(Exception e)
  {
   System.out.println("B");
  }
  finally
  {
   System.out.println("C");
  }
  System.out.println("D");
 }
 public static void showExce()throws Exception
 {
  throw new Exception();
 }
}

結果:
B
C
D

try  {   showExce();    System.out.println("A");}showExce()を実行します.の場合、異常を投げ出し、そのコードブロックを中断し、catchを実行する
===========================================================
14.プログラム結果の書き出し
class Super
{
 int i=0; 
 public Super(String s)
 {
  i=1; 
 }
}
class Demo extends Super
{
 public Demo(String s)
 {
  
  i=2;   
 }
 public static void main(String[] args)
 {
  Demo d=new Demo("yes");
  System.out.println(d.i);
 }
}

コンパイルに失敗し、親に空のパラメータ構造関数は存在しません.または、サブクラスでsuper指定によって親クラス構築関数を呼び出すこともできます.
==================================================================
15.プログラム結果の書き出し
class Super
{
 public int get(){return 4;}
}
class Demo15 extends Super
{
 public long get(){return 5;}   
 public static void main(String[] args)
 {
  Super s=new Demo15();
  System.out.println(s.get());
 }
}

コンパイルに失敗しました.
public int get(){return 4;}
public long get(){return 5;}
上書きではありません.子の親には同じ名前の関数があります.
==============================================================
16.プログラム結果の書き出し
class Demo
{ 
 public static void func()
 {
  try
  {
   throw  new Exception();
   System.out.println("A");
  }
  catch(Exception e)
  {
   System.out.println("B");
  }
 }
 public static void main(String[] args)
 {
  try
  {
   func();
  }
  catch(Exception e)
  {
   System.out.println("C");
  }
  System.out.println("D");
 }
}

コンパイルに失敗しました.throwは単独では存在しません.そうしないと、次の文を定義したり、実行したりできません.
(以下20題目
if(i==1)
    throw new Exception();   
    output+="1";

このときのthrowは単独ではなく、次の文が実行される可能性があります.)
システムを取り除くout.println("A");コンパイルはパスでき、結果は;
B
D

====================================================================17.
class Demo
{ 
 public void func()
 {
  // 1;
  
 }
 class Inner{}
 public static void main(String[] args)
 {
  Demo d=new Demo();
  //  2 
 }
}

A.位置1にnew Inner()を書く.B.位置2にnew Inner()を書く.C.位置2にnew d.Inner()を書く.D.位置2にnew Demoを書く.Inner();
A.位置1にnew Inner();//okB.位置2にnew Inner();//いいえ、主関数は静的ですから.innerにアクセスするにはstatic修飾が必要です.C.位置2にnew d.Inner();//エラー、フォーマットエラー. new new Demo().Inner();D.位置2にnew Demoを書く.Inner();//エラーです.innerは静的ではありませんから.
====================================================================18.プログラムの結果を書き出す
class Exc0 extends Exception{}
class Exc1 extends Exc0{}
class Demo
{
 public static void main(String[] args)
 {
  try
  {
   throw new Exc1();
  }  
  catch(Exception e)  
  {
   System.out.println("Exception");
  }
  catch(Exc0 e)
  {
   System.out.println("Exc0");
  }
 }
}

コンパイルに失敗しました.複数のcatchの場合、親のcatchは下に置く必要があります.
修正後の運転結果:
Exc0

====================================================================19.補完コード
interface Test
{
 void func();
}
class Demo
{
 public static void main(String[] args)
 {
  // ;( )
  
    
 }
 void show(Test t)
 {
  t.func();
 }
}

mainでshowメソッドを呼び出すのは、mainが静的メソッドであるため、直接showを呼び出すことはできないのでnew Demo()を用いる.show();を呼び出します.
Testクラスに転送されます.匿名の内部クラスで、new Test(){public void func();
new Demo().show(new Test(){
    public void func();
   });

====================================================================20.プログラムの結果を書き出す
class Test
{ 
 public static String output=""; 
 public static void foo(int i)
 { 
  try
  { 
   if(i==1)
    throw new Exception();  
   output+="1"; 
  } 
  catch(Exception e)
  { 
   output+="2"; 
   return; 
  } 
  finally
  { 
   output+="3"; 
  } 
  output+="4"; 
 }
 public static void main(String args[])
 { 
  foo(0);
  System.out.println(output);
  foo(1); 
  System.out.println(output);
 }
}

まず、outputはStringタイプのデータです.
 foo(0); System.out.println(output);次のようになります.
 134

outputはstaticで修飾されているので、このときのoutput="134"
に続く
 foo(0);  System.out.println(output);
13423